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.
Files changed (337) hide show
  1. data/CHANGELOG.md +57 -3
  2. data/Gemfile +9 -7
  3. data/Gemfile.lock +37 -37
  4. data/Rakefile +18 -7
  5. data/bench/benchapp/Gemfile +1 -1
  6. data/bench/benchapp/config.ru +0 -3
  7. data/bench/benchapp/controllers/ruby/application.rb +17 -0
  8. data/bench/benchapp/controllers/ruby/application_controller.rb +17 -0
  9. data/bench/benchapp/controllers/ruby/mock_adapter_controller.rb +8 -0
  10. data/bench/benchapp/controllers/ruby/queue_mock_adapter_controller.rb +8 -0
  11. data/bench/benchapp/{sources → models/ruby}/mock_adapter.rb +1 -1
  12. data/bench/benchapp/{sources → models/ruby}/queue_mock_adapter.rb +0 -0
  13. data/bench/benchapp/spec/{sources → models/ruby}/mock_adapter_spec.rb +1 -1
  14. data/bench/benchapp/spec/{sources → models/ruby}/queue_mock_adapter_spec.rb +1 -1
  15. data/bench/benchapp/spec/spec_helper.rb +2 -2
  16. data/bench/blobapp/Gemfile +1 -1
  17. data/bench/blobapp/config.ru +0 -3
  18. data/bench/blobapp/controllers/ruby/application_controller.rb +17 -0
  19. data/bench/blobapp/controllers/ruby/blob_adapter_controller.rb +8 -0
  20. data/bench/blobapp/{sources → models/ruby}/blob_adapter.rb +9 -2
  21. data/bench/blobapp/spec/{sources → models/ruby}/blob_adapter_spec.rb +1 -1
  22. data/bench/blobapp/spec/spec_helper.rb +1 -1
  23. data/bench/lib/bench/cli.rb +1 -1
  24. data/bench/scripts/blob_cud_script.rb +1 -1
  25. data/bench/scripts/query_md_script.rb +1 -1
  26. data/bench/scripts/query_only_script.rb +1 -1
  27. data/bench/scripts/query_script.rb +1 -1
  28. data/bench/scripts/test_query_script.rb +7 -1
  29. data/bench/spec/mock_adapter_spec.rb +1 -1
  30. data/bench/spec/result_spec.rb +3 -3
  31. data/bin/rhoconnect +5 -3
  32. data/commands/dtach/dtach_install.rb +2 -2
  33. data/commands/execute.rb +8 -3
  34. data/commands/generators/app.rb +3 -3
  35. data/commands/generators/controller.rb +6 -0
  36. data/commands/generators/model.rb +6 -0
  37. data/commands/generators/source.rb +3 -3
  38. data/commands/generators/update.rb +1 -1
  39. data/commands/redis/redis_about.rb +2 -2
  40. data/commands/redis/redis_download.rb +1 -1
  41. data/commands/redis/redis_install.rb +4 -3
  42. data/commands/redis/redis_restart.rb +4 -4
  43. data/commands/redis/redis_start.rb +5 -4
  44. data/commands/redis/redis_startbg.rb +5 -4
  45. data/commands/redis/redis_status.rb +13 -0
  46. data/commands/redis/redis_stop.rb +3 -3
  47. data/commands/rhoconnect/config.rb +28 -16
  48. data/commands/rhoconnect/flushdb.rb +1 -2
  49. data/commands/rhoconnect/get_token.rb +15 -11
  50. data/commands/rhoconnect/restart.rb +13 -5
  51. data/commands/rhoconnect/set_admin_password.rb +8 -8
  52. data/commands/rhoconnect/start.rb +74 -16
  53. data/commands/rhoconnect/startbg.rb +1 -1
  54. data/commands/rhoconnect/startdebug.rb +1 -1
  55. data/commands/rhoconnect/stop.rb +13 -1
  56. data/commands/rhoconnect/web.rb +5 -5
  57. data/commands/rhoconnect_console/console.rb +7 -5
  58. data/commands/{rhoconnect → rhoconnect_spec}/spec.rb +0 -0
  59. data/commands/rhoconnect_war/war.rb +9 -9
  60. data/commands/utilities/blank_app.ru +56 -0
  61. data/commands/utilities/redis_runner.rb +54 -19
  62. data/doc/authentication.txt +80 -6
  63. data/doc/blob-sync.txt +104 -97
  64. data/doc/bulk-sync.txt +1 -1
  65. data/doc/client-java.txt +3 -3
  66. data/doc/client-objc.txt +2 -2
  67. data/doc/client.txt +4 -4
  68. data/doc/command-line.txt +105 -200
  69. data/doc/data-partitioning.txt +40 -0
  70. data/doc/deploying.txt +249 -77
  71. data/doc/extending-rhoconnect-server.txt +40 -57
  72. data/doc/heroku-addon.txt +2 -0
  73. data/doc/install.txt +45 -95
  74. data/doc/introduction.txt +1 -1
  75. data/doc/java-plugin.txt +365 -190
  76. data/doc/metadata.txt +1 -1
  77. data/doc/migration.txt +108 -142
  78. data/doc/preparing-production.txt +1 -1
  79. data/doc/push-backend-setup.txt +2 -0
  80. data/doc/push-client-setup-android.txt +78 -0
  81. data/doc/push-client-setup-bb.txt +81 -0
  82. data/doc/push-client-setup-ios.txt +70 -0
  83. data/doc/push-client-setup-rps.txt +200 -0
  84. data/doc/push-client-setup.txt +63 -66
  85. data/doc/push-server-setup.txt +67 -40
  86. data/doc/push-testing.txt +29 -0
  87. data/doc/push.txt +21 -6
  88. data/doc/rest-api.txt +128 -55
  89. data/doc/rhoconnect-redis-stack.txt +120 -0
  90. data/doc/settings.txt +4 -12
  91. data/doc/source-adapters-intro.txt +28 -0
  92. data/doc/source-adapters.txt +235 -272
  93. data/doc/stats-middleware.txt +9 -29
  94. data/doc/supported-platforms.txt +21 -30
  95. data/doc/testing.txt +40 -42
  96. data/doc/tutorial.txt +72 -57
  97. data/examples/simple/Gemfile +1 -1
  98. data/examples/simple/application.rb +4 -5
  99. data/examples/simple/my_server.rb +2 -2
  100. data/examples/simple/settings/settings.yml +1 -1
  101. data/generators/rhoconnect.rb +151 -50
  102. data/generators/templates/application/Gemfile +1 -1
  103. data/generators/templates/application/Rakefile +3 -3
  104. data/generators/templates/application/config.ru +1 -4
  105. data/generators/templates/application/controllers/application_controller.rb +17 -0
  106. data/generators/templates/application/controllers/js/application_controller.js +14 -0
  107. data/generators/templates/application/controllers/ruby/application_controller.rb +17 -0
  108. data/generators/templates/application/package.json +8 -0
  109. data/generators/templates/application/rcgemfile +2 -5
  110. data/generators/templates/application/settings/settings.yml +3 -3
  111. data/generators/templates/application/spec/application_controller_spec.rb +23 -0
  112. data/generators/templates/application/spec/js_spec.rb +25 -0
  113. data/generators/templates/application/spec/spec_helper.rb +21 -7
  114. data/generators/templates/source/controllers/js/controller.js +7 -0
  115. data/generators/templates/source/controllers/ruby/controller.rb +8 -0
  116. data/generators/templates/source/controllers/ruby/controller_spec.rb +27 -0
  117. data/generators/templates/source/models/js/model.js +46 -0
  118. data/generators/templates/source/{source_adapter.rb → models/ruby/model.rb} +15 -10
  119. data/generators/templates/source/{source_spec.rb → models/ruby/model_spec.rb} +1 -1
  120. data/install.sh +5 -5
  121. data/installer/unix-like/create_texts.rb +2 -2
  122. data/installer/unix-like/rho_connect_install_constants.rb +2 -2
  123. data/installer/unix-like/rho_connect_install_utilities.rb +1 -1
  124. data/installer/utils/constants.rb +4 -4
  125. data/js-adapters/ballroom.js +216 -0
  126. data/js-adapters/node.rb +52 -0
  127. data/js-adapters/node_channel.rb +181 -0
  128. data/js-adapters/request.js +27 -0
  129. data/js-adapters/response.js +57 -0
  130. data/js-adapters/rhoconnect_helpers.js +60 -0
  131. data/js-adapters/router.js +60 -0
  132. data/js-adapters/server.js +5 -0
  133. data/lib/rhoconnect/api/app/ans_login.rb +3 -3
  134. data/lib/rhoconnect/api/app/bulk_data.rb +10 -10
  135. data/lib/rhoconnect/api/app/fast_delete.rb +11 -10
  136. data/lib/rhoconnect/api/app/fast_insert.rb +11 -10
  137. data/lib/rhoconnect/api/app/fast_update.rb +11 -10
  138. data/lib/rhoconnect/api/app/login.rb +5 -5
  139. data/lib/rhoconnect/api/app/push_deletes.rb +12 -11
  140. data/lib/rhoconnect/api/app/push_objects.rb +12 -11
  141. data/lib/rhoconnect/api/app/query.rb +8 -7
  142. data/lib/rhoconnect/api/app/queue_updates.rb +98 -94
  143. data/lib/rhoconnect/api/app/search.rb +8 -7
  144. data/lib/rhoconnect/api/client/client_get_db_doc.rb +5 -5
  145. data/lib/rhoconnect/api/client/client_set_db_doc.rb +8 -8
  146. data/lib/rhoconnect/api/client/create.rb +7 -7
  147. data/lib/rhoconnect/api/client/get_client_params.rb +4 -4
  148. data/lib/rhoconnect/api/client/list_client_docs.rb +17 -17
  149. data/lib/rhoconnect/api/client/register.rb +12 -12
  150. data/lib/rhoconnect/api/client/reset.rb +5 -5
  151. data/lib/rhoconnect/api/readstate/set_refresh_time.rb +9 -9
  152. data/lib/rhoconnect/api/source/get_source_params.rb +4 -4
  153. data/lib/rhoconnect/api/source/list_sources.rb +16 -16
  154. data/lib/rhoconnect/api/source/update_source_params.rb +6 -6
  155. data/lib/rhoconnect/api/store/get_db_doc.rb +4 -4
  156. data/lib/rhoconnect/api/store/set_db_doc.rb +7 -7
  157. data/lib/rhoconnect/api/system/get_adapter.rb +4 -4
  158. data/lib/rhoconnect/api/system/get_license_info.rb +8 -8
  159. data/lib/rhoconnect/api/system/login.rb +15 -15
  160. data/lib/rhoconnect/api/system/reset.rb +11 -11
  161. data/lib/rhoconnect/api/system/save_adapter.rb +4 -4
  162. data/lib/rhoconnect/api/system/stats.rb +22 -22
  163. data/lib/rhoconnect/api/user/create_user.rb +7 -7
  164. data/lib/rhoconnect/api/user/delete_client.rb +6 -6
  165. data/lib/rhoconnect/api/user/delete_user.rb +11 -10
  166. data/lib/rhoconnect/api/user/list_clients.rb +4 -4
  167. data/lib/rhoconnect/api/user/list_source_docs.rb +10 -10
  168. data/lib/rhoconnect/api/user/list_users.rb +3 -3
  169. data/lib/rhoconnect/api/user/ping.rb +3 -3
  170. data/lib/rhoconnect/api/user/show_user.rb +3 -3
  171. data/lib/rhoconnect/api/user/update_user.rb +5 -5
  172. data/lib/rhoconnect/api/user/user_get_db_doc.rb +5 -5
  173. data/lib/rhoconnect/api/user/user_set_db_doc.rb +10 -10
  174. data/lib/rhoconnect/api_token.rb +5 -6
  175. data/lib/rhoconnect/app.rb +6 -46
  176. data/lib/rhoconnect/application/init.rb +5 -2
  177. data/lib/rhoconnect/async.rb +76 -39
  178. data/lib/rhoconnect/bulk_data/bulk_data.rb +6 -4
  179. data/lib/rhoconnect/client.rb +59 -9
  180. data/lib/rhoconnect/condition/admin_required.rb +27 -0
  181. data/lib/rhoconnect/condition/client_required.rb +50 -0
  182. data/lib/rhoconnect/condition/login_required.rb +22 -0
  183. data/lib/rhoconnect/condition/source_required.rb +49 -0
  184. data/lib/rhoconnect/condition/verbs.rb +17 -0
  185. data/lib/rhoconnect/condition/verify_success.rb +19 -0
  186. data/lib/rhoconnect/controller/app_base.rb +74 -0
  187. data/lib/rhoconnect/controller/base.rb +68 -0
  188. data/lib/rhoconnect/controller/clients_controller.rb +79 -0
  189. data/lib/rhoconnect/controller/dynamic_adapter_controller.rb +93 -0
  190. data/lib/rhoconnect/controller/js_base.rb +124 -0
  191. data/lib/rhoconnect/controller/read_state_controller.rb +22 -0
  192. data/lib/rhoconnect/controller/source_adapter_base.rb +14 -0
  193. data/lib/rhoconnect/controller/sources_controller.rb +44 -0
  194. data/lib/rhoconnect/controller/store_controller.rb +25 -0
  195. data/lib/rhoconnect/controller/system_controller.rb +67 -0
  196. data/lib/rhoconnect/controller/users_controller.rb +99 -0
  197. data/lib/rhoconnect/db_adapter.rb +1 -3
  198. data/lib/rhoconnect/document.rb +159 -50
  199. data/lib/rhoconnect/handler/authenticate/execute_methods.rb +77 -0
  200. data/lib/rhoconnect/handler/authenticate/runner.rb +49 -0
  201. data/lib/rhoconnect/handler/authenticate.rb +3 -0
  202. data/lib/rhoconnect/handler/bulk_data.rb +28 -0
  203. data/lib/rhoconnect/handler/changes/engine.rb +271 -0
  204. data/lib/rhoconnect/handler/changes/execute_methods.rb +88 -0
  205. data/lib/rhoconnect/handler/changes/pass_through_runner.rb +11 -0
  206. data/lib/rhoconnect/handler/changes/runner.rb +53 -0
  207. data/lib/rhoconnect/handler/changes.rb +31 -0
  208. data/lib/rhoconnect/handler/helpers/auth_method.rb +29 -0
  209. data/lib/rhoconnect/handler/helpers/binding.rb +18 -0
  210. data/lib/rhoconnect/handler/helpers/bulk_data.rb +53 -0
  211. data/lib/rhoconnect/handler/helpers/source_job.rb +14 -0
  212. data/lib/rhoconnect/handler/helpers.rb +4 -0
  213. data/lib/rhoconnect/handler/plugin_callbacks/execute_methods.rb +99 -0
  214. data/lib/rhoconnect/handler/plugin_callbacks/runner.rb +28 -0
  215. data/lib/rhoconnect/handler/plugin_callbacks.rb +67 -0
  216. data/lib/rhoconnect/handler/query/engine.rb +93 -0
  217. data/lib/rhoconnect/handler/query/execute_methods.rb +21 -0
  218. data/lib/rhoconnect/handler/query/pass_through_runner.rb +35 -0
  219. data/lib/rhoconnect/handler/query/runner.rb +270 -0
  220. data/lib/rhoconnect/handler/query.rb +19 -0
  221. data/lib/rhoconnect/handler/search/engine.rb +60 -0
  222. data/lib/rhoconnect/handler/search/execute_methods.rb +32 -0
  223. data/lib/rhoconnect/handler/search/pass_through_runner.rb +18 -0
  224. data/lib/rhoconnect/handler/search/runner.rb +104 -0
  225. data/lib/rhoconnect/handler/search.rb +26 -0
  226. data/lib/rhoconnect/handler/sync.rb +29 -0
  227. data/lib/rhoconnect/jobs/source_job.rb +13 -4
  228. data/lib/rhoconnect/js_adapter.rb +79 -0
  229. data/lib/rhoconnect/license.rb +10 -2
  230. data/lib/rhoconnect/middleware/current_user.rb +14 -1
  231. data/lib/rhoconnect/middleware/helpers.rb +10 -93
  232. data/lib/rhoconnect/middleware/x_domain_session_wrapper.rb +1 -1
  233. data/lib/rhoconnect/model/base.rb +229 -0
  234. data/lib/rhoconnect/model/dynamic_adapter_model.rb +90 -0
  235. data/lib/rhoconnect/model/js_base.rb +121 -0
  236. data/lib/rhoconnect/ping/android.rb +1 -1
  237. data/lib/rhoconnect/predefined_adapters/bench_adapter.rb +7 -4
  238. data/lib/rhoconnect/read_state.rb +3 -3
  239. data/lib/rhoconnect/server.rb +159 -190
  240. data/lib/rhoconnect/source.rb +100 -11
  241. data/lib/rhoconnect/stats/record.rb +10 -10
  242. data/lib/rhoconnect/store.rb +905 -591
  243. data/lib/rhoconnect/{model.rb → store_orm.rb} +53 -115
  244. data/lib/rhoconnect/tasks.rb +18 -4
  245. data/lib/rhoconnect/test_methods.rb +30 -17
  246. data/lib/rhoconnect/user.rb +35 -17
  247. data/lib/rhoconnect/utilities.rb +1 -1
  248. data/lib/rhoconnect/version.rb +2 -2
  249. data/lib/rhoconnect/web-console/server.rb +29 -14
  250. data/lib/rhoconnect/web-console/views/home.js +10 -10
  251. data/lib/rhoconnect/web-console/views/new_ping.js +1 -1
  252. data/lib/rhoconnect.rb +120 -51
  253. data/rhoconnect.gemspec +4 -3
  254. data/spec/api/api_helper.rb +1 -6
  255. data/spec/api/app/fast_delete_spec.rb +4 -4
  256. data/spec/api/app/fast_insert_spec.rb +4 -4
  257. data/spec/api/app/fast_update_spec.rb +8 -8
  258. data/spec/api/app/push_deletes_spec.rb +2 -2
  259. data/spec/api/app/push_objects_spec.rb +5 -5
  260. data/spec/api/client/client_get_db_doc_spec.rb +6 -4
  261. data/spec/api/client/client_set_db_doc_spec.rb +3 -2
  262. data/spec/api/client/get_client_params_spec.rb +14 -0
  263. data/spec/api/client/list_client_docs_spec.rb +30 -20
  264. data/spec/api/client/reset_spec.rb +36 -0
  265. data/spec/api/source/get_source_params_spec.rb +23 -17
  266. data/spec/api/system/get_license_info_spec.rb +0 -20
  267. data/spec/api/system/login_spec.rb +8 -0
  268. data/spec/api/system/reset_spec.rb +0 -1
  269. data/spec/api/system/stats_spec.rb +5 -5
  270. data/spec/api/user/create_user_spec.rb +14 -6
  271. data/spec/api/user/delete_user_spec.rb +20 -18
  272. data/spec/api/user/list_users_spec.rb +5 -6
  273. data/spec/api/user/update_user_spec.rb +5 -4
  274. data/spec/apps/rhotestapp/config.ru +16 -1
  275. data/spec/apps/rhotestapp/controllers/js/js_sample_controller.js +23 -0
  276. data/spec/apps/rhotestapp/controllers/js/sample2_controller.js +32 -0
  277. data/spec/apps/rhotestapp/controllers/ruby/application_controller.rb +21 -0
  278. data/spec/apps/rhotestapp/controllers/ruby/sample_adapter_controller.rb +8 -0
  279. data/spec/apps/rhotestapp/models/js/js_sample.js +55 -0
  280. data/spec/apps/rhotestapp/models/js/sample2.js +25 -0
  281. data/spec/apps/rhotestapp/{sources → models/ruby}/base_adapter.rb +0 -0
  282. data/spec/apps/rhotestapp/{sources → models/ruby}/fixed_schema_adapter.rb +0 -0
  283. data/spec/apps/rhotestapp/{sources → models/ruby}/other_adapter.rb +0 -0
  284. data/spec/apps/rhotestapp/{sources → models/ruby}/sample_adapter.rb +0 -0
  285. data/spec/apps/rhotestapp/{sources → models/ruby}/simple_adapter.rb +2 -2
  286. data/spec/apps/rhotestapp/{sources → models/ruby}/sub_adapter.rb +0 -0
  287. data/spec/apps/rhotestapp/settings/settings.yml +0 -1
  288. data/spec/bulk_data/bulk_data_spec.rb +20 -5
  289. data/spec/cli/cli_spec.rb +83 -0
  290. data/spec/client_spec.rb +20 -17
  291. data/spec/client_sync_spec.rb +244 -406
  292. data/spec/controllers/js_base_spec.rb +89 -0
  293. data/spec/doc/doc_spec.rb +18 -18
  294. data/spec/document_spec.rb +29 -13
  295. data/spec/dynamic_adapter_spec.rb +6 -6
  296. data/spec/generator/generator_spec.rb +7 -4
  297. data/spec/jobs/bulk_data_job_spec.rb +14 -10
  298. data/spec/jobs/source_job_spec.rb +8 -8
  299. data/spec/license_spec.rb +5 -2
  300. data/spec/models/js_model_spec.rb +39 -0
  301. data/spec/node_spec.rb +42 -0
  302. data/spec/perf/store_perf_spec.rb +67 -12
  303. data/spec/ping/android_spec.rb +1 -1
  304. data/spec/read_state_spec.rb +1 -1
  305. data/spec/rhoconnect_spec.rb +1 -1
  306. data/spec/server/cors_spec.rb +14 -18
  307. data/spec/server/server_spec.rb +265 -88
  308. data/spec/server/stats_spec.rb +1 -1
  309. data/spec/source_adapter_spec.rb +54 -27
  310. data/spec/source_spec.rb +8 -3
  311. data/spec/source_sync_spec.rb +538 -468
  312. data/spec/spec_helper.rb +35 -4
  313. data/spec/stats/record_spec.rb +10 -10
  314. data/spec/{model_spec.rb → store_orm_spec.rb} +56 -54
  315. data/spec/store_spec.rb +159 -179
  316. data/spec/support/shared_examples.rb +36 -27
  317. data/spec/sync_states_spec.rb +40 -33
  318. data/spec/test_methods_spec.rb +18 -14
  319. data/spec/user_spec.rb +17 -30
  320. metadata +156 -52
  321. data/bench/benchapp/application.rb +0 -39
  322. data/bench/blobapp/application.rb +0 -44
  323. data/commands/rhoconnect/clean_start.rb +0 -9
  324. data/commands/rhoconnect/create_user.rb +0 -18
  325. data/commands/rhoconnect/delete_device.rb +0 -9
  326. data/commands/rhoconnect/delete_user.rb +0 -8
  327. data/commands/rhoconnect/reset.rb +0 -16
  328. data/commands/rhoconnect/reset_refresh.rb +0 -11
  329. data/generators/templates/application/application.rb +0 -43
  330. data/lib/rhoconnect/client_sync.rb +0 -434
  331. data/lib/rhoconnect/dynamic_adapter.rb +0 -91
  332. data/lib/rhoconnect/middleware/admin_user.rb +0 -23
  333. data/lib/rhoconnect/middleware/current_request.rb +0 -16
  334. data/lib/rhoconnect/middleware/login_required.rb +0 -22
  335. data/lib/rhoconnect/source_adapter.rb +0 -132
  336. data/lib/rhoconnect/source_sync.rb +0 -464
  337. data/spec/apps/rhotestapp/application.rb +0 -23
