rhoconnect 3.4.5 → 4.0.0.beta.10

Sign up to get free protection for your applications and to get access to all the features.
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