cable_ready 5.0.0.pre3 → 5.0.0.pre7

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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/Gemfile.lock +7 -7
  4. data/README.md +14 -7
  5. data/app/helpers/cable_ready_helper.rb +15 -2
  6. data/app/models/concerns/cable_ready/updatable/collection_updatable_callbacks.rb +19 -0
  7. data/app/models/concerns/cable_ready/updatable/collections_registry.rb +33 -0
  8. data/app/models/concerns/cable_ready/updatable/model_updatable_callbacks.rb +28 -0
  9. data/app/models/concerns/cable_ready/updatable.rb +98 -0
  10. data/app/models/concerns/extend_has_many.rb +13 -0
  11. data/cable_ready.gemspec +1 -0
  12. data/lib/cable_ready/channels.rb +1 -1
  13. data/lib/cable_ready/compoundable.rb +1 -1
  14. data/lib/cable_ready/version.rb +1 -1
  15. data/lib/generators/cable_ready/{stream_from_generator.rb → helpers_generator.rb} +1 -1
  16. data/package.json +2 -3
  17. data/test/dummy/app/channels/application_cable/channel.rb +4 -0
  18. data/test/dummy/app/channels/application_cable/connection.rb +4 -0
  19. data/test/dummy/app/controllers/application_controller.rb +2 -0
  20. data/test/dummy/app/helpers/application_helper.rb +2 -0
  21. data/test/dummy/app/jobs/application_job.rb +7 -0
  22. data/test/dummy/app/mailers/application_mailer.rb +4 -0
  23. data/test/dummy/app/models/application_record.rb +3 -0
  24. data/test/dummy/app/models/global_idable_entity.rb +16 -0
  25. data/test/dummy/app/models/post.rb +4 -0
  26. data/test/dummy/app/models/section.rb +6 -0
  27. data/test/dummy/app/models/team.rb +6 -0
  28. data/test/dummy/app/models/topic.rb +4 -0
  29. data/test/dummy/app/models/user.rb +7 -0
  30. data/test/dummy/config/application.rb +22 -0
  31. data/test/dummy/config/boot.rb +5 -0
  32. data/test/dummy/config/environment.rb +5 -0
  33. data/test/dummy/config/environments/development.rb +76 -0
  34. data/test/dummy/config/environments/production.rb +120 -0
  35. data/test/dummy/config/environments/test.rb +59 -0
  36. data/test/dummy/config/initializers/application_controller_renderer.rb +8 -0
  37. data/test/dummy/config/initializers/assets.rb +12 -0
  38. data/test/dummy/config/initializers/backtrace_silencers.rb +8 -0
  39. data/test/dummy/config/initializers/cable_ready.rb +18 -0
  40. data/test/dummy/config/initializers/content_security_policy.rb +28 -0
  41. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  42. data/test/dummy/config/initializers/filter_parameter_logging.rb +6 -0
  43. data/test/dummy/config/initializers/inflections.rb +16 -0
  44. data/test/dummy/config/initializers/mime_types.rb +4 -0
  45. data/test/dummy/config/initializers/permissions_policy.rb +11 -0
  46. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  47. data/test/dummy/config/puma.rb +43 -0
  48. data/test/dummy/config/routes.rb +3 -0
  49. data/test/dummy/db/migrate/20210902154139_create_users.rb +9 -0
  50. data/test/dummy/db/migrate/20210902154153_create_posts.rb +10 -0
  51. data/test/dummy/db/migrate/20210904081930_create_topics.rb +9 -0
  52. data/test/dummy/db/migrate/20210904093607_create_sections.rb +9 -0
  53. data/test/dummy/db/migrate/20210913191735_create_teams.rb +8 -0
  54. data/test/dummy/db/migrate/20210913191759_add_team_reference_to_users.rb +5 -0
  55. data/test/dummy/db/schema.rb +49 -0
  56. data/test/dummy/test/models/post_test.rb +7 -0
  57. data/test/dummy/test/models/section_test.rb +7 -0
  58. data/test/dummy/test/models/team_test.rb +7 -0
  59. data/test/dummy/test/models/topic_test.rb +7 -0
  60. data/test/dummy/test/models/user_test.rb +7 -0
  61. data/test/lib/cable_ready/compoundable_test.rb +26 -0
  62. data/test/lib/cable_ready/helper_test.rb +25 -0
  63. data/test/lib/cable_ready/identifiable_test.rb +0 -6
  64. data/test/lib/cable_ready/updatable_test.rb +112 -0
  65. data/test/test_helper.rb +4 -1
  66. data/yarn.lock +1 -1
  67. metadata +116 -3
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class CableReady::UpdatableTest < ActiveSupport::TestCase
6
+ test "includes the module automatically in associated models" do
7
+ user = User.create(name: "John Doe")
8
+
9
+ post = user.posts.build
10
+ assert post.class < CableReady::Updatable
11
+ end
12
+
13
+ test "updates the collection when an item is added" do
14
+ mock_server = mock("server")
15
+ mock_server.expects(:broadcast).with(User, {}).once
16
+ mock_server.expects(:broadcast).with("gid://dummy/User/1:posts", {}).once
17
+
18
+ ActionCable.stubs(:server).returns(mock_server)
19
+ user = User.create(name: "John Doe")
20
+
21
+ user.posts.create(title: "Lorem")
22
+ end
23
+
24
+ test "updates the collection when an item is destroyed" do
25
+ user = User.create(name: "John Doe")
26
+ post = user.posts.create(title: "Lorem")
27
+
28
+ mock_server = mock("server")
29
+ mock_server.expects(:broadcast).with("gid://dummy/User/1:posts", {}).once
30
+
31
+ ActionCable.stubs(:server).returns(mock_server)
32
+
33
+ post.destroy
34
+ end
35
+
36
+ test "updates the collection when an item is updated" do
37
+ user = User.create(name: "John Doe")
38
+ post = user.posts.create(title: "Lorem")
39
+
40
+ mock_server = mock("server")
41
+ mock_server.expects(:broadcast).with("gid://dummy/User/1:posts", {}).once
42
+
43
+ ActionCable.stubs(:server).returns(mock_server)
44
+
45
+ post.update(title: "Ipsum")
46
+ end
47
+
48
+ test "updates the model when it is updated" do
49
+ user = User.create(name: "John Doe")
50
+
51
+ mock_server = mock("server")
52
+ mock_server.expects(:broadcast).with(User, {}).once
53
+ mock_server.expects(:broadcast).with(user.to_global_id, {}).once
54
+
55
+ ActionCable.stubs(:server).returns(mock_server)
56
+
57
+ user.update(name: "Jane Doe")
58
+ end
59
+
60
+ test "updates the parent when it is touched" do
61
+ team = Team.create
62
+ user = team.users.create(name: "Ada Lovelace")
63
+
64
+ mock_server = mock("server")
65
+ mock_server.expects(:broadcast).with(User, {}).once
66
+ mock_server.expects(:broadcast).with(user.to_global_id, {}).once
67
+ mock_server.expects(:broadcast).with("gid://dummy/Team/1:users", {}).once
68
+ mock_server.expects(:broadcast).with(Team, {}).once
69
+ mock_server.expects(:broadcast).with(team.to_global_id, {}).once
70
+
71
+ ActionCable.stubs(:server).returns(mock_server)
72
+
73
+ user.update(name: "Jane Doe")
74
+ end
75
+
76
+ test "respects :on to specify persistence methods" do
77
+ mock_server = mock("server")
78
+
79
+ ActionCable.stubs(:server).returns(mock_server)
80
+
81
+ mock_server.expects(:broadcast).with(Topic, {}).once
82
+ topic = Topic.create(title: "Reactive Rails with Hotwire")
83
+
84
+ mock_server.expects(:broadcast).with(topic.to_global_id, {}).never
85
+ topic.update(title: "Reactive Rails with CableReady")
86
+ end
87
+
88
+ test "respects :if on enable_updates" do
89
+ mock_server = mock("server")
90
+
91
+ ActionCable.stubs(:server).returns(mock_server)
92
+
93
+ section = Section.create
94
+ section.updates_enabled = true
95
+
96
+ mock_server.expects(:broadcast).with(Section, {}).once
97
+ mock_server.expects(:broadcast).with(section.to_global_id, {}).once
98
+ section.update(title: "First Section")
99
+ end
100
+
101
+ test "updates any GlobalID-able entity" do
102
+ entity = GlobalIdableEntity.new
103
+
104
+ mock_server = mock("server")
105
+ mock_server.expects(:broadcast).with(GlobalIdableEntity, {}).once
106
+ mock_server.expects(:broadcast).with(entity.to_global_id, {}).once
107
+
108
+ ActionCable.stubs(:server).returns(mock_server)
109
+
110
+ entity.fake_update
111
+ end
112
+ end
data/test/test_helper.rb CHANGED
@@ -3,10 +3,13 @@
3
3
  # Configure Rails Environment