data/spec/spec_helper.rb CHANGED
@@ -4,6 +4,8 @@ require 'webmock/rspec'
4
4
  require 'rspec/autorun' # Required for Rcov to run with rspec '~> 2.8.0'
5
5
  if RUBY_VERSION =~ /1.9/ || defined?(JRUBY_VERSION)
6
6
  require 'simplecov'
7
+ require 'simplecov-rcov'
8
+ SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
7
9
  SimpleCov.start do
8
10
  add_filter '/spec/'
9
11
  end
@@ -45,6 +47,7 @@ end
45
47
 
46
48
  require 'rhoconnect'
47
49
  include Rhoconnect
50
+ require 'rhoconnect/server'
48
51
 
49
52
  # require RSpec shared examples
50
53
  SPEC_PATH = File.expand_path(File.dirname(__FILE__))
@@ -140,9 +143,19 @@ module TestHelpers
140
143
  end
141
144
  end
142
145
 
143
- def set_zstate(state,assoc_key,append=false)
146
+ def set_source_queue_state(source, state,assoc_key,append=false)
144
147
  state.each do |dockey,data|
145
- Store.put_zdata(dockey,assoc_key,data,append)
148
+ source.push_queue(dockey,assoc_key,data,append)
149
+ end
150
+ end
151
+
152
+ def set_doc_state(docobj, state,append=false)
153
+ state.each do |dockey,data|
154
+ if data.is_a?(Hash) or data.is_a?(Array)
155
+ docobj.put_data(dockey,data,append)
156
+ else
157
+ docobj.put_value(dockey,data)
158
+ end
146
159
  end
