hyper-mesh 0.6.0 → 1.0.0.lap22

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 (722) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +12 -4
  3. data/.travis.yml +25 -2
  4. data/DOCS.md +722 -0
  5. data/Gemfile +2 -8
  6. data/README.md +32 -264
  7. data/Rakefile +7 -5
  8. data/dciy.toml +3 -0
  9. data/hyper-mesh.gemspec +59 -81
  10. data/lib/active_record_base.rb +3 -3
  11. data/lib/hypermesh/version.rb +1 -1
  12. data/lib/opal/parse_patch.rb +1 -1
  13. data/lib/reactive_record/active_record/aggregations.rb +1 -1
  14. data/lib/reactive_record/active_record/associations.rb +1 -5
  15. data/lib/reactive_record/active_record/class_methods.rb +6 -23
  16. data/lib/reactive_record/active_record/instance_methods.rb +30 -10
  17. data/lib/reactive_record/active_record/public_columns_hash.rb +27 -8
  18. data/lib/reactive_record/active_record/reactive_record/collection.rb +1 -1
  19. data/lib/reactive_record/active_record/reactive_record/column_types.rb +7 -1
  20. data/lib/reactive_record/active_record/reactive_record/dummy_value.rb +28 -15
  21. data/lib/reactive_record/active_record/reactive_record/isomorphic_base.rb +23 -12
  22. data/lib/reactive_record/active_record/reactive_record/while_loading.rb +84 -53
  23. data/lib/reactive_record/engine.rb +1 -1
  24. data/lib/reactive_record/server_data_cache.rb +99 -44
  25. metadata +101 -984
  26. data/docs/action_cable_quickstart.md +0 -134
  27. data/docs/activerecord_api.md +0 -275
  28. data/docs/authorization-policies.md +0 -502
  29. data/docs/client_side_scoping.md +0 -103
  30. data/docs/configuration_details.md +0 -33
  31. data/docs/pusher_faker_quickstart.md +0 -56
  32. data/docs/pusher_quickstart.md +0 -44
  33. data/docs/simple_poller_quickstart.md +0 -31
  34. data/docs/todo-example.md +0 -118
  35. data/docs/word_game.md +0 -28
  36. data/docs/words-example.md +0 -67
  37. data/examples/action-cable-production-mode/.gitignore +0 -21
  38. data/examples/action-cable-production-mode/Gemfile +0 -57
  39. data/examples/action-cable-production-mode/Gemfile.lock +0 -231
  40. data/examples/action-cable-production-mode/README.md +0 -24
  41. data/examples/action-cable-production-mode/Rakefile +0 -6
  42. data/examples/action-cable-production-mode/app/assets/config/manifest.js +0 -3
  43. data/examples/action-cable-production-mode/app/assets/images/.keep +0 -0
  44. data/examples/action-cable-production-mode/app/assets/javascripts/application.js +0 -20
  45. data/examples/action-cable-production-mode/app/assets/javascripts/cable.js +0 -13
  46. data/examples/action-cable-production-mode/app/assets/javascripts/channels/.keep +0 -0
  47. data/examples/action-cable-production-mode/app/assets/stylesheets/application.css +0 -15
  48. data/examples/action-cable-production-mode/app/channels/application_cable/channel.rb +0 -4
  49. data/examples/action-cable-production-mode/app/channels/application_cable/connection.rb +0 -4
  50. data/examples/action-cable-production-mode/app/controllers/application_controller.rb +0 -3
  51. data/examples/action-cable-production-mode/app/controllers/test_controller.rb +0 -5
  52. data/examples/action-cable-production-mode/app/models/models.rb +0 -2
  53. data/examples/action-cable-production-mode/app/models/public/application_record.rb +0 -3
  54. data/examples/action-cable-production-mode/app/models/public/word.rb +0 -2
  55. data/examples/action-cable-production-mode/app/policies/application_policy.rb +0 -14
  56. data/examples/action-cable-production-mode/app/views/components.rb +0 -16
  57. data/examples/action-cable-production-mode/app/views/components/app.rb +0 -18
  58. data/examples/action-cable-production-mode/app/views/layouts/application.html.erb +0 -14
  59. data/examples/action-cable-production-mode/bin/bundle +0 -3
  60. data/examples/action-cable-production-mode/bin/rails +0 -9
  61. data/examples/action-cable-production-mode/bin/rake +0 -9
  62. data/examples/action-cable-production-mode/bin/setup +0 -34
  63. data/examples/action-cable-production-mode/bin/spring +0 -16
  64. data/examples/action-cable-production-mode/bin/update +0 -29
  65. data/examples/action-cable-production-mode/config.ru +0 -5
  66. data/examples/action-cable-production-mode/config/application.rb +0 -18
  67. data/examples/action-cable-production-mode/config/boot.rb +0 -3
  68. data/examples/action-cable-production-mode/config/cable.yml +0 -9
  69. data/examples/action-cable-production-mode/config/database.yml +0 -25
  70. data/examples/action-cable-production-mode/config/environment.rb +0 -5
  71. data/examples/action-cable-production-mode/config/environments/development.rb +0 -56
  72. data/examples/action-cable-production-mode/config/environments/production.rb +0 -89
  73. data/examples/action-cable-production-mode/config/environments/test.rb +0 -42
  74. data/examples/action-cable-production-mode/config/initializers/application_controller_renderer.rb +0 -6
  75. data/examples/action-cable-production-mode/config/initializers/assets.rb +0 -11
  76. data/examples/action-cable-production-mode/config/initializers/backtrace_silencers.rb +0 -7
  77. data/examples/action-cable-production-mode/config/initializers/cookies_serializer.rb +0 -5
  78. data/examples/action-cable-production-mode/config/initializers/filter_parameter_logging.rb +0 -4
  79. data/examples/action-cable-production-mode/config/initializers/hyper_mesh.rb +0 -4
  80. data/examples/action-cable-production-mode/config/initializers/inflections.rb +0 -16
  81. data/examples/action-cable-production-mode/config/initializers/mime_types.rb +0 -4
  82. data/examples/action-cable-production-mode/config/initializers/new_framework_defaults.rb +0 -24
  83. data/examples/action-cable-production-mode/config/initializers/session_store.rb +0 -3
  84. data/examples/action-cable-production-mode/config/initializers/wrap_parameters.rb +0 -14
  85. data/examples/action-cable-production-mode/config/locales/en.yml +0 -23
  86. data/examples/action-cable-production-mode/config/puma.rb +0 -47
  87. data/examples/action-cable-production-mode/config/routes.rb +0 -5
  88. data/examples/action-cable-production-mode/config/secrets.yml +0 -22
  89. data/examples/action-cable-production-mode/config/spring.rb +0 -6
  90. data/examples/action-cable-production-mode/db/migrate/20161114213840_create_words.rb +0 -9
  91. data/examples/action-cable-production-mode/db/schema.rb +0 -34
  92. data/examples/action-cable-production-mode/db/seeds.rb +0 -7
  93. data/examples/action-cable-production-mode/lib/assets/.keep +0 -0
  94. data/examples/action-cable-production-mode/lib/tasks/.keep +0 -0
  95. data/examples/action-cable-production-mode/public/404.html +0 -67
  96. data/examples/action-cable-production-mode/public/422.html +0 -67
  97. data/examples/action-cable-production-mode/public/500.html +0 -66
  98. data/examples/action-cable-production-mode/public/apple-touch-icon-precomposed.png +0 -0
  99. data/examples/action-cable-production-mode/public/apple-touch-icon.png +0 -0
  100. data/examples/action-cable-production-mode/public/assets/.sprockets-manifest-3e9abd3ee8ba47c39a55b61ae37ed9e1.json +0 -1
  101. data/examples/action-cable-production-mode/public/favicon.ico +0 -0
  102. data/examples/action-cable-production-mode/public/robots.txt +0 -5
  103. data/examples/action-cable-production-mode/test/controllers/.keep +0 -0
  104. data/examples/action-cable-production-mode/test/fixtures/.keep +0 -0
  105. data/examples/action-cable-production-mode/test/fixtures/files/.keep +0 -0
  106. data/examples/action-cable-production-mode/test/fixtures/words.yml +0 -7
  107. data/examples/action-cable-production-mode/test/helpers/.keep +0 -0
  108. data/examples/action-cable-production-mode/test/integration/.keep +0 -0
  109. data/examples/action-cable-production-mode/test/mailers/.keep +0 -0
  110. data/examples/action-cable-production-mode/test/models/.keep +0 -0
  111. data/examples/action-cable-production-mode/test/models/word_test.rb +0 -7
  112. data/examples/action-cable-production-mode/test/test_helper.rb +0 -10
  113. data/examples/action-cable-production-mode/vendor/assets/javascripts/.keep +0 -0
  114. data/examples/action-cable-production-mode/vendor/assets/stylesheets/.keep +0 -0
  115. data/examples/action-cable/.gitignore +0 -21
  116. data/examples/action-cable/Gemfile +0 -58
  117. data/examples/action-cable/Gemfile.lock +0 -248
  118. data/examples/action-cable/README.md +0 -24
  119. data/examples/action-cable/Rakefile +0 -6
  120. data/examples/action-cable/app/assets/config/manifest.js +0 -3
  121. data/examples/action-cable/app/assets/images/.keep +0 -0
  122. data/examples/action-cable/app/assets/javascripts/application.js +0 -20
  123. data/examples/action-cable/app/assets/javascripts/cable.js +0 -13
  124. data/examples/action-cable/app/assets/javascripts/channels/.keep +0 -0
  125. data/examples/action-cable/app/assets/stylesheets/application.css +0 -15
  126. data/examples/action-cable/app/channels/application_cable/channel.rb +0 -4
  127. data/examples/action-cable/app/channels/application_cable/connection.rb +0 -4
  128. data/examples/action-cable/app/controllers/application_controller.rb +0 -3
  129. data/examples/action-cable/app/controllers/test_controller.rb +0 -5
  130. data/examples/action-cable/app/models/models.rb +0 -2
  131. data/examples/action-cable/app/models/public/.keep +0 -0
  132. data/examples/action-cable/app/models/public/application_record.rb +0 -3
  133. data/examples/action-cable/app/models/public/word.rb +0 -2
  134. data/examples/action-cable/app/policies/application_policy.rb +0 -14
  135. data/examples/action-cable/app/views/components.rb +0 -16
  136. data/examples/action-cable/app/views/components/app.rb +0 -18
  137. data/examples/action-cable/app/views/layouts/application.html.erb +0 -14
  138. data/examples/action-cable/bin/bundle +0 -3
  139. data/examples/action-cable/bin/rails +0 -9
  140. data/examples/action-cable/bin/rake +0 -9
  141. data/examples/action-cable/bin/setup +0 -34
  142. data/examples/action-cable/bin/spring +0 -16
  143. data/examples/action-cable/bin/update +0 -29
  144. data/examples/action-cable/config.ru +0 -5
  145. data/examples/action-cable/config/application.rb +0 -20
  146. data/examples/action-cable/config/boot.rb +0 -3
  147. data/examples/action-cable/config/cable.yml +0 -9
  148. data/examples/action-cable/config/database.yml +0 -25
  149. data/examples/action-cable/config/environment.rb +0 -5
  150. data/examples/action-cable/config/environments/development.rb +0 -56
  151. data/examples/action-cable/config/environments/production.rb +0 -86
  152. data/examples/action-cable/config/environments/test.rb +0 -42
  153. data/examples/action-cable/config/initializers/application_controller_renderer.rb +0 -6
  154. data/examples/action-cable/config/initializers/assets.rb +0 -11
  155. data/examples/action-cable/config/initializers/backtrace_silencers.rb +0 -7
  156. data/examples/action-cable/config/initializers/cookies_serializer.rb +0 -5
  157. data/examples/action-cable/config/initializers/filter_parameter_logging.rb +0 -4
  158. data/examples/action-cable/config/initializers/hyperloop.rb +0 -4
  159. data/examples/action-cable/config/initializers/inflections.rb +0 -16
  160. data/examples/action-cable/config/initializers/mime_types.rb +0 -4
  161. data/examples/action-cable/config/initializers/new_framework_defaults.rb +0 -24
  162. data/examples/action-cable/config/initializers/session_store.rb +0 -3
  163. data/examples/action-cable/config/initializers/wrap_parameters.rb +0 -14
  164. data/examples/action-cable/config/locales/en.yml +0 -23
  165. data/examples/action-cable/config/puma.rb +0 -47
  166. data/examples/action-cable/config/routes.rb +0 -5
  167. data/examples/action-cable/config/secrets.yml +0 -22
  168. data/examples/action-cable/config/spring.rb +0 -6
  169. data/examples/action-cable/db/migrate/20161114213840_create_words.rb +0 -9
  170. data/examples/action-cable/db/schema.rb +0 -34
  171. data/examples/action-cable/db/seeds.rb +0 -7
  172. data/examples/action-cable/lib/assets/.keep +0 -0
  173. data/examples/action-cable/lib/tasks/.keep +0 -0
  174. data/examples/action-cable/public/404.html +0 -67
  175. data/examples/action-cable/public/422.html +0 -67
  176. data/examples/action-cable/public/500.html +0 -66
  177. data/examples/action-cable/public/apple-touch-icon-precomposed.png +0 -0
  178. data/examples/action-cable/public/apple-touch-icon.png +0 -0
  179. data/examples/action-cable/public/favicon.ico +0 -0
  180. data/examples/action-cable/public/robots.txt +0 -5
  181. data/examples/action-cable/test/controllers/.keep +0 -0
  182. data/examples/action-cable/test/fixtures/.keep +0 -0
  183. data/examples/action-cable/test/fixtures/files/.keep +0 -0
  184. data/examples/action-cable/test/fixtures/words.yml +0 -7
  185. data/examples/action-cable/test/helpers/.keep +0 -0
  186. data/examples/action-cable/test/integration/.keep +0 -0
  187. data/examples/action-cable/test/mailers/.keep +0 -0
  188. data/examples/action-cable/test/models/.keep +0 -0
  189. data/examples/action-cable/test/models/word_test.rb +0 -7
  190. data/examples/action-cable/test/test_helper.rb +0 -10
  191. data/examples/action-cable/vendor/assets/javascripts/.keep +0 -0
  192. data/examples/action-cable/vendor/assets/stylesheets/.keep +0 -0
  193. data/examples/pusher-fake/.gitignore +0 -21
  194. data/examples/pusher-fake/Gemfile +0 -59
  195. data/examples/pusher-fake/Gemfile.lock +0 -262
  196. data/examples/pusher-fake/README.md +0 -24
  197. data/examples/pusher-fake/Rakefile +0 -6
  198. data/examples/pusher-fake/app/assets/config/manifest.js +0 -3
  199. data/examples/pusher-fake/app/assets/images/.keep +0 -0
  200. data/examples/pusher-fake/app/assets/javascripts/application.js +0 -21
  201. data/examples/pusher-fake/app/assets/stylesheets/application.css +0 -15
  202. data/examples/pusher-fake/app/controllers/application_controller.rb +0 -3
  203. data/examples/pusher-fake/app/controllers/test_controller.rb +0 -5
  204. data/examples/pusher-fake/app/models/models.rb +0 -2
  205. data/examples/pusher-fake/app/models/public/.keep +0 -0
  206. data/examples/pusher-fake/app/models/public/application_record.rb +0 -3
  207. data/examples/pusher-fake/app/models/public/word.rb +0 -2
  208. data/examples/pusher-fake/app/policies/application_policy.rb +0 -14
  209. data/examples/pusher-fake/app/views/components.rb +0 -16
  210. data/examples/pusher-fake/app/views/components/app.rb +0 -18
  211. data/examples/pusher-fake/app/views/layouts/application.html.erb +0 -14
  212. data/examples/pusher-fake/bin/bundle +0 -3
  213. data/examples/pusher-fake/bin/rails +0 -9
  214. data/examples/pusher-fake/bin/rake +0 -9
  215. data/examples/pusher-fake/bin/setup +0 -34
  216. data/examples/pusher-fake/bin/spring +0 -16
  217. data/examples/pusher-fake/bin/update +0 -29
  218. data/examples/pusher-fake/config.ru +0 -5
  219. data/examples/pusher-fake/config/application.rb +0 -20
  220. data/examples/pusher-fake/config/boot.rb +0 -3
  221. data/examples/pusher-fake/config/database.yml +0 -25
  222. data/examples/pusher-fake/config/environment.rb +0 -5
  223. data/examples/pusher-fake/config/environments/development.rb +0 -56
  224. data/examples/pusher-fake/config/environments/production.rb +0 -86
  225. data/examples/pusher-fake/config/environments/test.rb +0 -42
  226. data/examples/pusher-fake/config/initializers/application_controller_renderer.rb +0 -6
  227. data/examples/pusher-fake/config/initializers/assets.rb +0 -11
  228. data/examples/pusher-fake/config/initializers/backtrace_silencers.rb +0 -7
  229. data/examples/pusher-fake/config/initializers/cookies_serializer.rb +0 -5
  230. data/examples/pusher-fake/config/initializers/filter_parameter_logging.rb +0 -4
  231. data/examples/pusher-fake/config/initializers/hyper_mesh.rb +0 -21
  232. data/examples/pusher-fake/config/initializers/inflections.rb +0 -16
  233. data/examples/pusher-fake/config/initializers/mime_types.rb +0 -4
  234. data/examples/pusher-fake/config/initializers/new_framework_defaults.rb +0 -24
  235. data/examples/pusher-fake/config/initializers/session_store.rb +0 -3
  236. data/examples/pusher-fake/config/initializers/wrap_parameters.rb +0 -14
  237. data/examples/pusher-fake/config/locales/en.yml +0 -23
  238. data/examples/pusher-fake/config/puma.rb +0 -47
  239. data/examples/pusher-fake/config/routes.rb +0 -5
  240. data/examples/pusher-fake/config/secrets.yml +0 -22
  241. data/examples/pusher-fake/config/spring.rb +0 -6
  242. data/examples/pusher-fake/db/migrate/20161114213840_create_words.rb +0 -9
  243. data/examples/pusher-fake/db/schema.rb +0 -34
  244. data/examples/pusher-fake/db/seeds.rb +0 -7
  245. data/examples/pusher-fake/lib/assets/.keep +0 -0
  246. data/examples/pusher-fake/lib/tasks/.keep +0 -0
  247. data/examples/pusher-fake/public/404.html +0 -67
  248. data/examples/pusher-fake/public/422.html +0 -67
  249. data/examples/pusher-fake/public/500.html +0 -66
  250. data/examples/pusher-fake/public/apple-touch-icon-precomposed.png +0 -0
  251. data/examples/pusher-fake/public/apple-touch-icon.png +0 -0
  252. data/examples/pusher-fake/public/favicon.ico +0 -0
  253. data/examples/pusher-fake/public/robots.txt +0 -5
  254. data/examples/pusher-fake/test/controllers/.keep +0 -0
  255. data/examples/pusher-fake/test/fixtures/.keep +0 -0
  256. data/examples/pusher-fake/test/fixtures/files/.keep +0 -0
  257. data/examples/pusher-fake/test/fixtures/words.yml +0 -7
  258. data/examples/pusher-fake/test/helpers/.keep +0 -0
  259. data/examples/pusher-fake/test/integration/.keep +0 -0
  260. data/examples/pusher-fake/test/mailers/.keep +0 -0
  261. data/examples/pusher-fake/test/models/.keep +0 -0
  262. data/examples/pusher-fake/test/models/word_test.rb +0 -7
  263. data/examples/pusher-fake/test/test_helper.rb +0 -10
  264. data/examples/pusher-fake/vendor/assets/javascripts/.keep +0 -0
  265. data/examples/pusher-fake/vendor/assets/stylesheets/.keep +0 -0
  266. data/examples/pusher/.gitignore +0 -21
  267. data/examples/pusher/Gemfile +0 -58
  268. data/examples/pusher/Gemfile.lock +0 -236
  269. data/examples/pusher/README.md +0 -24
  270. data/examples/pusher/Rakefile +0 -6
  271. data/examples/pusher/app/assets/config/manifest.js +0 -3
  272. data/examples/pusher/app/assets/images/.keep +0 -0
  273. data/examples/pusher/app/assets/javascripts/application.js +0 -21
  274. data/examples/pusher/app/assets/stylesheets/application.css +0 -15
  275. data/examples/pusher/app/controllers/application_controller.rb +0 -3
  276. data/examples/pusher/app/controllers/test_controller.rb +0 -5
  277. data/examples/pusher/app/models/models.rb +0 -2
  278. data/examples/pusher/app/models/public/.keep +0 -0
  279. data/examples/pusher/app/models/public/application_record.rb +0 -3
  280. data/examples/pusher/app/models/public/word.rb +0 -2
  281. data/examples/pusher/app/policies/application_policy.rb +0 -14
  282. data/examples/pusher/app/views/components.rb +0 -16
  283. data/examples/pusher/app/views/components/app.rb +0 -18
  284. data/examples/pusher/app/views/layouts/application.html.erb +0 -14
  285. data/examples/pusher/bin/bundle +0 -3
  286. data/examples/pusher/bin/rails +0 -9
  287. data/examples/pusher/bin/rake +0 -9
  288. data/examples/pusher/bin/setup +0 -34
  289. data/examples/pusher/bin/spring +0 -16
  290. data/examples/pusher/bin/update +0 -29
  291. data/examples/pusher/config.ru +0 -5
  292. data/examples/pusher/config/application.rb +0 -20
  293. data/examples/pusher/config/boot.rb +0 -3
  294. data/examples/pusher/config/database.yml +0 -25
  295. data/examples/pusher/config/environment.rb +0 -5
  296. data/examples/pusher/config/environments/development.rb +0 -56
  297. data/examples/pusher/config/environments/production.rb +0 -86
  298. data/examples/pusher/config/environments/test.rb +0 -42
  299. data/examples/pusher/config/initializers/application_controller_renderer.rb +0 -6
  300. data/examples/pusher/config/initializers/assets.rb +0 -11
  301. data/examples/pusher/config/initializers/backtrace_silencers.rb +0 -7
  302. data/examples/pusher/config/initializers/cookies_serializer.rb +0 -5
  303. data/examples/pusher/config/initializers/filter_parameter_logging.rb +0 -4
  304. data/examples/pusher/config/initializers/hyper_mesh.rb +0 -10
  305. data/examples/pusher/config/initializers/inflections.rb +0 -16
  306. data/examples/pusher/config/initializers/mime_types.rb +0 -4
  307. data/examples/pusher/config/initializers/new_framework_defaults.rb +0 -24
  308. data/examples/pusher/config/initializers/session_store.rb +0 -3
  309. data/examples/pusher/config/initializers/wrap_parameters.rb +0 -14
  310. data/examples/pusher/config/locales/en.yml +0 -23
  311. data/examples/pusher/config/puma.rb +0 -47
  312. data/examples/pusher/config/routes.rb +0 -5
  313. data/examples/pusher/config/secrets.yml +0 -22
  314. data/examples/pusher/config/spring.rb +0 -6
  315. data/examples/pusher/db/migrate/20161114213840_create_words.rb +0 -9
  316. data/examples/pusher/db/schema.rb +0 -34
  317. data/examples/pusher/db/seeds.rb +0 -7
  318. data/examples/pusher/lib/assets/.keep +0 -0
  319. data/examples/pusher/lib/tasks/.keep +0 -0
  320. data/examples/pusher/public/404.html +0 -67
  321. data/examples/pusher/public/422.html +0 -67
  322. data/examples/pusher/public/500.html +0 -66
  323. data/examples/pusher/public/apple-touch-icon-precomposed.png +0 -0
  324. data/examples/pusher/public/apple-touch-icon.png +0 -0
  325. data/examples/pusher/public/favicon.ico +0 -0
  326. data/examples/pusher/public/robots.txt +0 -5
  327. data/examples/pusher/test/controllers/.keep +0 -0
  328. data/examples/pusher/test/fixtures/.keep +0 -0
  329. data/examples/pusher/test/fixtures/files/.keep +0 -0
  330. data/examples/pusher/test/fixtures/words.yml +0 -7
  331. data/examples/pusher/test/helpers/.keep +0 -0
  332. data/examples/pusher/test/integration/.keep +0 -0
  333. data/examples/pusher/test/mailers/.keep +0 -0
  334. data/examples/pusher/test/models/.keep +0 -0
  335. data/examples/pusher/test/models/word_test.rb +0 -7
  336. data/examples/pusher/test/test_helper.rb +0 -10
  337. data/examples/pusher/vendor/assets/javascripts/.keep +0 -0
  338. data/examples/pusher/vendor/assets/stylesheets/.keep +0 -0
  339. data/examples/simple-poller/.gitignore +0 -21
  340. data/examples/simple-poller/Gemfile +0 -57
  341. data/examples/simple-poller/Gemfile.lock +0 -229
  342. data/examples/simple-poller/README.md +0 -24
  343. data/examples/simple-poller/Rakefile +0 -6
  344. data/examples/simple-poller/app/assets/config/manifest.js +0 -3
  345. data/examples/simple-poller/app/assets/images/.keep +0 -0
  346. data/examples/simple-poller/app/assets/javascripts/application.js +0 -21
  347. data/examples/simple-poller/app/assets/stylesheets/application.css +0 -15
  348. data/examples/simple-poller/app/controllers/application_controller.rb +0 -3
  349. data/examples/simple-poller/app/controllers/test_controller.rb +0 -5
  350. data/examples/simple-poller/app/models/models.rb +0 -2
  351. data/examples/simple-poller/app/models/public/.keep +0 -0
  352. data/examples/simple-poller/app/models/public/application_record.rb +0 -3
  353. data/examples/simple-poller/app/models/public/word.rb +0 -2
  354. data/examples/simple-poller/app/policies/application_policy.rb +0 -14
  355. data/examples/simple-poller/app/views/components.rb +0 -16
  356. data/examples/simple-poller/app/views/components/app.rb +0 -18
  357. data/examples/simple-poller/app/views/layouts/application.html.erb +0 -14
  358. data/examples/simple-poller/bin/bundle +0 -3
  359. data/examples/simple-poller/bin/rails +0 -9
  360. data/examples/simple-poller/bin/rake +0 -9
  361. data/examples/simple-poller/bin/setup +0 -34
  362. data/examples/simple-poller/bin/spring +0 -16
  363. data/examples/simple-poller/bin/update +0 -29
  364. data/examples/simple-poller/config.ru +0 -5
  365. data/examples/simple-poller/config/application.rb +0 -20
  366. data/examples/simple-poller/config/boot.rb +0 -3
  367. data/examples/simple-poller/config/database.yml +0 -25
  368. data/examples/simple-poller/config/environment.rb +0 -5
  369. data/examples/simple-poller/config/environments/development.rb +0 -56
  370. data/examples/simple-poller/config/environments/production.rb +0 -86
  371. data/examples/simple-poller/config/environments/test.rb +0 -42
  372. data/examples/simple-poller/config/initializers/application_controller_renderer.rb +0 -6
  373. data/examples/simple-poller/config/initializers/assets.rb +0 -11
  374. data/examples/simple-poller/config/initializers/backtrace_silencers.rb +0 -7
  375. data/examples/simple-poller/config/initializers/cookies_serializer.rb +0 -5
  376. data/examples/simple-poller/config/initializers/filter_parameter_logging.rb +0 -4
  377. data/examples/simple-poller/config/initializers/hyper_mesh.rb +0 -9
  378. data/examples/simple-poller/config/initializers/inflections.rb +0 -16
  379. data/examples/simple-poller/config/initializers/mime_types.rb +0 -4
  380. data/examples/simple-poller/config/initializers/new_framework_defaults.rb +0 -24
  381. data/examples/simple-poller/config/initializers/session_store.rb +0 -3
  382. data/examples/simple-poller/config/initializers/wrap_parameters.rb +0 -14
  383. data/examples/simple-poller/config/locales/en.yml +0 -23
  384. data/examples/simple-poller/config/puma.rb +0 -47
  385. data/examples/simple-poller/config/routes.rb +0 -5
  386. data/examples/simple-poller/config/secrets.yml +0 -22
  387. data/examples/simple-poller/config/spring.rb +0 -6
  388. data/examples/simple-poller/db/migrate/20161114213840_create_words.rb +0 -9
  389. data/examples/simple-poller/db/schema.rb +0 -34
  390. data/examples/simple-poller/db/seeds.rb +0 -7
  391. data/examples/simple-poller/lib/assets/.keep +0 -0
  392. data/examples/simple-poller/lib/tasks/.keep +0 -0
  393. data/examples/simple-poller/public/404.html +0 -67
  394. data/examples/simple-poller/public/422.html +0 -67
  395. data/examples/simple-poller/public/500.html +0 -66
  396. data/examples/simple-poller/public/apple-touch-icon-precomposed.png +0 -0
  397. data/examples/simple-poller/public/apple-touch-icon.png +0 -0
  398. data/examples/simple-poller/public/favicon.ico +0 -0
  399. data/examples/simple-poller/public/robots.txt +0 -5
  400. data/examples/simple-poller/test/controllers/.keep +0 -0
  401. data/examples/simple-poller/test/fixtures/.keep +0 -0
  402. data/examples/simple-poller/test/fixtures/files/.keep +0 -0
  403. data/examples/simple-poller/test/fixtures/words.yml +0 -7
  404. data/examples/simple-poller/test/helpers/.keep +0 -0
  405. data/examples/simple-poller/test/integration/.keep +0 -0
  406. data/examples/simple-poller/test/mailers/.keep +0 -0
  407. data/examples/simple-poller/test/models/.keep +0 -0
  408. data/examples/simple-poller/test/models/word_test.rb +0 -7
  409. data/examples/simple-poller/test/test_helper.rb +0 -10
  410. data/examples/simple-poller/vendor/assets/javascripts/.keep +0 -0
  411. data/examples/simple-poller/vendor/assets/stylesheets/.keep +0 -0
  412. data/examples/word-game/.gitignore +0 -21
  413. data/examples/word-game/Gemfile +0 -57
  414. data/examples/word-game/Gemfile.lock +0 -241
  415. data/examples/word-game/README.md +0 -24
  416. data/examples/word-game/Rakefile +0 -6
  417. data/examples/word-game/app/assets/config/manifest.js +0 -3
  418. data/examples/word-game/app/assets/images/.keep +0 -0
  419. data/examples/word-game/app/assets/javascripts/application.js +0 -20
  420. data/examples/word-game/app/assets/javascripts/cable.js +0 -13
  421. data/examples/word-game/app/assets/javascripts/channels/.keep +0 -0
  422. data/examples/word-game/app/assets/stylesheets/application.css +0 -15
  423. data/examples/word-game/app/channels/application_cable/channel.rb +0 -4
  424. data/examples/word-game/app/channels/application_cable/connection.rb +0 -4
  425. data/examples/word-game/app/controllers/application_controller.rb +0 -3
  426. data/examples/word-game/app/controllers/concerns/.keep +0 -0
  427. data/examples/word-game/app/helpers/application_helper.rb +0 -2
  428. data/examples/word-game/app/jobs/application_job.rb +0 -2
  429. data/examples/word-game/app/mailers/application_mailer.rb +0 -4
  430. data/examples/word-game/app/models/application_record.rb +0 -3
  431. data/examples/word-game/app/models/concerns/.keep +0 -0
  432. data/examples/word-game/app/models/models.rb +0 -2
  433. data/examples/word-game/app/models/public/.keep +0 -0
  434. data/examples/word-game/app/policies/application_policy.rb +0 -14
  435. data/examples/word-game/app/views/components.rb +0 -16
  436. data/examples/word-game/app/views/components/.keep +0 -0
  437. data/examples/word-game/app/views/layouts/application.html.erb +0 -14
  438. data/examples/word-game/app/views/layouts/mailer.html.erb +0 -13
  439. data/examples/word-game/app/views/layouts/mailer.text.erb +0 -1
  440. data/examples/word-game/bin/bundle +0 -3
  441. data/examples/word-game/bin/rails +0 -9
  442. data/examples/word-game/bin/rake +0 -9
  443. data/examples/word-game/bin/setup +0 -34
  444. data/examples/word-game/bin/spring +0 -16
  445. data/examples/word-game/bin/update +0 -29
  446. data/examples/word-game/config.ru +0 -5
  447. data/examples/word-game/config/application.rb +0 -20
  448. data/examples/word-game/config/boot.rb +0 -3
  449. data/examples/word-game/config/cable.yml +0 -9
  450. data/examples/word-game/config/database.yml +0 -25
  451. data/examples/word-game/config/environment.rb +0 -5
  452. data/examples/word-game/config/environments/development.rb +0 -56
  453. data/examples/word-game/config/environments/production.rb +0 -86
  454. data/examples/word-game/config/environments/test.rb +0 -42
  455. data/examples/word-game/config/initializers/application_controller_renderer.rb +0 -6
  456. data/examples/word-game/config/initializers/assets.rb +0 -11
  457. data/examples/word-game/config/initializers/backtrace_silencers.rb +0 -7
  458. data/examples/word-game/config/initializers/cookies_serializer.rb +0 -5
  459. data/examples/word-game/config/initializers/filter_parameter_logging.rb +0 -4
  460. data/examples/word-game/config/initializers/hyper_mesh.rb +0 -4
  461. data/examples/word-game/config/initializers/inflections.rb +0 -16
  462. data/examples/word-game/config/initializers/mime_types.rb +0 -4
  463. data/examples/word-game/config/initializers/new_framework_defaults.rb +0 -24
  464. data/examples/word-game/config/initializers/session_store.rb +0 -3
  465. data/examples/word-game/config/initializers/wrap_parameters.rb +0 -14
  466. data/examples/word-game/config/locales/en.yml +0 -23
  467. data/examples/word-game/config/puma.rb +0 -47
  468. data/examples/word-game/config/routes.rb +0 -4
  469. data/examples/word-game/config/secrets.yml +0 -22
  470. data/examples/word-game/config/spring.rb +0 -6
  471. data/examples/word-game/db/seeds.rb +0 -7
  472. data/examples/word-game/lib/assets/.keep +0 -0
  473. data/examples/word-game/lib/tasks/.keep +0 -0
  474. data/examples/word-game/public/404.html +0 -67
  475. data/examples/word-game/public/422.html +0 -67
  476. data/examples/word-game/public/500.html +0 -66
  477. data/examples/word-game/public/apple-touch-icon-precomposed.png +0 -0
  478. data/examples/word-game/public/apple-touch-icon.png +0 -0
  479. data/examples/word-game/public/favicon.ico +0 -0
  480. data/examples/word-game/public/robots.txt +0 -5
  481. data/examples/word-game/test/controllers/.keep +0 -0
  482. data/examples/word-game/test/fixtures/.keep +0 -0
  483. data/examples/word-game/test/fixtures/files/.keep +0 -0
  484. data/examples/word-game/test/helpers/.keep +0 -0
  485. data/examples/word-game/test/integration/.keep +0 -0
  486. data/examples/word-game/test/mailers/.keep +0 -0
  487. data/examples/word-game/test/models/.keep +0 -0
  488. data/examples/word-game/test/test_helper.rb +0 -10
  489. data/examples/word-game/vendor/assets/javascripts/.keep +0 -0
  490. data/examples/word-game/vendor/assets/stylesheets/.keep +0 -0
  491. data/examples/words/.gitignore +0 -21
  492. data/examples/words/Gemfile +0 -59
  493. data/examples/words/Gemfile.lock +0 -248
  494. data/examples/words/README.md +0 -24
  495. data/examples/words/Rakefile +0 -6
  496. data/examples/words/app/assets/config/manifest.js +0 -3
  497. data/examples/words/app/assets/javascripts/application.js +0 -18
  498. data/examples/words/app/assets/stylesheets/application.css +0 -15
  499. data/examples/words/app/controllers/application_controller.rb +0 -3
  500. data/examples/words/app/controllers/test_controller.rb +0 -6
  501. data/examples/words/app/models/models.rb +0 -2
  502. data/examples/words/app/models/public/application_record.rb +0 -3
  503. data/examples/words/app/models/public/word.rb +0 -10
  504. data/examples/words/app/policies/application_policy.rb +0 -6
  505. data/examples/words/app/views/components.rb +0 -18
  506. data/examples/words/app/views/components/app.rb +0 -31
  507. data/examples/words/app/views/layouts/application.html.erb +0 -14
  508. data/examples/words/app/views/layouts/mailer.html.erb +0 -13
  509. data/examples/words/app/views/layouts/mailer.text.erb +0 -1
  510. data/examples/words/bin/bundle +0 -3
  511. data/examples/words/bin/rails +0 -9
  512. data/examples/words/bin/rake +0 -9
  513. data/examples/words/bin/setup +0 -34
  514. data/examples/words/bin/spring +0 -15
  515. data/examples/words/bin/update +0 -29
  516. data/examples/words/config.ru +0 -5
  517. data/examples/words/config/application.rb +0 -30
  518. data/examples/words/config/boot.rb +0 -3
  519. data/examples/words/config/cable.yml +0 -9
  520. data/examples/words/config/database.yml +0 -25
  521. data/examples/words/config/environment.rb +0 -5
  522. data/examples/words/config/environments/development.rb +0 -45
  523. data/examples/words/config/environments/production.rb +0 -86
  524. data/examples/words/config/environments/test.rb +0 -42
  525. data/examples/words/config/initializers/application_controller_renderer.rb +0 -6
  526. data/examples/words/config/initializers/assets.rb +0 -11
  527. data/examples/words/config/initializers/backtrace_silencers.rb +0 -7
  528. data/examples/words/config/initializers/cookies_serializer.rb +0 -5
  529. data/examples/words/config/initializers/filter_parameter_logging.rb +0 -4
  530. data/examples/words/config/initializers/hyper_mesh.rb +0 -14
  531. data/examples/words/config/initializers/inflections.rb +0 -16
  532. data/examples/words/config/initializers/mime_types.rb +0 -4
  533. data/examples/words/config/initializers/new_framework_defaults.rb +0 -24
  534. data/examples/words/config/initializers/session_store.rb +0 -3
  535. data/examples/words/config/initializers/wrap_parameters.rb +0 -14
  536. data/examples/words/config/locales/en.yml +0 -23
  537. data/examples/words/config/puma.rb +0 -47
  538. data/examples/words/config/routes.rb +0 -5
  539. data/examples/words/config/secrets.yml +0 -22
  540. data/examples/words/config/spring.rb +0 -6
  541. data/examples/words/db/migrate/20160921223808_create_words.rb +0 -9
  542. data/examples/words/db/schema.rb +0 -28
  543. data/examples/words/public/404.html +0 -67
  544. data/examples/words/public/422.html +0 -67
  545. data/examples/words/public/500.html +0 -66
  546. data/examples/words/public/apple-touch-icon-precomposed.png +0 -0
  547. data/examples/words/public/apple-touch-icon.png +0 -0
  548. data/examples/words/public/favicon.ico +0 -0
  549. data/examples/words/public/robots.txt +0 -5
  550. data/examples/words/vendor/assets/javascripts/.keep +0 -0
  551. data/examples/words/vendor/assets/stylesheets/.keep +0 -0
  552. data/reactive_record_test_app/Gemfile +0 -20
  553. data/reactive_record_test_app/Gemfile.lock +0 -269
  554. data/reactive_record_test_app/Rakefile +0 -7
  555. data/reactive_record_test_app/app/assets/javascripts/application.rb +0 -3
  556. data/reactive_record_test_app/app/assets/javascripts/bigdecimal.rb +0 -1
  557. data/reactive_record_test_app/app/assets/javascripts/reactive_record_config.js +0 -2
  558. data/reactive_record_test_app/app/assets/stylesheets/application.css +0 -13
  559. data/reactive_record_test_app/app/controllers/application_controller.rb +0 -8
  560. data/reactive_record_test_app/app/controllers/home_controller.rb +0 -7
  561. data/reactive_record_test_app/app/helpers/application_helper.rb +0 -2
  562. data/reactive_record_test_app/app/models/models.rb.erb +0 -6
  563. data/reactive_record_test_app/app/models/public/address.rb +0 -13
  564. data/reactive_record_test_app/app/models/public/comment.rb +0 -19
  565. data/reactive_record_test_app/app/models/public/todo_item.rb +0 -36
  566. data/reactive_record_test_app/app/models/public/user.rb +0 -78
  567. data/reactive_record_test_app/config.ru +0 -33
  568. data/reactive_record_test_app/config/application.rb +0 -75
  569. data/reactive_record_test_app/config/boot.rb +0 -10
  570. data/reactive_record_test_app/config/database.yml +0 -25
  571. data/reactive_record_test_app/config/environment.rb +0 -5
  572. data/reactive_record_test_app/config/environments/development.rb +0 -43
  573. data/reactive_record_test_app/config/initializers/backtrace_silencers.rb +0 -7
  574. data/reactive_record_test_app/config/initializers/hyper_mesh_legacy_behavior.rb +0 -5
  575. data/reactive_record_test_app/config/initializers/inflections.rb +0 -15
  576. data/reactive_record_test_app/config/initializers/mime_types.rb +0 -5
  577. data/reactive_record_test_app/config/initializers/secret_token.rb +0 -7
  578. data/reactive_record_test_app/config/initializers/session_store.rb +0 -8
  579. data/reactive_record_test_app/config/initializers/wrap_parameters.rb +0 -14
  580. data/reactive_record_test_app/config/locales/en.yml +0 -5
  581. data/reactive_record_test_app/config/routes.rb +0 -6
  582. data/reactive_record_test_app/db/migrate/20150617002932_create_todo_items.rb +0 -11
  583. data/reactive_record_test_app/db/migrate/20150617134028_create_users.rb +0 -14
  584. data/reactive_record_test_app/db/migrate/20150729195556_add_address_to_user.rb +0 -20
  585. data/reactive_record_test_app/db/migrate/20150826142045_create_comments.rb +0 -10
  586. data/reactive_record_test_app/db/migrate/20150828172008_add_single_comment_to_todo_item.rb +0 -5
  587. data/reactive_record_test_app/db/migrate/20150908184118_add_address_id_to_user.rb +0 -5
  588. data/reactive_record_test_app/db/migrate/20150917220236_add_second_address_to_user.rb +0 -10
  589. data/reactive_record_test_app/db/migrate/20151009000111_add_test_data_attributes_to_user.rb +0 -6
  590. data/reactive_record_test_app/db/migrate/20160129182544_add_test_enum_to_user.rb +0 -5
  591. data/reactive_record_test_app/db/schema.rb +0 -63
  592. data/reactive_record_test_app/db/seeds.rb +0 -66
  593. data/reactive_record_test_app/public/404.html +0 -26
  594. data/reactive_record_test_app/public/422.html +0 -26
  595. data/reactive_record_test_app/public/500.html +0 -25
  596. data/reactive_record_test_app/public/favicon.ico +0 -0
  597. data/reactive_record_test_app/script/rails +0 -6
  598. data/reactive_record_test_app/spec-opal/active-record/aggregations_spec.rb +0 -41
  599. data/reactive_record_test_app/spec-opal/active-record/associations_spec.rb +0 -75
  600. data/reactive_record_test_app/spec-opal/active-record/base_spec.rb +0 -126
  601. data/reactive_record_test_app/spec-opal/active-record/dummy_value_spec.rb +0 -27
  602. data/reactive_record_test_app/spec-opal/active-record/edge_cases_spec.rb +0 -116
  603. data/reactive_record_test_app/spec-opal/active-record/enum_spec.rb +0 -43
  604. data/reactive_record_test_app/spec-opal/active-record/instance_methods_spec.rb +0 -53
  605. data/reactive_record_test_app/spec-opal/active-record/non_ar_aggregations_spec.rb +0 -74
  606. data/reactive_record_test_app/spec-opal/active-record/reactive_record_load_spec.rb +0 -23
  607. data/reactive_record_test_app/spec-opal/active-record/rendering_spec.rb +0 -230
  608. data/reactive_record_test_app/spec-opal/active-record/save_spec.rb +0 -124
  609. data/reactive_record_test_app/spec-opal/active-record/scope_spec.rb +0 -85
  610. data/reactive_record_test_app/spec-opal/active-record/update_aggregations_spec.rb +0 -76
  611. data/reactive_record_test_app/spec-opal/active-record/update_attributes_spec.rb +0 -186
  612. data/reactive_record_test_app/spec-opal/active-record/virtual_methods_spec.rb +0 -71
  613. data/reactive_record_test_app/spec-opal/index.html.erb +0 -11
  614. data/reactive_record_test_app/spec-opal/spec_helper.js.rb +0 -268
  615. data/reactive_record_test_app/spec-opal/test_spec.rb +0 -7
  616. data/reactive_record_test_app/spec-opal/vendor/es5-shim.min.js +0 -6
  617. data/reactive_record_test_app/spec_dont_run/README.md +0 -33
  618. data/reactive_record_test_app/spec_dont_run/active_record_broken/permissions_spec.rb +0 -170
  619. data/reactive_record_test_app/spec_dont_run/active_record_broken/prerendering_spec.rb +0 -50
  620. data/reactive_record_test_app/spec_dont_run/moved_to_main_spec_dir/zzzmany_to_many_spec_moved_to_main_suite.rb +0 -30
  621. data/reactive_record_test_app/spec_dont_run/moved_to_main_spec_dir/zzzrevert_record_spec_moved.rb +0 -78
  622. data/reactive_record_test_app/spec_dont_run/moved_to_main_spec_dir/zzzupdate_associations_spec_moved.rb +0 -142
  623. data/reactive_record_test_app/spec_dont_run/moved_to_main_spec_dir/zzzupdate_scopes_movedspec.rb +0 -48
  624. data/spec/batch1/aaa-unit_tests/connection_movedspec.rb +0 -144
  625. data/spec/batch1/aaa-unit_tests/dummy_value_spec.rb +0 -26
  626. data/spec/batch1/column_types/column_type_spec.rb +0 -318
  627. data/spec/batch1/crud_access_regulation/broadcast_controls_access_spec.rb +0 -99
  628. data/spec/batch1/crud_access_regulation/model_policies_spec.rb +0 -133
  629. data/spec/batch1/misc/access_like_hash_spec.rb +0 -43
  630. data/spec/batch1/misc/while_loading_spec.rb +0 -196
  631. data/spec/batch1/policies/regulate_all_broadcasts_spec.rb +0 -315
  632. data/spec/batch1/policies/regulate_broadcast_spec.rb +0 -370
  633. data/spec/batch2/authorization_spec.rb +0 -112
  634. data/spec/batch2/default_scope_spec.rb +0 -121
  635. data/spec/batch2/has_many_through_spec.rb +0 -169
  636. data/spec/batch2/relationships_spec.rb +0 -263
  637. data/spec/batch3/auto_load_itself_spec.rb +0 -24
  638. data/spec/batch3/edge_cases_spec.rb +0 -31
  639. data/spec/batch3/finder_method_spec.rb +0 -67
  640. data/spec/batch3/many_to_many_spec.rb +0 -50
  641. data/spec/batch3/pry_rescue_xspec.rb +0 -48
  642. data/spec/batch3/readme.txt +0 -0
  643. data/spec/batch3/revert_spec.rb +0 -113
  644. data/spec/batch3/save_while_loading_spec.rb +0 -44
  645. data/spec/batch3/update_associations_spec.rb +0 -189
  646. data/spec/batch3/update_scopes_spec.rb +0 -54
  647. data/spec/batch4/saving_during_commit_spec.rb +0 -64
  648. data/spec/batch4/scope_spec.rb +0 -581
  649. data/spec/batch4/scoped_todos_spec.rb +0 -167
  650. data/spec/batch4/synchromesh_spec.rb +0 -80
  651. data/spec/bin/firebug-2.0.13-fx.xpi +0 -0
  652. data/spec/component_helpers_xspec.rb +0 -49
  653. data/spec/examples/dictionary.rb +0 -239
  654. data/spec/examples/dictionary_with_client_scopes.rb +0 -196
  655. data/spec/examples/random_examples.rb +0 -133
  656. data/spec/factories/child_model.rb +0 -5
  657. data/spec/factories/comment.rb +0 -5
  658. data/spec/factories/test_models.rb +0 -5
  659. data/spec/factories/todo.rb +0 -5
  660. data/spec/factories/user.rb +0 -5
  661. data/spec/play_ground.rb +0 -64
  662. data/spec/reactive_record_factory.rb +0 -62
  663. data/spec/spec_helper.rb +0 -372
  664. data/spec/support/component_helpers.rb +0 -351
  665. data/spec/test_app/Gemfile +0 -66
  666. data/spec/test_app/Gemfile.lock +0 -303
  667. data/spec/test_app/Rakefile +0 -6
  668. data/spec/test_app/app/assets/javascripts/application.js +0 -6
  669. data/spec/test_app/app/assets/stylesheets/application.css +0 -15
  670. data/spec/test_app/app/controllers/application_controller.rb +0 -13
  671. data/spec/test_app/app/controllers/test_controller.rb +0 -5
  672. data/spec/test_app/app/models/_react_public_models.rb +0 -2
  673. data/spec/test_app/app/models/public/address.rb +0 -13
  674. data/spec/test_app/app/models/public/child_model.rb +0 -3
  675. data/spec/test_app/app/models/public/comment.rb +0 -25
  676. data/spec/test_app/app/models/public/test_model.rb +0 -5
  677. data/spec/test_app/app/models/public/todo.rb +0 -6
  678. data/spec/test_app/app/models/public/todo_item.rb +0 -36
  679. data/spec/test_app/app/models/public/user.rb +0 -88
  680. data/spec/test_app/app/policies/auto_loader_test_classa_policy.rb +0 -3
  681. data/spec/test_app/app/policies/auto_loader_test_classb_policy.rb +0 -3
  682. data/spec/test_app/app/policies/auto_loader_test_classc_policy.rb +0 -3
  683. data/spec/test_app/app/policies/auto_loader_test_classd_policy.rb +0 -3
  684. data/spec/test_app/app/views/components.rb +0 -13
  685. data/spec/test_app/app/views/components/show.rb +0 -5
  686. data/spec/test_app/app/views/layouts/application.html.erb +0 -14
  687. data/spec/test_app/bin/bundle +0 -3
  688. data/spec/test_app/bin/rails +0 -4
  689. data/spec/test_app/bin/rake +0 -4
  690. data/spec/test_app/bin/setup +0 -29
  691. data/spec/test_app/config.ru +0 -4
  692. data/spec/test_app/config/application.rb +0 -44
  693. data/spec/test_app/config/boot.rb +0 -6
  694. data/spec/test_app/config/cable.yml +0 -10
  695. data/spec/test_app/config/database.yml +0 -47
  696. data/spec/test_app/config/environment.rb +0 -5
  697. data/spec/test_app/config/environments/development.rb +0 -41
  698. data/spec/test_app/config/environments/production.rb +0 -79
  699. data/spec/test_app/config/environments/test.rb +0 -42
  700. data/spec/test_app/config/initializers/assets.rb +0 -11
  701. data/spec/test_app/config/initializers/backtrace_silencers.rb +0 -7
  702. data/spec/test_app/config/initializers/cookies_serializer.rb +0 -3
  703. data/spec/test_app/config/initializers/filter_parameter_logging.rb +0 -4
  704. data/spec/test_app/config/initializers/inflections.rb +0 -16
  705. data/spec/test_app/config/initializers/mime_types.rb +0 -4
  706. data/spec/test_app/config/initializers/session_store.rb +0 -3
  707. data/spec/test_app/config/initializers/synchromesh.rb +0 -11
  708. data/spec/test_app/config/initializers/wrap_parameters.rb +0 -14
  709. data/spec/test_app/config/locales/en.yml +0 -23
  710. data/spec/test_app/config/routes.rb +0 -61
  711. data/spec/test_app/config/secrets.yml +0 -22
  712. data/spec/test_app/db/development.sqlite3 +0 -0
  713. data/spec/test_app/db/migrate/20160731182106_create_test_models.rb +0 -75
  714. data/spec/test_app/db/schema.rb +0 -88
  715. data/spec/test_app/db/seeds.rb +0 -7
  716. data/spec/test_app/lib/assets/.keep +0 -0
  717. data/spec/test_app/public/404.html +0 -67
  718. data/spec/test_app/public/422.html +0 -67
  719. data/spec/test_app/public/500.html +0 -66
  720. data/spec/test_app/public/favicon.ico +0 -0
  721. data/spec/test_components.rb +0 -18
  722. data/spec/vendor/es5-shim.min.js +0 -6