4
4
  ENV["RAILS_ENV"] = "test"
5
5
 
6
+ require_relative "../test/dummy/config/environment"
7
+ ActiveRecord::Migrator.migrations_paths = [File.expand_path("../test/dummy/db/migrate", __dir__)]
8
+
6
9
  require "mocha"
7
10
  require "rails"
8
- require "rails/generators"
9
11
  require "rails/test_help"
12
+ require "rails/generators"
10
13
  require "minitest/mock"
11
14
  require "mocha/minitest"
12
15
  require "pry"
data/yarn.lock CHANGED
@@ -1825,7 +1825,7 @@ prelude-ls@~1.1.2:
1825
1825
  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
1826
1826
  integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
1827
1827
 
1828
- prettier-standard@^16.1.0:
1828
+ prettier-standard@^16.4.1:
1829
1829
  version "16.4.1"
1830
1830
  resolved "https://registry.yarnpkg.com/prettier-standard/-/prettier-standard-16.4.1.tgz#964e7e3f3029427ab8e01bdffb72dea9a87f62c8"
1831
1831
  integrity sha512-IW3Sct4GOdqc1s4+1HZjH2HegzLZQ6mDMl2xz6i6KHCac7kCM+obLbvm2e0zp8PytKkLQCdOpj0cWWa48Ruetw==
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cable_ready
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0.pre3
4
+ version: 5.0.0.pre7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Hopkins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-22 00:00:00.000000000 Z
11
+ date: 2021-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: sqlite3
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  description:
140
154
  email:
141
155
  - natehop@gmail.com
@@ -154,6 +168,11 @@ files:
154
168
  - app/channels/cable_ready/stream.rb
155
169
  - app/helpers/cable_ready_helper.rb
156
170
  - app/jobs/cable_ready_broadcast_job.rb
171
+ - app/models/concerns/cable_ready/updatable.rb
172
+ - app/models/concerns/cable_ready/updatable/collection_updatable_callbacks.rb
173
+ - app/models/concerns/cable_ready/updatable/collections_registry.rb
174
+ - app/models/concerns/cable_ready/updatable/model_updatable_callbacks.rb
175
+ - app/models/concerns/extend_has_many.rb
157
176
  - bin/console
158
177
  - bin/loc
159
178
  - bin/setup
@@ -172,13 +191,60 @@ files:
172
191
  - lib/cable_ready/stream_identifier.rb
173
192
  - lib/cable_ready/version.rb
174
193
  - lib/generators/cable_ready/channel_generator.rb
194
+ - lib/generators/cable_ready/helpers_generator.rb
175
195
  - lib/generators/cable_ready/initializer_generator.rb
176
- - lib/generators/cable_ready/stream_from_generator.rb
177
196
  - lib/generators/cable_ready/templates/config/initializers/cable_ready.rb
178
197
  - package.json
198
+ - test/dummy/app/channels/application_cable/channel.rb
199
+ - test/dummy/app/channels/application_cable/connection.rb
200
+ - test/dummy/app/controllers/application_controller.rb
201
+ - test/dummy/app/helpers/application_helper.rb
202
+ - test/dummy/app/jobs/application_job.rb
203
+ - test/dummy/app/mailers/application_mailer.rb
204
+ - test/dummy/app/models/application_record.rb
205
+ - test/dummy/app/models/global_idable_entity.rb
206
+ - test/dummy/app/models/post.rb
207
+ - test/dummy/app/models/section.rb
208
+ - test/dummy/app/models/team.rb
209
+ - test/dummy/app/models/topic.rb
210
+ - test/dummy/app/models/user.rb
211
+ - test/dummy/config/application.rb
212
+ - test/dummy/config/boot.rb
213
+ - test/dummy/config/environment.rb
214
+ - test/dummy/config/environments/development.rb
215
+ - test/dummy/config/environments/production.rb
216
+ - test/dummy/config/environments/test.rb
217
+ - test/dummy/config/initializers/application_controller_renderer.rb
218
+ - test/dummy/config/initializers/assets.rb
219
+ - test/dummy/config/initializers/backtrace_silencers.rb
220
+ - test/dummy/config/initializers/cable_ready.rb
221
+ - test/dummy/config/initializers/content_security_policy.rb
222
+ - test/dummy/config/initializers/cookies_serializer.rb
223
+ - test/dummy/config/initializers/filter_parameter_logging.rb
224
+ - test/dummy/config/initializers/inflections.rb
225
+ - test/dummy/config/initializers/mime_types.rb
226
+ - test/dummy/config/initializers/permissions_policy.rb
227
+ - test/dummy/config/initializers/wrap_parameters.rb
228
+ - test/dummy/config/puma.rb
229
+ - test/dummy/config/routes.rb
230
+ - test/dummy/db/migrate/20210902154139_create_users.rb
231
+ - test/dummy/db/migrate/20210902154153_create_posts.rb
232
+ - test/dummy/db/migrate/20210904081930_create_topics.rb
233
+ - test/dummy/db/migrate/20210904093607_create_sections.rb
234
+ - test/dummy/db/migrate/20210913191735_create_teams.rb
235
+ - test/dummy/db/migrate/20210913191759_add_team_reference_to_users.rb
236
+ - test/dummy/db/schema.rb
237
+ - test/dummy/test/models/post_test.rb
238
+ - test/dummy/test/models/section_test.rb
239
+ - test/dummy/test/models/team_test.rb
240
+ - test/dummy/test/models/topic_test.rb
241
+ - test/dummy/test/models/user_test.rb
179
242
  - test/lib/cable_ready/cable_car_test.rb