147
160
  end
148
161
 
@@ -173,11 +186,29 @@ module TestHelpers
173
186
  end
174
187
  end
175
188
 
176
- def verify_zresult(result)
189
+ def verify_doc_result(docobj, result)
190
+ result.keys.sort.each do |dockey|
191
+ expected = result[dockey]
192
+ begin
193
+ if expected.is_a?(Hash)
194
+ docobj.get_data(dockey).should == expected
195
+ elsif expected.is_a?(Array)
196
+ docobj.get_data(dockey,Array).should == expected
197
+ else
198
+ docobj.get_value(dockey).should == expected
199
+ end
200
+ rescue RSpec::Expectations::ExpectationNotMetError => e
201
+ message = "\nVerifying `#{dockey}`\n\n" + e.to_s
202
+ Kernel::raise(RSpec::Expectations::ExpectationNotMetError.new(message))
203
+ end
204
+ end
205
+ end
206
+
207
+ def verify_source_queue_data(source, result)
177
208
  result.keys.sort.each do |dockey|
178
209
  expected = result[dockey]
179
210
  begin
180
- data,assoc_keys = Store.get_zdata(dockey)
211
+ data,assoc_keys = source.get_queue(dockey)
181
212
  data.should == expected
182
213
  rescue RSpec::Expectations::ExpectationNotMetError => e