@@ -1,6 +1,6 @@
1
1
  module HyperMesh
2
2
  def self.load(&block)
3
- ReactiveRecord.load &block
3
+ ReactiveRecord.load(&block)
4
4
  end
5
5
  end
6
6
 
@@ -69,7 +69,7 @@ module ReactiveRecord
69
69
  # Adds while_loading feature to React
70
70
  # to use attach a .while_loading handler to any element for example
71
71
  # div { "displayed if everything is loaded" }.while_loading { "displayed while I'm loading" }
72
- # the contents of the div will be switched (using jQuery.show/hide) depending on the state of contents of the first block
72
+ # the contents of the div will be switched (using javascript classes) depending on the state of contents of the first block
73
73
 
74
74
  # To notify React that something is loading use React::WhileLoading.loading!
75
75
  # once everything is loaded then do React::WhileLoading.loaded_at message (typically a time stamp just for debug purposes)
@@ -101,7 +101,9 @@ module ReactiveRecord
101
101
 
102
102
  if RUBY_ENGINE == 'opal'
103
103
 
104
- # I DONT THINK WE USE opal-jquery in this module anymore - require 'opal-jquery' if opal_client?
104
+ # +: I DONT THINK WE USE opal-jquery in this module anymore - require 'opal-jquery' if opal_client?
105
+ # -: You think wrong. add_style_sheet uses the jQuery $, after_mount too, others too
106
+ # -: I removed those references. Now you think right.
105
107
 