243
+ - test/lib/cable_ready/compoundable_test.rb
244
+ - test/lib/cable_ready/helper_test.rb
180
245
  - test/lib/cable_ready/identifiable_test.rb
181
246
  - test/lib/cable_ready/operation_builder_test.rb
247
+ - test/lib/cable_ready/updatable_test.rb
182
248
  - test/lib/generators/cable_ready/channel_generator_test.rb
183
249
  - test/support/generator_test_helpers.rb
184
250
  - test/test_helper.rb
@@ -207,9 +273,56 @@ signing_key:
207
273
  specification_version: 4
208
274
  summary: Out-of-Band Server Triggered DOM Operations
209
275
  test_files:
276
+ - test/dummy/app/channels/application_cable/channel.rb
277
+ - test/dummy/app/channels/application_cable/connection.rb
278
+ - test/dummy/app/controllers/application_controller.rb
279
+ - test/dummy/app/helpers/application_helper.rb
280
+ - test/dummy/app/jobs/application_job.rb
281
+ - test/dummy/app/mailers/application_mailer.rb
282
+ - test/dummy/app/models/application_record.rb
283
+ - test/dummy/app/models/global_idable_entity.rb
284
+ - test/dummy/app/models/post.rb
285
+ - test/dummy/app/models/section.rb
286
+ - test/dummy/app/models/team.rb
287
+ - test/dummy/app/models/topic.rb
288
+ - test/dummy/app/models/user.rb
289
+ - test/dummy/config/application.rb
290
+ - test/dummy/config/boot.rb
291
+ - test/dummy/config/environment.rb
292
+ - test/dummy/config/environments/development.rb
293
+ - test/dummy/config/environments/production.rb
294
+ - test/dummy/config/environments/test.rb
295
+ - test/dummy/config/initializers/application_controller_renderer.rb
296
+ - test/dummy/config/initializers/assets.rb
297
+ - test/dummy/config/initializers/backtrace_silencers.rb
298
+ - test/dummy/config/initializers/cable_ready.rb
299
+ - test/dummy/config/initializers/content_security_policy.rb
300
+ - test/dummy/config/initializers/cookies_serializer.rb
301
+ - test/dummy/config/initializers/filter_parameter_logging.rb
302
+ - test/dummy/config/initializers/inflections.rb
303
+ - test/dummy/config/initializers/mime_types.rb
304
+ - test/dummy/config/initializers/permissions_policy.rb
305
+ - test/dummy/config/initializers/wrap_parameters.rb
306
+ - test/dummy/config/puma.rb
307
+ - test/dummy/config/routes.rb
308
+ - test/dummy/db/migrate/20210902154139_create_users.rb
309
+ - test/dummy/db/migrate/20210902154153_create_posts.rb
310
+ - test/dummy/db/migrate/20210904081930_create_topics.rb
311
+ - test/dummy/db/migrate/20210904093607_create_sections.rb
312
+ - test/dummy/db/migrate/20210913191735_create_teams.rb
313
+ - test/dummy/db/migrate/20210913191759_add_team_reference_to_users.rb
314
+ - test/dummy/db/schema.rb
315
+ - test/dummy/test/models/post_test.rb
316
+ - test/dummy/test/models/section_test.rb
317
+ - test/dummy/test/models/team_test.rb
318
+ - test/dummy/test/models/topic_test.rb
319
+ - test/dummy/test/models/user_test.rb
210
320
  - test/lib/cable_ready/cable_car_test.rb
321
+ - test/lib/cable_ready/compoundable_test.rb
322
+ - test/lib/cable_ready/helper_test.rb
211
323
  - test/lib/cable_ready/identifiable_test.rb
212
324
  - test/lib/cable_ready/operation_builder_test.rb
325
+ - test/lib/cable_ready/updatable_test.rb
213
326
  - test/lib/generators/cable_ready/channel_generator_test.rb
214
327
  - test/support/generator_test_helpers.rb
215
328
  - test/test_helper.rb