183
214
  message = "\nVerifying `#{dockey}`\n\n" + e.to_s
@@ -10,20 +10,20 @@ describe "Record" do
10
10
 
11
11
  before(:each) do
12
12
  @now = 9
13
- Store.db.flushdb
13
+ Store.flush_all
14
14
  Store.stub!(:lock).and_yield
15
15
  end
16
16
 
17
17
  it "should add metric to the record and trim record size" do
18
18
  Time.stub!(:now).and_return { @now }
19
19
  10.times { @now += 1; Rhoconnect::Stats::Record.add('foo') }
20
- Store.db.zrange('stat:foo', 0, -1).should == ["2:12", "2:14", "2:16", "2:18"]
20
+ Store.zrange('stat:foo', 0, -1).should == ["2:12", "2:14", "2:16", "2:18"]
21
21
  end
22
22
 
23
23
  it "should add single record" do
24
24
  Time.stub!(:now).and_return { @now += 1; @now }
25
25
  Rhoconnect::Stats::Record.add('foo')
26
- Store.db.zrange('stat:foo', 0, -1).should == ["1:10"]
26
+ Store.zrange('stat:foo', 0, -1).should == ["1:10"]
27
27
  end
28
28
 
29
29
  it "should return type of metric" do
@@ -33,11 +33,11 @@ describe "Record" do
33
33
 