106
108
  include Hyperloop::Component::Mixin
107
109
 
@@ -145,12 +147,17 @@ module ReactiveRecord
145
147
  end
146
148
 
147
149
  def add_style_sheet
148
- @style_sheet ||= %x{
149
- $('<style type="text/css">'+
150
- ' .reactive_record_is_loading > .reactive_record_show_when_loaded { display: none; }'+
151
- ' .reactive_record_is_loaded > .reactive_record_show_while_loading { display: none; }'+
152
- '</style>').appendTo("head")
153
- }
150
+ # directly assigning the code to the variable triggers a opal 0.10.5 compiler bug.
151
+ unless @style_sheet_added
152
+ %x{
153
+ var style_el = document.createElement("style");
154
+ style_el.setAttribute("type", "text/css");
155
+ style_el.innerHTML = ".reactive_record_is_loading > .reactive_record_show_when_loaded { display: none; }\n" +
156
+ ".reactive_record_is_loaded > .reactive_record_show_while_loading { display: none; }";
157
+ document.head.append(style_el);
158
+ }
159
+ @style_sheet_added = true
160
+ end
154
161
  end
155
162
 
156
163
  end
@@ -167,10 +174,24 @@ module ReactiveRecord
167
174
  after_mount do
168
175
  @waiting_on_resources = params.loading
