rhoconnect 3.4.5 → 4.0.0.beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.md +57 -3
- data/Gemfile +9 -7
- data/Gemfile.lock +37 -37
- data/Rakefile +18 -7
- data/bench/benchapp/Gemfile +1 -1
- data/bench/benchapp/config.ru +0 -3
- data/bench/benchapp/controllers/ruby/application.rb +17 -0
- data/bench/benchapp/controllers/ruby/application_controller.rb +17 -0
- data/bench/benchapp/controllers/ruby/mock_adapter_controller.rb +8 -0
- data/bench/benchapp/controllers/ruby/queue_mock_adapter_controller.rb +8 -0
- data/bench/benchapp/{sources → models/ruby}/mock_adapter.rb +1 -1
- data/bench/benchapp/{sources → models/ruby}/queue_mock_adapter.rb +0 -0
- data/bench/benchapp/spec/{sources → models/ruby}/mock_adapter_spec.rb +1 -1
- data/bench/benchapp/spec/{sources → models/ruby}/queue_mock_adapter_spec.rb +1 -1
- data/bench/benchapp/spec/spec_helper.rb +2 -2
- data/bench/blobapp/Gemfile +1 -1
- data/bench/blobapp/config.ru +0 -3
- data/bench/blobapp/controllers/ruby/application_controller.rb +17 -0
- data/bench/blobapp/controllers/ruby/blob_adapter_controller.rb +8 -0
- data/bench/blobapp/{sources → models/ruby}/blob_adapter.rb +9 -2
- data/bench/blobapp/spec/{sources → models/ruby}/blob_adapter_spec.rb +1 -1
- data/bench/blobapp/spec/spec_helper.rb +1 -1
- data/bench/lib/bench/cli.rb +1 -1
- data/bench/scripts/blob_cud_script.rb +1 -1
- data/bench/scripts/query_md_script.rb +1 -1
- data/bench/scripts/query_only_script.rb +1 -1
- data/bench/scripts/query_script.rb +1 -1
- data/bench/scripts/test_query_script.rb +7 -1
- data/bench/spec/mock_adapter_spec.rb +1 -1
- data/bench/spec/result_spec.rb +3 -3
- data/bin/rhoconnect +5 -3
- data/commands/dtach/dtach_install.rb +2 -2
- data/commands/execute.rb +8 -3
- data/commands/generators/app.rb +3 -3
- data/commands/generators/controller.rb +6 -0
- data/commands/generators/model.rb +6 -0
- data/commands/generators/source.rb +3 -3
- data/commands/generators/update.rb +1 -1
- data/commands/redis/redis_about.rb +2 -2
- data/commands/redis/redis_download.rb +1 -1
- data/commands/redis/redis_install.rb +4 -3
- data/commands/redis/redis_restart.rb +4 -4
- data/commands/redis/redis_start.rb +5 -4
- data/commands/redis/redis_startbg.rb +5 -4
- data/commands/redis/redis_status.rb +13 -0
- data/commands/redis/redis_stop.rb +3 -3
- data/commands/rhoconnect/config.rb +28 -16
- data/commands/rhoconnect/flushdb.rb +1 -2
- data/commands/rhoconnect/get_token.rb +15 -11
- data/commands/rhoconnect/restart.rb +13 -5
- data/commands/rhoconnect/set_admin_password.rb +8 -8
- data/commands/rhoconnect/start.rb +74 -16
- data/commands/rhoconnect/startbg.rb +1 -1
- data/commands/rhoconnect/startdebug.rb +1 -1
- data/commands/rhoconnect/stop.rb +13 -1
- data/commands/rhoconnect/web.rb +5 -5
- data/commands/rhoconnect_console/console.rb +7 -5
- data/commands/{rhoconnect → rhoconnect_spec}/spec.rb +0 -0
- data/commands/rhoconnect_war/war.rb +9 -9
- data/commands/utilities/blank_app.ru +56 -0
- data/commands/utilities/redis_runner.rb +54 -19
- data/doc/authentication.txt +80 -6
- data/doc/blob-sync.txt +104 -97
- data/doc/bulk-sync.txt +1 -1
- data/doc/client-java.txt +3 -3
- data/doc/client-objc.txt +2 -2
- data/doc/client.txt +4 -4
- data/doc/command-line.txt +105 -200
- data/doc/data-partitioning.txt +40 -0
- data/doc/deploying.txt +249 -77
- data/doc/extending-rhoconnect-server.txt +40 -57
- data/doc/heroku-addon.txt +2 -0
- data/doc/install.txt +45 -95
- data/doc/introduction.txt +1 -1
- data/doc/java-plugin.txt +365 -190
- data/doc/metadata.txt +1 -1
- data/doc/migration.txt +108 -142
- data/doc/preparing-production.txt +1 -1
- data/doc/push-backend-setup.txt +2 -0
- data/doc/push-client-setup-android.txt +78 -0
- data/doc/push-client-setup-bb.txt +81 -0
- data/doc/push-client-setup-ios.txt +70 -0
- data/doc/push-client-setup-rps.txt +200 -0
- data/doc/push-client-setup.txt +63 -66
- data/doc/push-server-setup.txt +67 -40
- data/doc/push-testing.txt +29 -0
- data/doc/push.txt +21 -6
- data/doc/rest-api.txt +128 -55
- data/doc/rhoconnect-redis-stack.txt +120 -0
- data/doc/settings.txt +4 -12
- data/doc/source-adapters-intro.txt +28 -0
- data/doc/source-adapters.txt +235 -272
- data/doc/stats-middleware.txt +9 -29
- data/doc/supported-platforms.txt +21 -30
- data/doc/testing.txt +40 -42
- data/doc/tutorial.txt +72 -57
- data/examples/simple/Gemfile +1 -1
- data/examples/simple/application.rb +4 -5
- data/examples/simple/my_server.rb +2 -2
- data/examples/simple/settings/settings.yml +1 -1
- data/generators/rhoconnect.rb +151 -50
- data/generators/templates/application/Gemfile +1 -1
- data/generators/templates/application/Rakefile +3 -3
- data/generators/templates/application/config.ru +1 -4
- data/generators/templates/application/controllers/application_controller.rb +17 -0
- data/generators/templates/application/controllers/js/application_controller.js +14 -0
- data/generators/templates/application/controllers/ruby/application_controller.rb +17 -0
- data/generators/templates/application/package.json +8 -0
- data/generators/templates/application/rcgemfile +2 -5
- data/generators/templates/application/settings/settings.yml +3 -3
- data/generators/templates/application/spec/application_controller_spec.rb +23 -0
- data/generators/templates/application/spec/js_spec.rb +25 -0
- data/generators/templates/application/spec/spec_helper.rb +21 -7
- data/generators/templates/source/controllers/js/controller.js +7 -0
- data/generators/templates/source/controllers/ruby/controller.rb +8 -0
- data/generators/templates/source/controllers/ruby/controller_spec.rb +27 -0
- data/generators/templates/source/models/js/model.js +46 -0
- data/generators/templates/source/{source_adapter.rb → models/ruby/model.rb} +15 -10
- data/generators/templates/source/{source_spec.rb → models/ruby/model_spec.rb} +1 -1
- data/install.sh +5 -5
- data/installer/unix-like/create_texts.rb +2 -2
- data/installer/unix-like/rho_connect_install_constants.rb +2 -2
- data/installer/unix-like/rho_connect_install_utilities.rb +1 -1
- data/installer/utils/constants.rb +4 -4
- data/js-adapters/ballroom.js +216 -0
- data/js-adapters/node.rb +52 -0
- data/js-adapters/node_channel.rb +181 -0
- data/js-adapters/request.js +27 -0
- data/js-adapters/response.js +57 -0
- data/js-adapters/rhoconnect_helpers.js +60 -0
- data/js-adapters/router.js +60 -0
- data/js-adapters/server.js +5 -0
- data/lib/rhoconnect/api/app/ans_login.rb +3 -3
- data/lib/rhoconnect/api/app/bulk_data.rb +10 -10
- data/lib/rhoconnect/api/app/fast_delete.rb +11 -10
- data/lib/rhoconnect/api/app/fast_insert.rb +11 -10
- data/lib/rhoconnect/api/app/fast_update.rb +11 -10
- data/lib/rhoconnect/api/app/login.rb +5 -5
- data/lib/rhoconnect/api/app/push_deletes.rb +12 -11
- data/lib/rhoconnect/api/app/push_objects.rb +12 -11
- data/lib/rhoconnect/api/app/query.rb +8 -7
- data/lib/rhoconnect/api/app/queue_updates.rb +98 -94
- data/lib/rhoconnect/api/app/search.rb +8 -7
- data/lib/rhoconnect/api/client/client_get_db_doc.rb +5 -5
- data/lib/rhoconnect/api/client/client_set_db_doc.rb +8 -8
- data/lib/rhoconnect/api/client/create.rb +7 -7
- data/lib/rhoconnect/api/client/get_client_params.rb +4 -4
- data/lib/rhoconnect/api/client/list_client_docs.rb +17 -17
- data/lib/rhoconnect/api/client/register.rb +12 -12
- data/lib/rhoconnect/api/client/reset.rb +5 -5
- data/lib/rhoconnect/api/readstate/set_refresh_time.rb +9 -9
- data/lib/rhoconnect/api/source/get_source_params.rb +4 -4
- data/lib/rhoconnect/api/source/list_sources.rb +16 -16
- data/lib/rhoconnect/api/source/update_source_params.rb +6 -6
- data/lib/rhoconnect/api/store/get_db_doc.rb +4 -4
- data/lib/rhoconnect/api/store/set_db_doc.rb +7 -7
- data/lib/rhoconnect/api/system/get_adapter.rb +4 -4
- data/lib/rhoconnect/api/system/get_license_info.rb +8 -8
- data/lib/rhoconnect/api/system/login.rb +15 -15
- data/lib/rhoconnect/api/system/reset.rb +11 -11
- data/lib/rhoconnect/api/system/save_adapter.rb +4 -4
- data/lib/rhoconnect/api/system/stats.rb +22 -22
- data/lib/rhoconnect/api/user/create_user.rb +7 -7
- data/lib/rhoconnect/api/user/delete_client.rb +6 -6
- data/lib/rhoconnect/api/user/delete_user.rb +11 -10
- data/lib/rhoconnect/api/user/list_clients.rb +4 -4
- data/lib/rhoconnect/api/user/list_source_docs.rb +10 -10
- data/lib/rhoconnect/api/user/list_users.rb +3 -3
- data/lib/rhoconnect/api/user/ping.rb +3 -3
- data/lib/rhoconnect/api/user/show_user.rb +3 -3
- data/lib/rhoconnect/api/user/update_user.rb +5 -5
- data/lib/rhoconnect/api/user/user_get_db_doc.rb +5 -5
- data/lib/rhoconnect/api/user/user_set_db_doc.rb +10 -10
- data/lib/rhoconnect/api_token.rb +5 -6
- data/lib/rhoconnect/app.rb +6 -46
- data/lib/rhoconnect/application/init.rb +5 -2
- data/lib/rhoconnect/async.rb +76 -39
- data/lib/rhoconnect/bulk_data/bulk_data.rb +6 -4
- data/lib/rhoconnect/client.rb +59 -9
- data/lib/rhoconnect/condition/admin_required.rb +27 -0
- data/lib/rhoconnect/condition/client_required.rb +50 -0
- data/lib/rhoconnect/condition/login_required.rb +22 -0
- data/lib/rhoconnect/condition/source_required.rb +49 -0
- data/lib/rhoconnect/condition/verbs.rb +17 -0
- data/lib/rhoconnect/condition/verify_success.rb +19 -0
- data/lib/rhoconnect/controller/app_base.rb +74 -0
- data/lib/rhoconnect/controller/base.rb +68 -0
- data/lib/rhoconnect/controller/clients_controller.rb +79 -0
- data/lib/rhoconnect/controller/dynamic_adapter_controller.rb +93 -0
- data/lib/rhoconnect/controller/js_base.rb +124 -0
- data/lib/rhoconnect/controller/read_state_controller.rb +22 -0
- data/lib/rhoconnect/controller/source_adapter_base.rb +14 -0
- data/lib/rhoconnect/controller/sources_controller.rb +44 -0
- data/lib/rhoconnect/controller/store_controller.rb +25 -0
- data/lib/rhoconnect/controller/system_controller.rb +67 -0
- data/lib/rhoconnect/controller/users_controller.rb +99 -0
- data/lib/rhoconnect/db_adapter.rb +1 -3
- data/lib/rhoconnect/document.rb +159 -50
- data/lib/rhoconnect/handler/authenticate/execute_methods.rb +77 -0
- data/lib/rhoconnect/handler/authenticate/runner.rb +49 -0
- data/lib/rhoconnect/handler/authenticate.rb +3 -0
- data/lib/rhoconnect/handler/bulk_data.rb +28 -0
- data/lib/rhoconnect/handler/changes/engine.rb +271 -0
- data/lib/rhoconnect/handler/changes/execute_methods.rb +88 -0
- data/lib/rhoconnect/handler/changes/pass_through_runner.rb +11 -0
- data/lib/rhoconnect/handler/changes/runner.rb +53 -0
- data/lib/rhoconnect/handler/changes.rb +31 -0
- data/lib/rhoconnect/handler/helpers/auth_method.rb +29 -0
- data/lib/rhoconnect/handler/helpers/binding.rb +18 -0
- data/lib/rhoconnect/handler/helpers/bulk_data.rb +53 -0
- data/lib/rhoconnect/handler/helpers/source_job.rb +14 -0
- data/lib/rhoconnect/handler/helpers.rb +4 -0
- data/lib/rhoconnect/handler/plugin_callbacks/execute_methods.rb +99 -0
- data/lib/rhoconnect/handler/plugin_callbacks/runner.rb +28 -0
- data/lib/rhoconnect/handler/plugin_callbacks.rb +67 -0
- data/lib/rhoconnect/handler/query/engine.rb +93 -0
- data/lib/rhoconnect/handler/query/execute_methods.rb +21 -0
- data/lib/rhoconnect/handler/query/pass_through_runner.rb +35 -0
- data/lib/rhoconnect/handler/query/runner.rb +270 -0
- data/lib/rhoconnect/handler/query.rb +19 -0
- data/lib/rhoconnect/handler/search/engine.rb +60 -0
- data/lib/rhoconnect/handler/search/execute_methods.rb +32 -0
- data/lib/rhoconnect/handler/search/pass_through_runner.rb +18 -0
- data/lib/rhoconnect/handler/search/runner.rb +104 -0
- data/lib/rhoconnect/handler/search.rb +26 -0
- data/lib/rhoconnect/handler/sync.rb +29 -0
- data/lib/rhoconnect/jobs/source_job.rb +13 -4
- data/lib/rhoconnect/js_adapter.rb +79 -0
- data/lib/rhoconnect/license.rb +10 -2
- data/lib/rhoconnect/middleware/current_user.rb +14 -1
- data/lib/rhoconnect/middleware/helpers.rb +10 -93
- data/lib/rhoconnect/middleware/x_domain_session_wrapper.rb +1 -1
- data/lib/rhoconnect/model/base.rb +229 -0
- data/lib/rhoconnect/model/dynamic_adapter_model.rb +90 -0
- data/lib/rhoconnect/model/js_base.rb +121 -0
- data/lib/rhoconnect/ping/android.rb +1 -1
- data/lib/rhoconnect/predefined_adapters/bench_adapter.rb +7 -4
- data/lib/rhoconnect/read_state.rb +3 -3
- data/lib/rhoconnect/server.rb +159 -190
- data/lib/rhoconnect/source.rb +100 -11
- data/lib/rhoconnect/stats/record.rb +10 -10
- data/lib/rhoconnect/store.rb +905 -591
- data/lib/rhoconnect/{model.rb → store_orm.rb} +53 -115
- data/lib/rhoconnect/tasks.rb +18 -4
- data/lib/rhoconnect/test_methods.rb +30 -17
- data/lib/rhoconnect/user.rb +35 -17
- data/lib/rhoconnect/utilities.rb +1 -1
- data/lib/rhoconnect/version.rb +2 -2
- data/lib/rhoconnect/web-console/server.rb +29 -14
- data/lib/rhoconnect/web-console/views/home.js +10 -10
- data/lib/rhoconnect/web-console/views/new_ping.js +1 -1
- data/lib/rhoconnect.rb +120 -51
- data/rhoconnect.gemspec +4 -3
- data/spec/api/api_helper.rb +1 -6
- data/spec/api/app/fast_delete_spec.rb +4 -4
- data/spec/api/app/fast_insert_spec.rb +4 -4
- data/spec/api/app/fast_update_spec.rb +8 -8
- data/spec/api/app/push_deletes_spec.rb +2 -2
- data/spec/api/app/push_objects_spec.rb +5 -5
- data/spec/api/client/client_get_db_doc_spec.rb +6 -4
- data/spec/api/client/client_set_db_doc_spec.rb +3 -2
- data/spec/api/client/get_client_params_spec.rb +14 -0
- data/spec/api/client/list_client_docs_spec.rb +30 -20
- data/spec/api/client/reset_spec.rb +36 -0
- data/spec/api/source/get_source_params_spec.rb +23 -17
- data/spec/api/system/get_license_info_spec.rb +0 -20
- data/spec/api/system/login_spec.rb +8 -0
- data/spec/api/system/reset_spec.rb +0 -1
- data/spec/api/system/stats_spec.rb +5 -5
- data/spec/api/user/create_user_spec.rb +14 -6
- data/spec/api/user/delete_user_spec.rb +20 -18
- data/spec/api/user/list_users_spec.rb +5 -6
- data/spec/api/user/update_user_spec.rb +5 -4
- data/spec/apps/rhotestapp/config.ru +16 -1
- data/spec/apps/rhotestapp/controllers/js/js_sample_controller.js +23 -0
- data/spec/apps/rhotestapp/controllers/js/sample2_controller.js +32 -0
- data/spec/apps/rhotestapp/controllers/ruby/application_controller.rb +21 -0
- data/spec/apps/rhotestapp/controllers/ruby/sample_adapter_controller.rb +8 -0
- data/spec/apps/rhotestapp/models/js/js_sample.js +55 -0
- data/spec/apps/rhotestapp/models/js/sample2.js +25 -0
- data/spec/apps/rhotestapp/{sources → models/ruby}/base_adapter.rb +0 -0
- data/spec/apps/rhotestapp/{sources → models/ruby}/fixed_schema_adapter.rb +0 -0
- data/spec/apps/rhotestapp/{sources → models/ruby}/other_adapter.rb +0 -0
- data/spec/apps/rhotestapp/{sources → models/ruby}/sample_adapter.rb +0 -0
- data/spec/apps/rhotestapp/{sources → models/ruby}/simple_adapter.rb +2 -2
- data/spec/apps/rhotestapp/{sources → models/ruby}/sub_adapter.rb +0 -0
- data/spec/apps/rhotestapp/settings/settings.yml +0 -1
- data/spec/bulk_data/bulk_data_spec.rb +20 -5
- data/spec/cli/cli_spec.rb +83 -0
- data/spec/client_spec.rb +20 -17
- data/spec/client_sync_spec.rb +244 -406
- data/spec/controllers/js_base_spec.rb +89 -0
- data/spec/doc/doc_spec.rb +18 -18
- data/spec/document_spec.rb +29 -13
- data/spec/dynamic_adapter_spec.rb +6 -6
- data/spec/generator/generator_spec.rb +7 -4
- data/spec/jobs/bulk_data_job_spec.rb +14 -10
- data/spec/jobs/source_job_spec.rb +8 -8
- data/spec/license_spec.rb +5 -2
- data/spec/models/js_model_spec.rb +39 -0
- data/spec/node_spec.rb +42 -0
- data/spec/perf/store_perf_spec.rb +67 -12
- data/spec/ping/android_spec.rb +1 -1
- data/spec/read_state_spec.rb +1 -1
- data/spec/rhoconnect_spec.rb +1 -1
- data/spec/server/cors_spec.rb +14 -18
- data/spec/server/server_spec.rb +265 -88
- data/spec/server/stats_spec.rb +1 -1
- data/spec/source_adapter_spec.rb +54 -27
- data/spec/source_spec.rb +8 -3
- data/spec/source_sync_spec.rb +538 -468
- data/spec/spec_helper.rb +35 -4
- data/spec/stats/record_spec.rb +10 -10
- data/spec/{model_spec.rb → store_orm_spec.rb} +56 -54
- data/spec/store_spec.rb +159 -179
- data/spec/support/shared_examples.rb +36 -27
- data/spec/sync_states_spec.rb +40 -33
- data/spec/test_methods_spec.rb +18 -14
- data/spec/user_spec.rb +17 -30
- metadata +156 -52
- data/bench/benchapp/application.rb +0 -39
- data/bench/blobapp/application.rb +0 -44
- data/commands/rhoconnect/clean_start.rb +0 -9
- data/commands/rhoconnect/create_user.rb +0 -18
- data/commands/rhoconnect/delete_device.rb +0 -9
- data/commands/rhoconnect/delete_user.rb +0 -8
- data/commands/rhoconnect/reset.rb +0 -16
- data/commands/rhoconnect/reset_refresh.rb +0 -11
- data/generators/templates/application/application.rb +0 -43
- data/lib/rhoconnect/client_sync.rb +0 -434
- data/lib/rhoconnect/dynamic_adapter.rb +0 -91
- data/lib/rhoconnect/middleware/admin_user.rb +0 -23
- data/lib/rhoconnect/middleware/current_request.rb +0 -16
- data/lib/rhoconnect/middleware/login_required.rb +0 -22
- data/lib/rhoconnect/source_adapter.rb +0 -132
- data/lib/rhoconnect/source_sync.rb +0 -464
- data/spec/apps/rhotestapp/application.rb +0 -23
|
@@ -1,26 +1,25 @@
|
|
|
1
1
|
module Rhoconnect
|
|
2
|
-
# Taken from http://github.com/voloko/
|
|
2
|
+
# Taken from http://github.com/voloko/store-model
|
|
3
3
|
#
|
|
4
|
-
# Simple
|
|
5
|
-
|
|
6
|
-
class Model
|
|
4
|
+
# Simple ORM for store-rb.
|
|
5
|
+
class StoreOrm
|
|
7
6
|
attr_accessor :id
|
|
8
7
|
|
|
9
8
|
def initialize(id=nil)
|
|
10
9
|
self.id = id
|
|
11
10
|
end
|
|
12
11
|
|
|
13
|
-
def
|
|
14
|
-
self.class.
|
|
12
|
+
def store #:nodoc:
|
|
13
|
+
self.class.store
|
|
15
14
|
end
|
|
16
15
|
|
|
17
16
|
# Issues delete commands for all defined fields
|
|
18
17
|
def delete(name = nil)
|
|
19
18
|
if name
|
|
20
|
-
|
|
19
|
+
store.delete_value(field_key(name.to_s))
|
|
21
20
|
else
|
|
22
21
|
self.class.fields.each do |field|
|
|
23
|
-
|
|
22
|
+
store.delete_value(field_key(field[:name]))
|
|
24
23
|
end
|
|
25
24
|
end
|
|
26
25
|
end
|
|
@@ -33,22 +32,22 @@ module Rhoconnect
|
|
|
33
32
|
# specified amount.
|
|
34
33
|
def increment!(name,amount=1)
|
|
35
34
|
raise ArgumentError, "Only integer fields can be incremented." unless self.class.fields.include?({:name => name.to_s, :type => :integer})
|
|
36
|
-
|
|
35
|
+
store.update_count(field_key(name), amount)
|
|
37
36
|
end
|
|
38
37
|
|
|
39
38
|
# Decrement the specified integer field by 1 or the
|
|
40
39
|
# specified amount.
|
|
41
40
|
def decrement!(name,amount=1)
|
|
42
41
|
raise ArgumentError, "Only integer fields can be decremented." unless self.class.fields.include?({:name => name.to_s, :type => :integer})
|
|
43
|
-
|
|
42
|
+
store.update_count(field_key(name), -amount)
|
|
44
43
|
end
|
|
45
44
|
|
|
46
45
|
def next_id #:nodoc:
|
|
47
|
-
|
|
46
|
+
store.incr "sequence:#{self.prefix}:id"
|
|
48
47
|
end
|
|
49
48
|
|
|
50
49
|
def self.is_exist?(id)
|
|
51
|
-
!
|
|
50
|
+
!store.get_value(self._field_key(self._prefix,id,'rho__id')).nil?
|
|
52
51
|
end
|
|
53
52
|
|
|
54
53
|
def to_array
|
|
@@ -59,16 +58,6 @@ module Rhoconnect
|
|
|
59
58
|
res
|
|
60
59
|
end
|
|
61
60
|
|
|
62
|
-
# TODO: not used anymore
|
|
63
|
-
# def update(attribs)
|
|
64
|
-
# self.class.fields.each do |field|
|
|
65
|
-
# if field[:name] != 'name' and field[:name] != 'rho__id'
|
|
66
|
-
# redis.del field_key(field[:name])
|
|
67
|
-
# end
|
|
68
|
-
# end
|
|
69
|
-
# self.class.populate_attributes(self,attribs)
|
|
70
|
-
# end
|
|
71
|
-
|
|
72
61
|
protected
|
|
73
62
|
def prefix #:nodoc:
|
|
74
63
|
@prefix ||= self.class.prefix || self.class.class_prefix(self.class)
|
|
@@ -132,8 +121,8 @@ module Rhoconnect
|
|
|
132
121
|
# Creates new model instance with given id
|
|
133
122
|
alias_method :with_key, :new
|
|
134
123
|
alias_method :with_next_key, :create
|
|
135
|
-
|
|
136
|
-
# Defines marshaled rw accessor for
|
|
124
|
+
|
|
125
|
+
# Defines marshaled rw accessor for store string value
|
|
137
126
|
def field(name, type = :string)
|
|
138
127
|
if @fields.nil?
|
|
139
128
|
@fields = []
|
|
@@ -146,30 +135,30 @@ module Rhoconnect
|
|
|
146
135
|
|
|
147
136
|
fields << {:name => name.to_s, :type => type}
|
|
148
137
|
if type == :string
|
|
149
|
-
class_eval "def #{name}; @#{name} ||=
|
|
150
|
-
class_eval "def #{name}=(value); @#{name} =
|
|
138
|
+
class_eval "def #{name}; @#{name} ||= store.get_value(field_key('#{name}')); end"
|
|
139
|
+
class_eval "def #{name}=(value); @#{name} = value.to_s; store.put_value(field_key('#{name}'), value.to_s); end"
|
|
151
140
|
else
|
|
152
|
-
class_eval "def #{name}; @#{name} ||= Marshal::#{class_name}.load(
|
|
153
|
-
class_eval "def #{name}=(value); @#{name} = value;
|
|
141
|
+
class_eval "def #{name}; @#{name} ||= Marshal::#{class_name}.load(store.get_value(field_key('#{name}'))); end"
|
|
142
|
+
class_eval "def #{name}=(value); @#{name} = value; store.put_value(field_key('#{name}'), Marshal::#{class_name}.dump(value)); end"
|
|
154
143
|
end
|
|
155
144
|
end
|
|
156
145
|
alias_method :value, :field
|
|
157
146
|
|
|
158
|
-
# Defines accessor for
|
|
147
|
+
# Defines accessor for store list
|
|
159
148
|
def list(name, type = :string)
|
|
160
149
|
class_name = marshal_class_name(name, type)
|
|
161
150
|
|
|
162
151
|
fields << {:name => name.to_s, :type => :list}
|
|
163
|
-
class_eval "def #{name}; @#{name} ||= ListProxy.new(self.
|
|
152
|
+
class_eval "def #{name}; @#{name} ||= ListProxy.new(self.store, field_key('#{name}'), Marshal::#{class_name}); end"
|
|
164
153
|
eval_writer(name)
|
|
165
154
|
end
|
|
166
155
|
|
|
167
|
-
# Defines accessor for
|
|
156
|
+
# Defines accessor for store set
|
|
168
157
|
def set(name, type = :string)
|
|
169
158
|
class_name = marshal_class_name(name, type)
|
|
170
159
|
|
|
171
160
|
fields << {:name => name.to_s, :type => :set}
|
|
172
|
-
class_eval "def #{name}; @#{name} ||= SetProxy.new(self.
|
|
161
|
+
class_eval "def #{name}; @#{name} ||= SetProxy.new(self.store, field_key('#{name}'), Marshal::#{class_name}); end"
|
|
173
162
|
eval_writer(name)
|
|
174
163
|
end
|
|
175
164
|
|
|
@@ -178,8 +167,8 @@ module Rhoconnect
|
|
|
178
167
|
end
|
|
179
168
|
|
|
180
169
|
# Redefine this to change connection options
|
|
181
|
-
def
|
|
182
|
-
@@
|
|
170
|
+
def store
|
|
171
|
+
@@store ||= Store.get_store(0)
|
|
183
172
|
end
|
|
184
173
|
|
|
185
174
|
def fields #:nodoc:
|
|
@@ -197,6 +186,19 @@ module Rhoconnect
|
|
|
197
186
|
field << v
|
|
198
187
|
end
|
|
199
188
|
end
|
|
189
|
+
END
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def instance_eval_writer(name) #:nodoc:
|
|
193
|
+
instance_eval <<-END
|
|
194
|
+
def #{name}=(value)
|
|
195
|
+
field = self.#{name};
|
|
196
|
+
if value.respond_to?(:each)
|
|
197
|
+
value.each {|v| field << v}
|
|
198
|
+
else
|
|
199
|
+
field << v
|
|
200
|
+
end
|
|
201
|
+
end
|
|
200
202
|
END
|
|
201
203
|
end
|
|
202
204
|
|
|
@@ -269,146 +271,82 @@ module Rhoconnect
|
|
|
269
271
|
end
|
|
270
272
|
end
|
|
271
273
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
+
# PROXY implementations
|
|
274
275
|
class FieldProxy #:nodoc
|
|
275
|
-
def initialize(
|
|
276
|
-
|
|
276
|
+
def initialize(store_inst, name, marshal)
|
|
277
|
+
# TODO: this low-level access should be removed in 4.0
|
|
278
|
+
@store_db = store_inst.send(:db)
|
|
277
279
|
@name = name
|
|
278
280
|
@marshal = marshal
|
|
279
281
|
end
|
|
280
|
-
|
|
281
|
-
# def method_missing(method, *argv)
|
|
282
|
-
# translated_method = translate_method_name(method)
|
|
283
|
-
# raise NoMethodError.new("Method '#{method}' is not defined") unless translated_method
|
|
284
|
-
# @redis.send translated_method, @name, *argv
|
|
285
|
-
# end
|
|
286
|
-
#
|
|
287
|
-
# protected
|
|
288
|
-
# def translate_method_name(m)
|
|
289
|
-
# m
|
|
290
|
-
# end
|
|
291
282
|
end
|
|
292
283
|
|
|
293
|
-
|
|
294
|
-
|
|
295
284
|
class ListProxy < FieldProxy #:nodoc:
|
|
296
285
|
def <<(v)
|
|
297
|
-
@
|
|
286
|
+
@store_db.rpush @name, @marshal.dump(v)
|
|
298
287
|
end
|
|
299
288
|
alias_method :push_tail, :<<
|
|
300
289
|
|
|
301
290
|
def push_head(v)
|
|
302
|
-
@
|
|
291
|
+
@store_db.lpush @name, @marshal.dump(v)
|
|
303
292
|
end
|
|
304
293
|
|
|
305
294
|
def pop_tail
|
|
306
|
-
@marshal.load(@
|
|
295
|
+
@marshal.load(@store_db.rpop(@name))
|
|
307
296
|
end
|
|
308
297
|
|
|
309
298
|
def pop_head
|
|
310
|
-
@marshal.load(@
|
|
299
|
+
@marshal.load(@store_db.lpop(@name))
|
|
311
300
|
end
|
|
312
301
|
|
|
313
302
|
def [](from, to = nil)
|
|
314
303
|
if to.nil?
|
|
315
|
-
@marshal.load(@
|
|
304
|
+
@marshal.load(@store_db.lindex(@name, from))
|
|
316
305
|
else
|
|
317
|
-
@
|
|
306
|
+
@store_db.lrange(@name, from, to).map! { |v| @marshal.load(v) }
|
|
318
307
|
end
|
|
319
308
|
end
|
|
320
309
|
alias_method :range, :[]
|
|
321
310
|
|
|
322
311
|
def []=(index, v)
|
|
323
|
-
@
|
|
312
|
+
@store_db.lset(@name, index, @marshal.dump(v))
|
|
324
313
|
end
|
|
325
314
|
alias_method :set, :[]=
|
|
326
315
|
|
|
327
316
|
def include?(v)
|
|
328
|
-
@
|
|
317
|
+
@store_db.exists(@name, @marshal.dump(v))
|
|
329
318
|
end
|
|
330
319
|
|
|
331
320
|
def remove(count, v)
|
|
332
|
-
@
|
|
321
|
+
@store_db.lrem(@name, count, @marshal.dump(v))
|
|
333
322
|
end
|
|
334
|
-
|
|
335
|
-
# def length
|
|
336
|
-
# @redis.llen(@name)
|
|
337
|
-
# end
|
|
338
|
-
#
|
|
339
|
-
# def trim(from, to)
|
|
340
|
-
# @redis.ltrim(@name, from, to)
|
|
341
|
-
# end
|
|
342
|
-
#
|
|
343
|
-
# def to_s
|
|
344
|
-
# range(0, 100).join(', ')
|
|
345
|
-
# end
|
|
346
|
-
#
|
|
347
|
-
# protected
|
|
348
|
-
# def translate_method_name(m)
|
|
349
|
-
# COMMANDS[m]
|
|
350
|
-
# end
|
|
351
323
|
end
|
|
352
324
|
|
|
353
|
-
|
|
354
|
-
|
|
355
325
|
class SetProxy < FieldProxy #:nodoc:
|
|
356
|
-
# COMMANDS = {
|
|
357
|
-
# :intersect_store => "sinterstore",
|
|
358
|
-
# :union_store => "sunionstore",
|
|
359
|
-
# :diff_store => "sdiffstore",
|
|
360
|
-
# :move => "smove",
|
|
361
|
-
# }
|
|
362
|
-
|
|
363
326
|
def <<(v)
|
|
364
|
-
@
|
|
327
|
+
@store_db.sadd @name, @marshal.dump(v)
|
|
365
328
|
end
|
|
366
329
|
alias_method :add, :<<
|
|
367
330
|
|
|
368
331
|
def delete(v)
|
|
369
|
-
@
|
|
332
|
+
@store_db.srem @name, @marshal.dump(v)
|
|
370
333
|
end
|
|
371
334
|
alias_method :remove, :delete
|
|
372
335
|
|
|
373
336
|
def include?(v)
|
|
374
|
-
@
|
|
337
|
+
@store_db.sismember @name, @marshal.dump(v)
|
|
375
338
|
end
|
|
376
339
|
alias_method :has_key?, :include?
|
|
377
340
|
alias_method :member?, :include?
|
|
378
341
|
|
|
379
342
|
def members
|
|
380
|
-
members = @
|
|
343
|
+
members = @store_db.smembers(@name)
|
|
381
344
|
if members
|
|
382
345
|
members.map { |v| @marshal.load(v) }
|
|
383
346
|
else
|
|
384
347
|
[]
|
|
385
348
|
end
|
|
386
349
|
end
|
|
387
|
-
|
|
388
|
-
def intersect(*keys)
|
|
389
|
-
@redis.sinter(@name, *keys).map { |v| @marshal.load(v) }
|
|
390
|
-
end
|
|
391
|
-
|
|
392
|
-
def union(*keys)
|
|
393
|
-
@redis.sunion(@name, *keys).map { |v| @marshal.load(v) }
|
|
394
|
-
end
|
|
395
|
-
|
|
396
|
-
def diff(*keys)
|
|
397
|
-
@redis.sdiff(@name, *keys).map { |v| @marshal.load(v) }
|
|
398
|
-
end
|
|
399
|
-
|
|
400
|
-
# def length
|
|
401
|
-
# @redis.llen(@name)
|
|
402
|
-
# end
|
|
403
|
-
#
|
|
404
|
-
# def to_s
|
|
405
|
-
# members.join(', ')
|
|
406
|
-
# end
|
|
407
|
-
#
|
|
408
|
-
# protected
|
|
409
|
-
# def translate_method_name(m)
|
|
410
|
-
# COMMANDS[m]
|
|
411
|
-
# end
|
|
412
350
|
end
|
|
413
351
|
end
|
|
414
352
|
end
|
data/lib/rhoconnect/tasks.rb
CHANGED
|
@@ -141,6 +141,7 @@ namespace :rhoconnect do
|
|
|
141
141
|
desc "Run source adapter specs"
|
|
142
142
|
task :spec do
|
|
143
143
|
files = File.join('spec','**','*_spec.rb')
|
|
144
|
+
puts "files loaded are ****** #{files}"
|
|
144
145
|
RSpec::Core::RakeTask.new('rhoconnect:spec') do |t|
|
|
145
146
|
t.pattern = FileList[files]
|
|
146
147
|
t.rspec_opts = %w(-fn -b --color)
|
|
@@ -158,7 +159,7 @@ namespace :rhoconnect do
|
|
|
158
159
|
system("#{cmd} config.ru -P #{rhoconnect_pid}")
|
|
159
160
|
elsif jruby?
|
|
160
161
|
puts 'Starting rhoconnect in jruby environment...'
|
|
161
|
-
system("#{cmd}")
|
|
162
|
+
system("#{cmd} -r config.ru")
|
|
162
163
|
else
|
|
163
164
|
puts 'Detach with Ctrl+\ Re-attach with rake rhoconnect:attach'
|
|
164
165
|
sleep 2
|
|
@@ -177,7 +178,7 @@ namespace :rhoconnect do
|
|
|
177
178
|
system("#{cmd} config.ru -P #{rhoconnect_pid}")
|
|
178
179
|
elsif jruby?
|
|
179
180
|
puts 'Starting rhoconnect in jruby environment...'
|
|
180
|
-
system("#{cmd}")
|
|
181
|
+
system("#{cmd} -r config.ru")
|
|
181
182
|
else
|
|
182
183
|
system("bundle exec #{cmd} config.ru -P #{rhoconnect_pid}")
|
|
183
184
|
end
|
|
@@ -199,7 +200,7 @@ namespace :rhoconnect do
|
|
|
199
200
|
system("#{cmd} config.ru -P #{rhoconnect_pid}")
|
|
200
201
|
elsif jruby?
|
|
201
202
|
puts 'Starting rhoconnect in jruby environment...'
|
|
202
|
-
system("#{cmd}")
|
|
203
|
+
system("#{cmd} -r config.ru")
|
|
203
204
|
else
|
|
204
205
|
system("bundle exec #{cmd} config.ru -P #{rhoconnect_pid}")
|
|
205
206
|
end
|
|
@@ -228,7 +229,20 @@ namespace :rhoconnect do
|
|
|
228
229
|
if windows?
|
|
229
230
|
File.delete "#{rhoconnect_pid}" if system("FOR /F %A in (#{rhoconnect_pid}) do taskkill /F /PID %A")
|
|
230
231
|
else
|
|
231
|
-
|
|
232
|
+
if File.exist?("#{rhoconnect_pid}")
|
|
233
|
+
pid = `cat #{rhoconnect_pid}`
|
|
234
|
+
puts "Sending a QUIT signal to process #{pid}"
|
|
235
|
+
system "kill -3 #{pid}"
|
|
236
|
+
count = 0
|
|
237
|
+
loop do
|
|
238
|
+
sleep 1
|
|
239
|
+
count += 1
|
|
240
|
+
exit if !File.exist?("#{rhoconnect_pid}")
|
|
241
|
+
break if count >= 5
|
|
242
|
+
end
|
|
243
|
+
puts "Process #{pid} is still running. Sending a KILL signal to it ..."
|
|
244
|
+
system "kill -9 #{pid}"
|
|
245
|
+
end
|
|
232
246
|
end
|
|
233
247
|
end
|
|
234
248
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
module Rhoconnect
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
module Model
|
|
3
|
+
class Base
|
|
4
|
+
attr_accessor :result
|
|
5
|
+
end
|
|
4
6
|
end
|
|
5
7
|
|
|
6
8
|
module TestMethods
|
|
@@ -10,7 +12,7 @@ module Rhoconnect
|
|
|
10
12
|
app_id = 'application'
|
|
11
13
|
s_fields = {
|
|
12
14
|
:user_id => user_id,
|
|
13
|
-
:app_id => app_id
|
|
15
|
+
:app_id => app_id,
|
|
14
16
|
}
|
|
15
17
|
c_fields = {
|
|
16
18
|
:device_type => 'Apple',
|
|
@@ -22,7 +24,14 @@ module Rhoconnect
|
|
|
22
24
|
@u = User.create(:login => user_id)
|
|
23
25
|
@s = Source.load(adapter.to_s,s_fields)
|
|
24
26
|
@c = Client.create(c_fields,{:source_name => adapter.to_s})
|
|
25
|
-
|
|
27
|
+
|
|
28
|
+
@model = Rhoconnect::Model::Base.create(@s)
|
|
29
|
+
handler_sync = lambda { @model.query(params[:query])}
|
|
30
|
+
@query_engine = Rhoconnect::Handler::Query::Engine.new(@model, handler_sync, {})
|
|
31
|
+
handler_cud = lambda { @model.send params[:operation].to_sym, params["#{params[:operation]}_object".to_sym] }
|
|
32
|
+
@cud_engine = Rhoconnect::Handler::Changes::Engine.new(['create', 'update', 'delete'], @model, handler_cud, {})
|
|
33
|
+
handler_search = lambda { @model.search(params[:search]) }
|
|
34
|
+
@search_engine = Rhoconnect::Handler::Search::Engine.new(@model, @c, handler_search, {})
|
|
26
35
|
end
|
|
27
36
|
|
|
28
37
|
# Executes the adapter's query method and returns
|
|
@@ -41,7 +50,7 @@ module Rhoconnect
|
|
|
41
50
|
# "2"=>{"name"=>"Best", "industry"=>"Software"}
|
|
42
51
|
# }
|
|
43
52
|
def test_query
|
|
44
|
-
res = @
|
|
53
|
+
res = @query_engine.do_sync
|
|
45
54
|
return @s.is_pass_through? ? res : md
|
|
46
55
|
end
|
|
47
56
|
|
|
@@ -60,7 +69,8 @@ module Rhoconnect
|
|
|
60
69
|
def test_search(search_params)
|
|
61
70
|
pass_through = @s.pass_through
|
|
62
71
|
@s.pass_through = 'true'
|
|
63
|
-
|
|
72
|
+
@search_engine.params[:search] = search_params
|
|
73
|
+
res = @search_engine.do_search
|
|
64
74
|
@s.pass_through = pass_through
|
|
65
75
|
res
|
|
66
76
|
end
|
|
@@ -93,7 +103,7 @@ module Rhoconnect
|
|
|
93
103
|
# {'index' => view}.to_json
|
|
94
104
|
# }
|
|
95
105
|
def test_metadata
|
|
96
|
-
@
|
|
106
|
+
@query_engine.do_sync
|
|
97
107
|
return @s.get_value(:metadata)
|
|
98
108
|
end
|
|
99
109
|
|
|
@@ -119,7 +129,7 @@ module Rhoconnect
|
|
|
119
129
|
# }.to_json
|
|
120
130
|
# test_schema would return the above
|
|
121
131
|
def test_schema
|
|
122
|
-
@
|
|
132
|
+
@query_engine.do_sync
|
|
123
133
|
return @s.get_value(:schema)
|
|
124
134
|
end
|
|
125
135
|
|
|
@@ -150,10 +160,11 @@ module Rhoconnect
|
|
|
150
160
|
# document (:md) should also contain the new record.
|
|
151
161
|
def test_create(record)
|
|
152
162
|
if @s.is_pass_through?
|
|
153
|
-
@
|
|
163
|
+
@cud_engine.params = {'create'=> {'temp-id' => record}}
|
|
164
|
+
@cud_engine.do_pass_through_cud
|
|
154
165
|
else
|
|
155
|
-
@s.
|
|
156
|
-
@
|
|
166
|
+
@s.push_queue(:create,@c.id,{'temp-id' => record},true)
|
|
167
|
+
@cud_engine.do_cud
|
|
157
168
|
links = @c.get_data(:create_links)['temp-id']
|
|
158
169
|
links ? links['l'] : nil
|
|
159
170
|
end
|
|
@@ -179,10 +190,11 @@ module Rhoconnect
|
|
|
179
190
|
# as shown above
|
|
180
191
|
def test_update(record)
|
|
181
192
|
if @s.is_pass_through?
|
|
182
|
-
@
|
|
193
|
+
@cud_engine.params = {'update'=> record }
|
|
194
|
+
@cud_engine.do_pass_through_cud
|
|
183
195
|
else
|
|
184
|
-
@s.
|
|
185
|
-
@
|
|
196
|
+
@s.push_queue(:update,@c.id,record,true)
|
|
197
|
+
@cud_engine.do_cud
|
|
186
198
|
end
|
|
187
199
|
end
|
|
188
200
|
|
|
@@ -212,10 +224,11 @@ module Rhoconnect
|
|
|
212
224
|
# verified as shown above.
|
|
213
225
|
def test_delete(record)
|
|
214
226
|
if @s.is_pass_through?
|
|
215
|
-
@
|
|
227
|
+
@cud_engine.params = {'delete'=> record }
|
|
228
|
+
@cud_engine.do_pass_through_cud
|
|
216
229
|
else
|
|
217
|
-
@s.
|
|
218
|
-
@
|
|
230
|
+
@s.push_queue(:delete,@c.id,record,true)
|
|
231
|
+
@cud_engine.do_cud
|
|
219
232
|
end
|
|
220
233
|
end
|
|
221
234
|
|
data/lib/rhoconnect/user.rb
CHANGED
|
@@ -3,7 +3,7 @@ require 'digest/sha1'
|
|
|
3
3
|
module Rhoconnect
|
|
4
4
|
# Inspired by sinatra-authentication
|
|
5
5
|
# Password uses simple sha1 digest for hashing
|
|
6
|
-
class User <
|
|
6
|
+
class User < StoreOrm
|
|
7
7
|
field :login,:string
|
|
8
8
|
field :email,:string
|
|
9
9
|
field :salt,:string
|
|
@@ -11,13 +11,14 @@ module Rhoconnect
|
|
|
11
11
|
set :clients, :string
|
|
12
12
|
field :admin, :int
|
|
13
13
|
field :token_id, :string
|
|
14
|
-
|
|
14
|
+
#set_all :users, :string
|
|
15
|
+
|
|
15
16
|
class << self
|
|
16
17
|
def create(fields={})
|
|
17
18
|
raise ArgumentError.new("Empty login") if (fields[:login].nil? or fields[:login].empty?)
|
|
18
19
|
raise ArgumentError.new("Reserved user id #{fields[:login]}") if fields[:login] && fields[:login] == '__shared__'
|
|
19
20
|
fields[:id] = fields[:login]
|
|
20
|
-
user = super(fields)
|
|
21
|
+
user = super(fields)
|
|
21
22
|
if Rhoconnect.stats
|
|
22
23
|
Rhoconnect::Stats::Record.set('users') { Store.incr('user:count') }
|
|
23
24
|
else
|
|
@@ -25,14 +26,19 @@ module Rhoconnect
|
|
|
25
26
|
end
|
|
26
27
|
user
|
|
27
28
|
end
|
|
28
|
-
|
|
29
|
+
|
|
29
30
|
def authenticate(login,password)
|
|
30
31
|
return unless is_exist?(login)
|
|
31
32
|
current_user = load(login)
|
|
32
33
|
return if current_user.nil?
|
|
33
34
|
return current_user if User.encrypt(password, current_user.salt) == current_user.hashed_password
|
|
34
35
|
end
|
|
35
|
-
|
|
36
|
+
|
|
37
|
+
# Rails like methods
|
|
38
|
+
def all
|
|
39
|
+
App.load(APP_NAME).users.members
|
|
40
|
+
end
|
|
41
|
+
|
|
36
42
|
def ping(params)
|
|
37
43
|
if params['async']
|
|
38
44
|
PingJob.enqueue(params)
|
|
@@ -41,17 +47,17 @@ module Rhoconnect
|
|
|
41
47
|
end
|
|
42
48
|
end
|
|
43
49
|
end
|
|
44
|
-
|
|
50
|
+
|
|
45
51
|
def new_password=(pass)
|
|
46
52
|
self.password=(pass)
|
|
47
53
|
end
|
|
48
|
-
|
|
54
|
+
|
|
49
55
|
def password=(pass)
|
|
50
56
|
@password = pass
|
|
51
57
|
self.salt = User.random_string(10) if !self.salt
|
|
52
58
|
self.hashed_password = User.encrypt(@password, self.salt)
|
|
53
59
|
end
|
|
54
|
-
|
|
60
|
+
|
|
55
61
|
def delete
|
|
56
62
|
clients.members.each do |client_id|
|
|
57
63
|
Client.load(client_id,{:source_name => '*'}).delete
|
|
@@ -64,31 +70,43 @@ module Rhoconnect
|
|
|
64
70
|
end
|
|
65
71
|
super
|
|
66
72
|
end
|
|
67
|
-
|
|
73
|
+
|
|
68
74
|
def create_token
|
|
69
75
|
if self.token_id && ApiToken.is_exist?(self.token_id)
|
|
70
|
-
self.token.delete
|
|
76
|
+
self.token.delete
|
|
71
77
|
end
|
|
72
|
-
|
|
78
|
+
fields = {:user_id => self.login}
|
|
79
|
+
if self.login == 'rhoadmin'
|
|
80
|
+
fields[:value] = Rhoconnect.api_token
|
|
81
|
+
end
|
|
82
|
+
self.token_id = ApiToken.create(fields).id
|
|
73
83
|
end
|
|
74
|
-
|
|
84
|
+
|
|
75
85
|
def token
|
|
76
86
|
ApiToken.load(self.token_id)
|
|
77
87
|
end
|
|
78
|
-
|
|
88
|
+
|
|
79
89
|
def token=(value)
|
|
80
90
|
if self.token_id && ApiToken.is_exist?(self.token_id)
|
|
81
|
-
self.token.delete
|
|
91
|
+
self.token.delete
|
|
82
92
|
end
|
|
83
93
|
self.token_id = ApiToken.create(:user_id => self.login, :value => value).id
|
|
84
94
|
end
|
|
85
|
-
|
|
95
|
+
|
|
86
96
|
def update(fields)
|
|
87
97
|
fields.each do |key,value|
|
|
88
98
|
self.send("#{key.to_sym}=", value) unless key == 'login'
|
|
89
|
-
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def to_hash
|
|
103
|
+
res = {}
|
|
104
|
+
self.class.fields.each do |field|
|
|
105
|
+
res[field[:name].to_sym] = send(field[:name].to_sym) if field[:name] == 'login'
|
|
106
|
+
end
|
|
107
|
+
res
|
|
90
108
|
end
|
|
91
|
-
|
|
109
|
+
|
|
92
110
|
protected
|
|
93
111
|
def self.encrypt(pass, salt)
|
|
94
112
|
Digest::SHA1.hexdigest(pass+salt)
|
data/lib/rhoconnect/utilities.rb
CHANGED
data/lib/rhoconnect/version.rb
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
module Rhoconnect
|
|
2
|
-
VERSION = '
|
|
3
|
-
end
|
|
2
|
+
VERSION = '4.0.0.beta.10'
|
|
3
|
+
end
|