34
34
  it "should set string metric" do
35
35
  Rhoconnect::Stats::Record.set_value('foo', 'bar')
36
- Store.db.get('stat:foo').should == 'bar'
36
+ Store.get_value('stat:foo').should == 'bar'
37
37
  end
38
38
 
39
39
  it "should get string metric" do
40
- Store.db.set('stat:foo', 'bar')
40
+ Store.put_value('stat:foo', 'bar')
41
41
  Rhoconnect::Stats::Record.get_value('foo').should == 'bar'
42
42
  end
43
43
 
@@ -55,7 +55,7 @@ describe "Record" do
55
55
  Rhoconnect::Stats::Record.save_average('foo',time)
56
56
  time += 1
57
57
  end
58
- Store.db.zrange('stat:foo', 0, -1).should == ["2.0,1.0:10", "2.0,5.0:12"]
58
+ Store.zrange('stat:foo', 0, -1).should == ["2.0,1.0:10", "2.0,5.0:12"]
59
59
  end
60
60
 
61
61
  it "should update metric" do
@@ -74,7 +74,7 @@ describe "Record" do
74
74
  @incr = 2
75
75
  end
76
76
  end
77
- Store.db.zrange('stat:foo', 0, -1).should == ["1,1.0:14", "1,1.0:18", "1,1.0:20"]
77
+ Store.zrange('stat:foo', 0, -1).should == ["1,1.0:14", "1,1.0:18", "1,1.0:20"]
78
78
  Rhoconnect.stats = false