169
176
  WhileLoading.add_style_sheet
177
+ node = dom_node
170
178
  %x{
171
- var node = #{dom_node};
172
- $(node).children(':nth-child(-1n+'+#{params.loaded_children.count}+')').addClass('reactive_record_show_when_loaded');
173
- $(node).children(':nth-child(1n+'+#{params.loaded_children.count+1}+')').addClass('reactive_record_show_while_loading');
179
+ var nodes = node.querySelectorAll(':nth-child(-1n+'+#{params.loaded_children.count}+')');
180
+ nodes.forEach(
181
+ function(current_node, current_index, list_obj) {
182
+ if (current_node.className.indexOf('reactive_record_show_when_loaded') === -1) {
183
+ current_node.className = current_node.className + ' reactive_record_show_when_loaded';
184
+ }
185
+ }
186
+ );
187
+ nodes = node.querySelectorAll(':nth-child(1n+'+#{params.loaded_children.count+1}+')');
188
+ nodes.forEach(
189
+ function(current_node, current_index, list_obj) {
190
+ if (current_node.className.indexOf('reactive_record_show_while_loading') === -1) {
191
+ current_node.className = current_node.className + ' reactive_record_show_while_loading';
192
+ }
193
+ }
194
+ );
174
195
  }
175
196
  end
176
197
 
@@ -219,7 +240,7 @@ module React
219
240
  buffer.dup
220
241
  end
221
242
 
222
- new_element = React.create_element(
243
+ new_element = React.create_element(
223
244
  ReactiveRecord::WhileLoading,
224
245
  loading: waiting_on_resources,
225
246
  loading_children: loading_children,
@@ -235,8 +256,10 @@ module React
235
256
  end
236
257
 
237
258
  end
259
+ end
238
260
 
239
- module ::Hyperloop
261
+ if RUBY_ENGINE == 'opal'
262
+ module Hyperloop
240
263
  class Component
241
264
  module Mixin
242
265
 
@@ -258,56 +281,64 @@ module React
258
281
  def reactive_record_link_to_enclosing_while_loading_container
259
282
  # Call after any component mounts - attaches the containers loading id to this component
260
283
  # Fyi, the while_loading container is responsible for setting its own link to itself
261
-
284
+ node = dom_node
262
285
  %x{
263
- var node = #{dom_node};
264
- if (!$(node).is('[data-reactive_record_enclosing_while_loading_container_id]')) {
265
- var while_loading_container = $(node).closest('[data-reactive_record_while_loading_container_id]')
266
- if (while_loading_container.length > 0) {
267
- var container_id = $(while_loading_container).attr('data-reactive_record_while_loading_container_id')
268
- $(node).attr('data-reactive_record_enclosing_while_loading_container_id', container_id)
286
+ if (typeof node === "undefined" || node === null) return;
287
+ var node_wl_attr = node.getAttribute('data-reactive_record_enclosing_while_loading_container_id');
288
+ if (node_wl_attr === null || node_wl_attr === "") {
289
+ var while_loading_container = node.closest('[data-reactive_record_while_loading_container_id]');
290
+ if (while_loading_container !== null && while_loading_container.length > 0) {
291
+ var container_id = while_loading_container.getAttribute('data-reactive_record_while_loading_container_id');
292
+ node.setAttribute('data-reactive_record_enclosing_while_loading_container_id', container_id);
293
+ }
269
294
  }
270
295
  }
271
- }
272
296
  end
273
297
 
274
298
  def reactive_record_link_set_while_loading_container_class
275
- %x{
276
-
277
- var node = #{dom_node};
278
- var wl = #{!self.is_a?(ReactiveRecord::WhileLoading)}
279
- if (#{!self.is_a?(ReactiveRecord::WhileLoading)} && $(node).is('[data-reactive_record_while_loading_container_id]')) {
280
- return
281
- }
282
- var while_loading_container_id = $(node).attr('data-reactive_record_enclosing_while_loading_container_id');
283
- if (while_loading_container_id) {
284
- var while_loading_container = $('[data-reactive_record_while_loading_container_id='+while_loading_container_id+']');
285
- var loading = #{!!waiting_on_resources == true};
286
- if (loading) {
287
- $(node).addClass('reactive_record_is_loading');
288
- $(node).removeClass('reactive_record_is_loaded');
289
- $(while_loading_container).addClass('reactive_record_is_loading');
290
- $(while_loading_container).removeClass('reactive_record_is_loaded');
291
-
292
- } else if (!$(node).hasClass('reactive_record_is_loaded')) {
293
-
294
- if (!$(node).attr('data-reactive_record_while_loading_container_id')) {
295
- $(node).removeClass('reactive_record_is_loading');
296
- $(node).addClass('reactive_record_is_loaded');
297
- }
298
- if (!$(while_loading_container).hasClass('reactive_record_is_loaded')) {
299
- var loading_children = $(while_loading_container).
300
- find('[data-reactive_record_enclosing_while_loading_container_id='+while_loading_container_id+'].reactive_record_is_loading')
301
- if (loading_children.length == 0) {
302
- $(while_loading_container).removeClass('reactive_record_is_loading')
303
- $(while_loading_container).addClass('reactive_record_is_loaded')
299
+ node = dom_node
300
+ loading = (waiting_on_resources ? `true` : `false`)
301
+ %x{
302
+ if (typeof node === "undefined" || node === null) return;
303
+ var while_loading_container_id = node.getAttribute('data-reactive_record_while_loading_container_id');
304
+ if (#{!self.is_a?(ReactiveRecord::WhileLoading)} && while_loading_container_id !== null && while_loading_container_id !== "") {
305
+ return;
306
+ }
307
+ var enc_while_loading_container_id = node.getAttribute('data-reactive_record_enclosing_while_loading_container_id');
308
+ if (enc_while_loading_container_id !== null && enc_while_loading_container_id !== "") {
309
+ var while_loading_container = document.body.querySelector('[data-reactive_record_while_loading_container_id="'+enc_while_loading_container_id+'"]');
310
+ if (loading) {
311
+ node.className = node.className.replace(/reactive_record_is_loaded/g, '').replace(/ /g, ' ');
312
+ if (node.className.indexOf('reactive_record_is_loading') === -1) {
313
+ node.className = node.className + ' reactive_record_is_loading';
314
+ }
315
+ if (while_loading_container !== null) {
316
+ while_loading_container.className = while_loading_container.className.replace(/reactive_record_is_loaded/g, '').replace(/ /g, ' ');
317
+ if (while_loading_container.className.indexOf('reactive_record_is_loading') === -1) {
318
+ while_loading_container.className = while_loading_container.className + ' reactive_record_is_loading';
319
+ }
320
+ }
321
+ } else if (node.className.indexOf('reactive_record_is_loaded') === -1) {
322
+ if (while_loading_container_id === null || while_loading_container_id === "") {
323
+ node.className = node.className.replace(/reactive_record_is_loading/g, '').replace(/ /g, ' ');
324
+ if (node.className.indexOf('reactive_record_is_loaded') === -1) {
325
+ node.className = node.className + ' reactive_record_is_loaded';
326
+ }
327
+ }
328
+ if (while_loading_container.className.indexOf('reactive_record_is_loaded') === -1) {
329
+ var loading_children = while_loading_container.querySelectorAll('[data-reactive_record_enclosing_while_loading_container_id="'+enc_while_loading_container_id+'"].reactive_record_is_loading');
330
+ if (loading_children.length === 0) {
331
+ while_loading_container.className = while_loading_container.className.replace(/reactive_record_is_loading/g, '').replace(/ /g, ' ');
332
+ if (while_loading_container.className.indexOf('reactive_record_is_loaded') === -1) {
333
+ while_loading_container.className = while_loading_container.className + ' reactive_record_is_loaded';
334
+ }
335
+ }
304
336
  }
305
337
  }
306
338
  }
307
339
  }
308
- }
309
340
  end
310
341
  end
311
342
  end
312
- end if RUBY_ENGINE == 'opal'
343
+ end
313
344
  end
@@ -3,7 +3,7 @@ module HyperMesh
3
3
  isolate_namespace ReactiveRecord
4
4
  config.generators do |g|
5
5
  g.test_framework :rspec, :fixture => false
6
- g.fixture_replacement :factory_girl, :dir => 'spec/factories'
6
+ g.fixture_replacement :factory_bot, :dir => 'spec/factories'
7
7
  g.assets false
8
8
  g.helper false
9
9
  end
@@ -87,6 +87,7 @@ module ReactiveRecord
87
87
 
88
88
  class ServerDataCache
89
89
 
90
+ # SECURITY - SAFE
90
91
  def initialize(acting_user, preloaded_records)
91
92
  @acting_user = acting_user
92
93
  @cache = []
@@ -96,15 +97,21 @@ module ReactiveRecord
96
97
 
97
98
  if RUBY_ENGINE != 'opal'
98
99
 
100
+ # SECURITY - UNSAFE
99
101
  def [](*vector)
100
102
  root = CacheItem.new(@cache, @acting_user, vector[0], @preloaded_records)
101
103
  vector[1..-1].inject(root) { |cache_item, method| cache_item.apply_method method if cache_item }
102
- vector[0] = vector[0].constantize
103
- new_items = @cache.select { | cache_item | cache_item.root == root }
104
- @requested_cache_items += new_items
105
- new_items.last.value if new_items.last
104
+ vector[0] = vector[0].constantize # TODO: Security
105
+ last_value = nil
106
+ @cache.each do |cache_item|
107
+ next if cache_item.root != root || @requested_cache_items.include?(cache_item)
108
+ @requested_cache_items << cache_item
109
+ last_value = cache_item
110
+ end
111
+ last_value
106
112
  end
107
113
 
114
+ # SECURITY - SAFE
108
115
  def self.[](models, associations, vectors, acting_user)
109
116
  ActiveRecord::Base.public_columns_hash
110
117
  result = nil
@@ -112,69 +119,78 @@ module ReactiveRecord
112
119
  cache = new(acting_user, ReactiveRecord::Base.save_records(models, associations, acting_user, false, false))
113
120
  vectors.each { |vector| cache[*vector] }
114
121
  result = cache.as_json
115
- raise ActiveRecord::Rollback
122
+ raise ActiveRecord::Rollback, "This Rollback is intentional!"
116
123
  end
117
124
  result
118
125
  end
119
126
 
127
+ # SECURITY - SAFE
120
128
  def clear_requests
121
129
  @requested_cache_items = []
122
130
  end
123
131
 
132
+ # SECURITY - SAFE
124
133
  def as_json
125
- @requested_cache_items.inject({}) do | hash, cache_item|
134
+ @requested_cache_items.inject({}) do |hash, cache_item|
126
135
  hash.deep_merge! cache_item.as_hash
127
136
  end
128
137
  end
129
138
 
130
- def select(&block); @cache.select &block; end
139
+ # SECURITY - SAFE
140
+ def select(&block); @cache.select(&block); end
131
141
 
132
- def detect(&block); @cache.detect &block; end
142
+ # SECURITY - SAFE
143
+ def detect(&block); @cache.detect(&block); end
133
144
 
145
+ # SECURITY - SAFE
134
146
  def inject(initial, &block); @cache.inject(initial) &block; end
135
147
 
136
148
  class CacheItem
137
149
 
138
150
  attr_reader :vector
139
151
  attr_reader :absolute_vector
140
- attr_reader :record_chain
141
152
  attr_reader :root
142
153
  attr_reader :acting_user
143
154
 
155
+ # SECURITY - SAFE
144
156
  def value
145
- @ar_object
157
+ @value # which is a ActiveRecord object
146
158
  end
147
159
 
160
+ # SECURITY - SAFE
148
161
  def method
149
- vector.last
162
+ @vector.last
150
163
  end
151
164
 
165
+ # SECURITY - UNSAFE
152
166
  def self.new(db_cache, acting_user, klass, preloaded_records)
153
- klass_constant = klass.constantize
167
+ klass_constant = klass.constantize # TODO: Security Risk
154
168
  if existing = db_cache.detect { |cached_item| cached_item.vector == [klass_constant] }
155
169
  return existing
156
170
  end
157
171
  super
158
172
  end
159
173
 
174
+ # SECURITY - UNSAFE
160
175
  def initialize(db_cache, acting_user, klass, preloaded_records)
161
- klass = klass.constantize
176
+ klass = klass.constantize # TODO: Security
162
177
  @db_cache = db_cache
163
178
  @acting_user = acting_user
164
179
  @vector = @absolute_vector = [klass]
165
- @ar_object = klass
166
- @record_chain = []
180
+ @value = klass
167
181
  @parent = nil
168
182
  @root = self
169
183
  @preloaded_records = preloaded_records
170
184
  db_cache << self
171
185
  end
172
186
 
187
+ # SECURITY - UNSAFE
173
188
  def apply_method_to_cache(method)
174
- @db_cache.inject(nil) do | representative, cache_item |
189
+ @db_cache.inject(nil) do |representative, cache_item|
175
190
  if cache_item.vector == vector
176
- if @ar_object.class < ActiveRecord::Base and @ar_object.attributes.has_key?(method)
177
- @ar_object.check_permission_with_acting_user(acting_user, :view_permitted?, method)
191
+ # TODO: Security - this is the wrong check in the wrong place...
192
+ if @value.class < ActiveRecord::Base and @value.attributes.has_key?(method) # TODO: second check is not needed, its built into check_permmissions, check should be does class respond to check_permissions...
193
+ @value.check_permission_with_acting_user(@acting_user, :view_permitted?, method)
178
194
  end
179
195
  if method == "*"
180
196
  cache_item.apply_star || representative
@@ -187,14 +203,17 @@ module ReactiveRecord
187
203
  elsif aggregation = cache_item.aggregation?(method)
188
204
  cache_item.build_new_cache_item(aggregation.mapping.collect { |attribute, accessor| cache_item.value[attribute] }, method, method)
189
205
  else
190
- begin
191
- cache_item.build_new_cache_item(cache_item.value.send(*method), method, method)
192
- rescue Exception => e
193
- if cache_item.value and cache_item.value != []
194
- ReactiveRecord::Pry::rescued(e)
195
- raise e, "ReactiveRecord exception caught when applying #{method} to db object #{cache_item.value}: #{e}", e.backtrace
196
- else
197
- representative
206
+ if !cache_item.value || cache_item.value.class == Array
207
+ representative
208
+ else
209
+ # TODO: Security. Protect the send(*method). But its complicated.. method can be an attribute, scope, relationship or actual method.
210
+ # Each needs some protection logic.
211
+ begin
212
+ cache_item.build_new_cache_item(cache_item.value.send(*method), method, method)
213
+ rescue Exception => e
214
+ # ReactiveRecord::Pry::rescued(e)
215
+ ::Rails.logger.debug "\033[0;31;1mERROR: HyperModel exception caught when applying #{method} to db object #{cache_item.value}: #{e}\033[0;30;21m"
216
+ raise e, "HyperModel fetching records failed, exception caught when applying #{method} to db object #{cache_item.value}: #{e}", e.backtrace
198
217
  end
199
218
  end
200
219
  end
@@ -204,24 +223,26 @@ module ReactiveRecord
204
223
  end
205
224
  end
206
225
 
226
+ # SECURITY - SAFE
207
227
  def aggregation?(method)
208
- if method.is_a?(String) && value.class.respond_to?(:reflect_on_aggregation)
209
- aggregation = value.class.reflect_on_aggregation(method.to_sym)
210
- if aggregation && !(aggregation.klass < ActiveRecord::Base) && value.send(method)
228
+ if method.is_a?(String) && @value.class.respond_to?(:reflect_on_aggregation)
229
+ aggregation = @value.class.reflect_on_aggregation(method.to_sym)
230
+ if aggregation && !(aggregation.klass < ActiveRecord::Base) && @value.send(method)
211
231
  aggregation
212
232
  end
213
233
  end
214
234
  end
215
235
 
236
+ # SECURITY - SAFE
216
237
  def apply_star
217
- if value && value.length > 0
238
+ if @value && @value.length > 0
218
239
  i = -1
219
- value.inject(nil) do | representative, ar_object |
240
+ @value.inject(nil) do |representative, current_value|
220
241
  i += 1
221
- if preloaded_value = @preloaded_records[absolute_vector + ["*#{i}"]]
242
+ if preloaded_value = @preloaded_records[@absolute_vector + ["*#{i}"]]
222
243
  build_new_cache_item(preloaded_value, "*", "*#{i}")
223
244
  else
224
- build_new_cache_item(ar_object, "*", "*#{i}")
245
+ build_new_cache_item(current_value, "*", "*#{i}")
225
246
  end
226
247
  end
227
248
  else
@@ -229,12 +250,14 @@ module ReactiveRecord
229
250
  end
230
251
  end
231
252
 
232
- def build_new_cache_item(new_ar_object, method, absolute_method)
253
+ # SECURITY - SAFE
254
+ # TODO replace instance_eval with a method like clone_new_child(....)
255
+ def build_new_cache_item(new_value, method, absolute_method)
233
256
  new_parent = self
234
257
  self.clone.instance_eval do
235
258
  @vector = @vector + [method] # don't push it on since you need a new vector!
236
259
  @absolute_vector = @absolute_vector + [absolute_method]
237
- @ar_object = new_ar_object
260
+ @value = new_value
238
261
  @db_cache << self
239
262
  @parent = new_parent
240
263
  @root = new_parent.root
@@ -242,6 +265,7 @@ module ReactiveRecord
242
265
  end
243
266
  end
244
267
 
268
+ # SECURITY - SAFE
245
269
  def apply_method(method)
246
270
  if method.is_a? Array and method.first == "find_by_id"
247
271
  method[0] = "find"
@@ -252,6 +276,7 @@ module ReactiveRecord
252
276
  @db_cache.detect { |cached_item| cached_item.vector == new_vector} || apply_method_to_cache(method)
253
277
  end
254
278
 
279
+ # SECURITY - SAFE
255
280
  def jsonize(method)
256
281
  # sadly standard json converts {[:foo, nil] => 123} to {"['foo', nil]": 123}
257
282
  # luckily [:foo, nil] does convert correctly
@@ -261,20 +286,20 @@ module ReactiveRecord
261
286
 
262
287
  def as_hash(children = nil)
263
288
  unless children
264
- return {} if @ar_object.is_a?(Class) and (@ar_object < ActiveRecord::Base)
265
- children = [@ar_object.is_a?(BigDecimal) ? @ar_object.to_f : @ar_object]
289
+ return {} if @value.is_a?(Class) and (@value < ActiveRecord::Base)
290
+ children = [@value.is_a?(BigDecimal) ? @value.to_f : @value]
266
291
  end
267
292
  if @parent
268
293
  if method == "*"
269
- if @ar_object.is_a? Array # this happens when a scope is empty there is test case, but
294
+ if @value.is_a? Array # this happens when a scope is empty there is test case, but
270
295
  @parent.as_hash({}) # does it work for all edge cases?
271
296
  else
272
- @parent.as_hash({@ar_object.id => children})
297
+ @parent.as_hash({@value.id => children})
273
298
  end
274
- elsif @ar_object.class < ActiveRecord::Base and children.is_a? Hash
299
+ elsif @value.class < ActiveRecord::Base and children.is_a? Hash
275
300
  @parent.as_hash({jsonize(method) => children.merge({
276
- :id => (method.is_a?(Array) && method.first == "new") ? [nil] : [@ar_object.id],
277
- @ar_object.class.inheritance_column => [@ar_object[@ar_object.class.inheritance_column]],
301
+ :id => (method.is_a?(Array) && method.first == "new") ? [nil] : [@value.id],
302
+ @value.class.inheritance_column => [@value[@value.class.inheritance_column]],
278
303
  })})
279
304
  elsif method == "*all"
280
305
  @parent.as_hash({jsonize(method) => children.first})
@@ -286,10 +311,40 @@ module ReactiveRecord
286
311
  end
287
312
  end
288
313
 
314
+ def to_json
315
+ @value.to_json
316
+ end
317
+
289
318
  end
290
319
 
291
320
  end
292
321
 
322
+ =begin
323
+ tree is a hash, target is the object that will be filled in with the data hanging off the key.
324
+ first time around target == nil, so for each key, value pair we do this: load_from_json(value, Object.const_get(JSON.parse(key)))
325
+ keys:
326
+ ':*all': target.replace tree["*all"].collect { |id| target.proxy_association.klass.find(id) }
327
+ Example: {'*all': [1, 7, 19, 23]} target is a collection and will now have 4 records: 1, 7, 19, 23
328
+
329
+ 'id': if value is an array then target.id = value.first
330
+ Example: {'id': [17]} Example the target is a record, and its id is now set to 17
331
+
332
+ '*count': target.set_count_state(value.first) note: set_count_state sets the count of a collection and updates the associated state variable
333
+ integer-like-string-or-number: target.push_and_update_belongs_to(key) note: collection will be a has_many association, so we are doing a target << find(key), and updating both ends of the relationship
334
+ [:new, nnn] do a ReactiveRecord::Base.find_by_object_id(target.base_class, method[1]) and that becomes the new target, with val being passed allow_change
335
+ [...] and current target is NOT an ActiveRecord Model (??? a collection ???) then send key to target, and that becomes new target
336
+ but note if value is an array then the scope returned nil, so we destroy the bogus record, and set new target back to nil
337
+ new_target.destroy and new_target = nil if value.is_a? Array
338
+ [...] and current target IS AN ActiveRecord Model (not a collection) then target.backing_record.update_attribute([method], target.backing_record.convert(method, value.first))
339
+ aggregation:
340
+ target.class.respond_to?(:reflect_on_aggregation) and aggregation = target.class.reflect_on_aggregation(method) and !(aggregation.klass < ActiveRecord::Base)
341
+ target.send "#{method}=", aggregation.deserialize(value.first)
342
+ other-string-method-name:
343
+ if value is a an array then value.first is the new value and we do target.send "{key}=", value.first
344
+ if value is a hash
345
+ =end
346
+
347
+
293
348
  def self.load_from_json(tree, target = nil)
294
349
  ignore_all = nil
295
350
 
@@ -319,7 +374,7 @@ module ReactiveRecord
319
374
  if method[0] == "new"
320
375
  new_target = ReactiveRecord::Base.find_by_object_id(target.base_class, method[1])
321
376
  elsif !(target.class < ActiveRecord::Base)
322
- new_target = target.send *method
377
+ new_target = target.send(*method)
323
378
  # value is an array if scope returns nil, so we destroy the bogus record
324
379
  new_target.destroy and new_target = nil if value.is_a? Array
325
380
  else
@@ -335,7 +390,7 @@ module ReactiveRecord
335
390
  new_target = association.klass.find(value[:id].first)
336
391
  target.send "#{method}=", new_target
337
392
  elsif !(target.class < ActiveRecord::Base)
338
- new_target = target.send *method
393
+ new_target = target.send(*method)
339
394
  # value is an array if scope returns nil, so we destroy the bogus record
340
395
  new_target.destroy and new_target = nil if value.is_a? Array
341
396
  else