Merge pull request #717 from realm/al/notifier

Use latest core, sync, and object store
This commit is contained in:
Ari Lazier 2016-12-07 07:40:30 +01:00 committed by GitHub
commit 9ddc2065bb
9 changed files with 79 additions and 32 deletions

View File

@ -1,5 +1,5 @@
PACKAGE_NAME=realm-js
VERSION=0.15.1-rc
REALM_CORE_VERSION=2.1.4
REALM_SYNC_VERSION=1.0.0-BETA-3.3
REALM_OBJECT_SERVER_VERSION=1.0.0-BETA-2.1
REALM_CORE_VERSION=2.2.0
REALM_SYNC_VERSION=1.0.0-BETA-5.0
REALM_OBJECT_SERVER_VERSION=1.0.0-BETA-4.8

View File

@ -7,7 +7,7 @@
},
"source": {
"include": ["docs"],
"exclude": ["docs/jsdoc-template", "docs/output", "docs/sync.js"]
"exclude": ["docs/jsdoc-template", "docs/output"]
},
"tags": {
"allowUnknownTags": false

View File

@ -20,21 +20,28 @@
* @memberof Realm
*/
class Sync {
/**
* Add a sync listener to listen to changes across multiple Realms
* @param {string} server_url - the sync server to listen to
* @param {SyncUser} admin_user - an admin user obtained by calling `new Realm.Sync.User.adminUser`
* @param {string} regex - a regular expression used to determine which cahnged Realms should trigger events -
* Use `.*` to match all all Realms
* @param {function(change_object)} change_callback - called on when changes are made to any Realm which
* match the given regular expression
*/
static addListener(server_url, admin_user, regex, change_callback) {}
/**
* Set a global listener function.
* @param {string} local_path - The path to the directory where realm files are stored [deprecated]
* @param {string} server_url - The sync server to listen to
* @param {SyncUser} admin_user - An admin user obtained by calling `new Realm.Sync.User.Admin`
* @param {function(realm_name)} filter_callback - Return true to recieve changes for the given realm
* @param {function(realm_name, realm, change_set)} change_callback - called on any realm changes with
* the following arguments:
* - `realm_name` - path of the Realm on which changes occurred
* - `realm` - a `Realm` object for the changed Realm
* - `change_set` - a dictionary of object names to arays of indexes indicating the indexes of objects of each type
* which have been added, removed, or modified
* Remove a previously registered sync listener
* @param {string} regex - the regular expression previously used to register the listener
* @param {function(change_object)} change_callback - the previously registered callback to be removed
*/
static setGlobalListener(local_path, server_url, admin_user, filter_callback, change_callback) {}
static removeListener(regex, change_callback) {}
/**
* Remove all previously regiestered listeners
*/
static removeAllListeners() {}
/**
* Set the sync log level.
@ -44,6 +51,47 @@ class Sync {
}
/**
* Object passed
* @memberof Realm.Sync
*/
class ChangeObject {
/**
* The path of the changed Realm
* @type {string}
*/
get path() {}
/**
* The changed realm
* @type {Realm}
*/
get realm() {}
/**
* The changed Realm at the old state before the changes were applied
* @type {Realm}
*/
get oldRealm() {}
/**
* The change indexes for all added, removed, and modified objects in the changed Realm.
* This object is a hashmap of object types to arrays of indexes for all changed objects:
* @example
* {
* object_type_1: {
* insertions: [indexes...],
* deletions: [indexes...],
* modifications: [indexes...]
* },
* object_type_2:
* ...
* }
* @type {object}
*/
get changes() {}
}
/**
* @typedef Realm.Sync~LogLevel
* @type {("error"|"info"|"debug")}

View File

@ -27,7 +27,7 @@ if [ "$1" = 'node' ]; then
PLATFORM_TAG="node-osx-"
SYNC_PLATFORM_TAG="node-cocoa-"
CORE_DOWNLOAD_FILE="realm-core-node-osx-$REALM_CORE_VERSION.tar.gz"
SYNC_DOWNLOAD_FILE="realm-sync-$SYNC_PLATFORM_TAG$REALM_SYNC_VERSION.zip"
SYNC_DOWNLOAD_FILE="realm-sync-$SYNC_PLATFORM_TAG$REALM_SYNC_VERSION.tar.gz"
else
PLATFORM_TAG="node-linux-"
SYNC_PLATFORM_TAG="node-cocoa-"
@ -35,7 +35,7 @@ if [ "$1" = 'node' ]; then
SYNC_DOWNLOAD_FILE=""
fi
SYNC_EXTRACT="unzip"
SYNC_EXTRACT="tar -xvf"
EXTRACTED_DIR="realm-sync-node-cocoa-$REALM_SYNC_VERSION"
else
ENABLE_SYNC="yes" # FIXME: This means that both core and sync will be downloaded for non "node" targets.

View File

@ -14,7 +14,7 @@ if [ -f object-server-for-testing/node_modules/realm-object-server/CHANGELOG.md
fi
fi
object_server_bundle="realm-object-server-bundled_node_darwin-$REALM_OBJECT_SERVER_VERSION.tar.gz"
object_server_bundle="realm-object-server-bundled_node_darwin-developer-$REALM_OBJECT_SERVER_VERSION.tar.gz"
curl -f -L "https://static.realm.io/downloads/object-server/$object_server_bundle" -o "$object_server_bundle"
rm -rf object-server-for-testing
mkdir object-server-for-testing

View File

@ -62,9 +62,7 @@ class RealmDelegate : public BindingContext {
using ObjectDefaultsMap = typename Schema<T>::ObjectDefaultsMap;
using ConstructorMap = typename Schema<T>::ConstructorMap;
virtual void did_change(std::vector<ObserverState> const& observers,
std::vector<void*> const& invalidated,
bool version_changed=true) {
virtual void did_change(std::vector<ObserverState> const& observers, std::vector<void*> const& invalidated, bool version_changed) {
notify("change");
}
virtual std::vector<ObserverState> get_observed_rows() {
@ -457,14 +455,15 @@ void RealmClass<T>::schema_version(ContextType ctx, ObjectType this_object, size
template<typename T>
void RealmClass<T>::clear_test_state(ContextType ctx, ObjectType this_object, size_t argc, const ValueType arguments[], ReturnValue &return_value) {
validate_argument_count(argc, 0);
delete_all_realms();
#if REALM_ENABLE_SYNC
for(auto &user : SyncManager::shared().all_users()) {
for(auto &user : SyncManager::shared().all_logged_in_users()) {
user->log_out();
}
SyncManager::shared().reset_for_testing();
SyncManager::shared().configure_file_system(default_realm_file_directory(), SyncManager::MetadataMode::NoEncryption);
#endif
delete_all_realms();
}
template<typename T>

View File

@ -127,8 +127,8 @@ void UserClass<T>::create_user(ContextType ctx, ObjectType this_object, size_t a
template<typename T>
void UserClass<T>::all_users(ContextType ctx, ObjectType object, ReturnValue &return_value) {
auto users = Object::create_empty(ctx);
for (auto user : SyncManager::shared().all_users()) {
if (user->state() == SyncUser::State::Active) {
for (auto user : SyncManager::shared().all_logged_in_users()) {
if (!user->is_admin()) {
Object::set_property(ctx, users, user->identity(), create_object<T, UserClass<T>>(ctx, new SharedUser(user)), ReadOnly | DontDelete);
}
}
@ -138,8 +138,8 @@ void UserClass<T>::all_users(ContextType ctx, ObjectType object, ReturnValue &re
template<typename T>
void UserClass<T>::current_user(ContextType ctx, ObjectType object, ReturnValue &return_value) {
SharedUser *current = nullptr;
for (auto user : SyncManager::shared().all_users()) {
if (user->state() == SyncUser::State::Active) {
for (auto user : SyncManager::shared().all_logged_in_users()) {
if (!user->is_admin()) {
if (current != nullptr) {
throw std::runtime_error("More than one user logged in currently.");
}
@ -302,7 +302,7 @@ void SyncClass<T>::populate_sync_config(ContextType ctx, ObjectType realm_constr
std::string raw_realm_url = Object::validated_get_string(ctx, sync_config_object, "url");
// FIXME - use make_shared
config.sync_config = std::shared_ptr<SyncConfig>(new SyncConfig{shared_user, raw_realm_url, SyncSessionStopPolicy::AfterChangesUploaded, handler, [=](int error_code, std::string message, SyncSessionError) {}}
config.sync_config = std::shared_ptr<SyncConfig>(new SyncConfig{shared_user, raw_realm_url, SyncSessionStopPolicy::AfterChangesUploaded, handler, [=](auto, int error_code, std::string message, SyncSessionError) {}}
);
config.schema_mode = SchemaMode::Additive;
config.path = realm::SyncManager::shared().path_for_realm(shared_user->identity(), raw_realm_url);

@ -1 +1 @@
Subproject commit ddf845eb23884f6644d15c896952ee0f5ea5ad57
Subproject commit 1d635d3e05ac7d86939b03b46833e08c1ffc769e

View File

@ -127,7 +127,7 @@ module.exports = {
assertIsUser(user);
Realm.Sync.User.register('http://localhost:9080', username, 'password', (error, user) => {
assertIsAuthError(error, 613, 'https://realm.io/docs/object-server/problems/existing-account');
assertIsAuthError(error, 611, 'https://realm.io/docs/object-server/problems/invalid-credentials');
TestCase.assertUndefined(user);
});
});
@ -193,7 +193,7 @@ module.exports = {
testLoginNonExistingUser() {
return callbackTest((callback) => Realm.Sync.User.login('http://localhost:9080', 'does_not', 'exist', callback), (error, user) => {
assertIsAuthError(error, 612, 'https://realm.io/docs/object-server/problems/unknown-account');
assertIsAuthError(error, 611, 'https://realm.io/docs/object-server/problems/invalid-credentials');
TestCase.assertUndefined(user);
});
},