79
79
  end
80
80
 
@@ -87,15 +87,15 @@ describe "Record" do
87
87
  it "should reset metric" do
88
88
  Time.stub!(:now).and_return { @now }
89
89
  10.times { @now += 1; Rhoconnect::Stats::Record.add('foo') }
90
- Store.db.zrange('stat:foo', 0, -1).should == ["2:12", "2:14", "2:16", "2:18"]
90
+ Store.zrange('stat:foo', 0, -1).should == ["2:12", "2:14", "2:16", "2:18"]
91
91
  Rhoconnect::Stats::Record.reset('foo')
92
- Store.db.zrange('stat:foo', 0, -1).should == []
92
+ Store.zrange('stat:foo', 0, -1).should == []
93
93
  end
94
94
 
95
95
  it "should reset all metrics" do
96
96
  Rhoconnect::Stats::Record.add('foo')
97
97
  Rhoconnect::Stats::Record.add('bar')
98
98
  Rhoconnect::Stats::Record.reset_all
99
- Store.db.keys('stat:*').should == []
99
+ Store.keys('stat:*').should == []
100
100
  end
101
101
  end
@@ -1,10 +1,10 @@
1
1
  # Taken from http://github.com/voloko/redis-model
2
2
  require File.join(File.dirname(__FILE__),'spec_helper')
3
3
 
4
- describe Rhoconnect::Model do
4
+ describe Rhoconnect::StoreOrm do
5
5
 
6
6
  context "DSL" do
7
- class TestDSL < Rhoconnect::Model
7
+ class TestDSL < Rhoconnect::StoreOrm
8
8
  field :foo
9
9
  list :bar
10
10
  set :sloppy
@@ -29,7 +29,7 @@ describe Rhoconnect::Model do
29
29
 
30
30
  it "should raise error on invalid type" do
31
31
  lambda do
32
- class TestInvalidType < Rhoconnect::Model
32
+ class TestInvalidType < Rhoconnect::StoreOrm
33
33
  field :invalid, :invalid_type
34
34
  end
35
35
  end.should raise_error(ArgumentError, 'Unknown type invalid_type for field invalid')
@@ -37,7 +37,7 @@ describe Rhoconnect::Model do
37
37
  end
38
38
 
39
39
  context "field type cast" do
40
- class TestType < Rhoconnect::Model
40
+ class TestType < Rhoconnect::StoreOrm
41
41
  field :foo_string, :string
42
42
  field :foo_json, :json
43
43
  field :foo_date, :datetime
@@ -48,23 +48,29 @@ describe Rhoconnect::Model do
48
48
  set :set_date, :datetime
49
49
  end
50
50
 
51
- class TestValidateType < Rhoconnect::Model
51
+ class TestValidateType < Rhoconnect::StoreOrm
52
52
  field :v_field, :string
53
53
  validates_presence_of :v_field
54
54
  end
55
55
 
56
- class TestLoadType < Rhoconnect::Model
56
+ class TestLoadType < Rhoconnect::StoreOrm
57
57
  field :something, :string
58
58
  attr_accessor :foo
59
59
  end
60
60
 
61
61
  before(:each) do
62
+ Store.create
63
+ Store.flush_all
62
64
  @xRedisMock = RSpec::Mocks::Mock.new
63
65
  @yRedisMock = RSpec::Mocks::Mock.new
66
+ @xRedisDbMock = RSpec::Mocks::Mock.new
67
+ @yRedisDbMock = RSpec::Mocks::Mock.new
64
68
  @x = TestType.with_key(1)
65
69
  @y = TestType.with_key(1)
66
- @x.stub!(:redis).and_return(@xRedisMock)
67
- @y.stub!(:redis).and_return(@yRedisMock)
70
+ @x.stub!(:store).and_return(@xRedisMock)
71
+ @y.stub!(:store).and_return(@yRedisMock)
72
+ @xRedisMock.stub!(:db).and_return(@xRedisDbMock)
73
+ @yRedisMock.stub!(:db).and_return(@yRedisDbMock)
68
74
  end
69
75
 
70
76
  it "should create with string id" do
@@ -96,23 +102,23 @@ describe Rhoconnect::Model do
96
102
  end
97
103
 
98
104
  it "should save string as is" do
99
- @xRedisMock.should_receive(:[]=).with('test_type:1:foo_string', 'xxx')
100
- @yRedisMock.should_receive(:[]).with('test_type:1:foo_string').and_return('xxx')
105
+ @xRedisMock.should_receive(:put_value).with('test_type:1:foo_string', 'xxx')
106
+ @yRedisMock.should_receive(:get_value).with('test_type:1:foo_string').and_return('xxx')
101
107
  @x.foo_string = 'xxx'
102
108
  @y.foo_string.should be_instance_of(String)
103
109
  end
104
110
 
105
111
  it "should marshal integer fields" do
106
- @xRedisMock.should_receive(:[]=).with('test_type:1:foo_int', '12')
107
- @yRedisMock.should_receive(:[]).with('test_type:1:foo_int').and_return('12')
112
+ @xRedisMock.should_receive(:put_value).with('test_type:1:foo_int', '12')
113
+ @yRedisMock.should_receive(:get_value).with('test_type:1:foo_int').and_return('12')
108
114
  @x.foo_int = 12
109
115
  @y.foo_int.should be_kind_of(Integer)
110
116
  @y.foo_int.should == 12
111
117
  end
112
118
 
113
119
  it "should marshal float fields" do
114
- @xRedisMock.should_receive(:[]=).with('test_type:1:foo_float', '12.1')
115
- @yRedisMock.should_receive(:[]).with('test_type:1:foo_float').and_return('12.1')
120
+ @xRedisMock.should_receive(:put_value).with('test_type:1:foo_float', '12.1')
121
+ @yRedisMock.should_receive(:get_value).with('test_type:1:foo_float').and_return('12.1')
116
122
  @x.foo_float = 12.1
117
123
  @y.foo_float.should be_kind_of(Float)
118
124
  @y.foo_float.should == 12.1
@@ -121,8 +127,8 @@ describe Rhoconnect::Model do
121
127
  it "should marshal datetime fields" do
122
128
  time = DateTime.now
123
129
  str = time.strftime('%FT%T%z')
124
- @xRedisMock.should_receive(:[]=).with('test_type:1:foo_date', str)
125
- @yRedisMock.should_receive(:[]).with('test_type:1:foo_date').and_return(str)
130
+ @xRedisMock.should_receive(:put_value).with('test_type:1:foo_date', str)
131
+ @yRedisMock.should_receive(:get_value).with('test_type:1:foo_date').and_return(str)
126
132
  @x.foo_date = time
127
133
  @y.foo_date.should be_kind_of(DateTime)
128
134
  @y.foo_date.should.to_s == time.to_s
@@ -131,15 +137,15 @@ describe Rhoconnect::Model do
131
137
  it "should marshal json structs" do
132
138
  data = {'foo' => 'bar', 'x' => 2}
133
139
  str = JSON.dump(data)
134
- @xRedisMock.should_receive(:[]=).with('test_type:1:foo_json', str)
135
- @yRedisMock.should_receive(:[]).with('test_type:1:foo_json').and_return(str)
140
+ @xRedisMock.should_receive(:put_value).with('test_type:1:foo_json', str)
141
+ @yRedisMock.should_receive(:get_value).with('test_type:1:foo_json').and_return(str)
136
142
  @x.foo_json = data
137
143
  @y.foo_json.should be_kind_of(Hash)
138
144
  @y.foo_json.should.inspect == data.inspect
139
145
  end
140
146
 
141
147
  it "should return nil for empty fields" do
142
- @xRedisMock.should_receive(:[]).with('test_type:1:foo_date').and_return(nil)
148
+ @xRedisMock.should_receive(:get_value).with('test_type:1:foo_date').and_return(nil)
143
149
  @x.foo_date.should be_nil
144
150
  end
145
151
 
@@ -147,15 +153,15 @@ describe Rhoconnect::Model do
147
153
  data = DateTime.now
148
154
  str = data.strftime('%FT%T%z')
149
155
 
150
- @xRedisMock.should_receive('rpush').with('test_type:1:list_date', str)
151
- @xRedisMock.should_receive('lset').with('test_type:1:list_date', 1, str)
152
- @xRedisMock.should_receive('exists').with('test_type:1:list_date', str)
153
- @xRedisMock.should_receive('lrem').with('test_type:1:list_date', 0, str)
154
- @xRedisMock.should_receive('lpush').with('test_type:1:list_date', str)
155
- @xRedisMock.should_receive('lrange').with('test_type:1:list_date', 0, 1).and_return([str])
156
- @xRedisMock.should_receive('rpop').with('test_type:1:list_date').and_return(str)
157
- @xRedisMock.should_receive('lpop').with('test_type:1:list_date').and_return(str)
158
- @xRedisMock.should_receive('lindex').with('test_type:1:list_date', 0).and_return(str)
156
+ @xRedisDbMock.should_receive('rpush').with('test_type:1:list_date', str)
157
+ @xRedisDbMock.should_receive('lset').with('test_type:1:list_date', 1, str)
158
+ @xRedisDbMock.should_receive('exists').with('test_type:1:list_date', str)
159
+ @xRedisDbMock.should_receive('lrem').with('test_type:1:list_date', 0, str)
160
+ @xRedisDbMock.should_receive('lpush').with('test_type:1:list_date', str)
161
+ @xRedisDbMock.should_receive('lrange').with('test_type:1:list_date', 0, 1).and_return([str])
162
+ @xRedisDbMock.should_receive('rpop').with('test_type:1:list_date').and_return(str)
163
+ @xRedisDbMock.should_receive('lpop').with('test_type:1:list_date').and_return(str)
164
+ @xRedisDbMock.should_receive('lindex').with('test_type:1:list_date', 0).and_return(str)
159
165
  @x.list_date << data
160
166
  @x.list_date[1] = data
161
167
  @x.list_date.include?(data)
@@ -171,30 +177,24 @@ describe Rhoconnect::Model do
171
177
  data = DateTime.now
172
178
  str = data.strftime('%FT%T%z')
173
179
 
174
- @xRedisMock.should_receive('sadd').with('test_type:1:set_date', str)
175
- @xRedisMock.should_receive('srem').with('test_type:1:set_date', str)
176
- @xRedisMock.should_receive('sismember').with('test_type:1:set_date', str)
177
- @xRedisMock.should_receive('smembers').with('test_type:1:set_date').and_return([str])
178
- @xRedisMock.should_receive('sinter').with('test_type:1:set_date', 'x').and_return([str])
179
- @xRedisMock.should_receive('sunion').with('test_type:1:set_date', 'x').and_return([str])
180
- @xRedisMock.should_receive('sdiff').with('test_type:1:set_date', 'x', 'y').and_return([str])
180
+ @xRedisDbMock.should_receive('sadd').with('test_type:1:set_date', str)
181
+ @xRedisDbMock.should_receive('srem').with('test_type:1:set_date', str)
182
+ @xRedisDbMock.should_receive('sismember').with('test_type:1:set_date', str)
183
+ @xRedisDbMock.should_receive('smembers').with('test_type:1:set_date').and_return([str])
181
184
  @x.set_date << data
182
185
  @x.set_date.delete(data)
183
186
  @x.set_date.include?(data)
184
187
  @x.set_date.members[0].should be_kind_of(DateTime)
185
- @x.set_date.intersect('x')[0].should be_kind_of(DateTime)
186
- @x.set_date.union('x')[0].should be_kind_of(DateTime)
187
- @x.set_date.diff('x', 'y')[0].should be_kind_of(DateTime)
188
188
  end
189
189
 
190
190
  it "should handle empty members" do
191
- @xRedisMock.stub!(:smembers).and_return(nil)
191
+ @xRedisDbMock.stub!(:smembers).and_return(nil)
192
192
  @x.set_date.members.should == []
193
193
  end
194
194
  end
195
195
 
196
196
  context "increment/decrement" do
197
- class TestIncrements < Rhoconnect::Model
197
+ class TestIncrements < Rhoconnect::StoreOrm
198
198
  field :foo, :integer
199
199
  field :bar, :string
200
200
  field :baz, :float
@@ -203,16 +203,16 @@ describe Rhoconnect::Model do
203
203
  before do
204
204
  @redisMock = RSpec::Mocks::Mock.new
205
205
  @x = TestIncrements.with_key(1)
206
- @x.stub!(:redis).and_return(@redisMock)
206
+ @x.stub!(:store).and_return(@redisMock)
207
207
  end
208
208
 
209
209
  it "should send INCR when #increment! is called on an integer" do
210
- @redisMock.should_receive(:incrby).with("test_increments:1:foo", 1)
210
+ @redisMock.should_receive(:update_count).with("test_increments:1:foo", 1)
211
211
  @x.increment!(:foo)
212
212
  end
213
213
 
214
214
  it "should send DECR when #decrement! is called on an integer" do
215
- @redisMock.should_receive(:decrby).with("test_increments:1:foo", 1)
215
+ @redisMock.should_receive(:update_count).with("test_increments:1:foo", -1)
216
216
  @x.decrement!(:foo)
217
217
  end
218
218
 
@@ -225,7 +225,7 @@ describe Rhoconnect::Model do
225
225
  end
226
226
 
227
227
  context "redis commands" do
228
- class TestCommands < Rhoconnect::Model
228
+ class TestCommands < Rhoconnect::StoreOrm
229
229
  field :foo
230
230
  list :bar
231
231
  set :sloppy
@@ -233,40 +233,42 @@ describe Rhoconnect::Model do
233
233
 
234
234
  before(:each) do
235
235
  @redisMock = RSpec::Mocks::Mock.new
236
+ @redisDbMock = RSpec::Mocks::Mock.new
236
237
  @x = TestCommands.with_key(1)
237
- @x.stub!(:redis).and_return(@redisMock)
238
+ @x.stub!(:store).and_return(@redisMock)
239
+ @redisMock.stub!(:db).and_return(@redisDbMock)
238
240
  end
239
241
 
240
242
  it "should send GET on field read" do
241
- @redisMock.should_receive(:[]).with('test_commands:1:foo')
243
+ @redisMock.should_receive(:get_value).with('test_commands:1:foo')
242
244
  @x.foo
243
245
  end
244
246
 
245
247
  it "should send SET on field write" do
246
- @redisMock.should_receive(:[]=).with('test_commands:1:foo', 'bar')
248
+ @redisMock.should_receive(:put_value).with('test_commands:1:foo', 'bar')
247
249
  @x.foo = 'bar'
248
250
  end
249
251
 
250
252
  it "should send RPUSH on list <<" do
251
- @redisMock.should_receive(:rpush).with('test_commands:1:bar', 'bar')
253
+ @redisDbMock.should_receive(:rpush).with('test_commands:1:bar', 'bar')
252
254
  @x.bar << 'bar'
253
255
  end
254
256
 
255
257
  it "should send SADD on set <<" do
256
- @redisMock.should_receive(:sadd).with('test_commands:1:sloppy', 'bar')
258
+ @redisDbMock.should_receive(:sadd).with('test_commands:1:sloppy', 'bar')
257
259
  @x.sloppy << 'bar'
258
260
  end
259
261
 
260
262
  it "should delete separate fields" do
261
- @redisMock.should_receive(:del).with('test_commands:1:foo')
263
+ @redisMock.should_receive(:delete_value).with('test_commands:1:foo')
262
264
  @x.delete :foo
263
265
  end
264
266
 
265
267
  it "should delete all field" do
266
- @redisMock.should_receive(:del).with('test_commands:1:foo')
267
- @redisMock.should_receive(:del).with('test_commands:1:rho__id')
268
- @redisMock.should_receive(:del).with('test_commands:1:bar')
269
- @redisMock.should_receive(:del).with('test_commands:1:sloppy')
268
+ @redisMock.should_receive(:delete_value).with('test_commands:1:foo')
269
+ @redisMock.should_receive(:delete_value).with('test_commands:1:rho__id')
270
+ @redisMock.should_receive(:delete_value).with('test_commands:1:bar')
271
+ @redisMock.should_receive(:delete_value).with('test_commands:1:sloppy')
270
272
  @x.delete
271
273
  end
272
274
  end