cable_ready 5.0.0.pre1 → 5.0.0.pre5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +45 -0
  3. data/Gemfile.lock +106 -98
  4. data/README.md +6 -2
  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/lib/cable_ready/channels.rb +1 -1
  12. data/lib/cable_ready/compoundable.rb +1 -1
  13. data/lib/cable_ready/config.rb +2 -0
  14. data/lib/cable_ready/identifiable.rb +13 -2
  15. data/lib/cable_ready/operation_builder.rb +25 -14
  16. data/lib/cable_ready/sanity_checker.rb +50 -50
  17. data/lib/cable_ready/version.rb +1 -1
  18. data/lib/cable_ready.rb +3 -0
  19. data/lib/generators/cable_ready/{stream_from_generator.rb → helpers_generator.rb} +1 -1
  20. data/test/dummy/app/channels/application_cable/channel.rb +4 -0
  21. data/test/dummy/app/channels/application_cable/connection.rb +4 -0
  22. data/test/dummy/app/controllers/application_controller.rb +2 -0
  23. data/test/dummy/app/helpers/application_helper.rb +2 -0
  24. data/test/dummy/app/jobs/application_job.rb +7 -0
  25. data/test/dummy/app/mailers/application_mailer.rb +4 -0
  26. data/test/dummy/app/models/application_record.rb +3 -0
  27. data/test/dummy/app/models/global_idable_entity.rb +16 -0
  28. data/test/dummy/app/models/post.rb +4 -0
  29. data/test/dummy/app/models/section.rb +6 -0
  30. data/test/dummy/app/models/team.rb +6 -0
  31. data/test/dummy/app/models/topic.rb +4 -0
  32. data/test/dummy/app/models/user.rb +7 -0
  33. data/test/dummy/config/application.rb +22 -0
  34. data/test/dummy/config/boot.rb +5 -0
  35. data/test/dummy/config/environment.rb +5 -0
  36. data/test/dummy/config/environments/development.rb +76 -0
  37. data/test/dummy/config/environments/production.rb +120 -0
  38. data/test/dummy/config/environments/test.rb +59 -0
  39. data/test/dummy/config/initializers/application_controller_renderer.rb +8 -0
  40. data/test/dummy/config/initializers/assets.rb +12 -0
  41. data/test/dummy/config/initializers/backtrace_silencers.rb +8 -0
  42. data/test/dummy/config/initializers/cable_ready.rb +18 -0
  43. data/test/dummy/config/initializers/content_security_policy.rb +28 -0
  44. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  45. data/test/dummy/config/initializers/filter_parameter_logging.rb +6 -0
  46. data/test/dummy/config/initializers/inflections.rb +16 -0
  47. data/test/dummy/config/initializers/mime_types.rb +4 -0
  48. data/test/dummy/config/initializers/permissions_policy.rb +11 -0
  49. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  50. data/test/dummy/config/puma.rb +43 -0
  51. data/test/dummy/config/routes.rb +3 -0
  52. data/test/dummy/db/migrate/20210902154139_create_users.rb +9 -0
  53. data/test/dummy/db/migrate/20210902154153_create_posts.rb +10 -0
  54. data/test/dummy/db/migrate/20210904081930_create_topics.rb +9 -0
  55. data/test/dummy/db/migrate/20210904093607_create_sections.rb +9 -0
  56. data/test/dummy/db/migrate/20210913191735_create_teams.rb +8 -0
  57. data/test/dummy/db/migrate/20210913191759_add_team_reference_to_users.rb +5 -0
  58. data/test/dummy/db/schema.rb +49 -0
  59. data/test/dummy/test/models/post_test.rb +7 -0
  60. data/test/dummy/test/models/section_test.rb +7 -0
  61. data/test/dummy/test/models/team_test.rb +7 -0
  62. data/test/dummy/test/models/topic_test.rb +7 -0
  63. data/test/dummy/test/models/user_test.rb +7 -0
  64. data/test/lib/cable_ready/cable_car_test.rb +25 -3
  65. data/test/lib/cable_ready/compoundable_test.rb +26 -0
  66. data/test/lib/cable_ready/helper_test.rb +25 -0
  67. data/test/lib/cable_ready/identifiable_test.rb +0 -6
  68. data/test/lib/cable_ready/operation_builder_test.rb +89 -28
  69. data/test/lib/cable_ready/updatable_test.rb +112 -0
  70. data/test/test_helper.rb +4 -1
  71. metadata +116 -3
@@ -3,6 +3,29 @@
3
3
  require "test_helper"
4
4
  require_relative "../../../lib/cable_ready"
5
5
 
6
+ class Death
7
+ def to_html
8
+ "I rock"
9
+ end
10
+
11
+ def to_dom_id
12
+ "death"
13
+ end
14
+
15
+ def to_operation_options
16
+ [:html, :dom_id, :spaz]
17
+ end
18
+ end
19
+
20
+ class Life
21
+ def to_operation_options
22
+ {
23
+ html: "You go, girl",
24
+ dom_id: "life"
25
+ }
26
+ end
27
+ end
28
+
6
29
  class CableReady::OperationBuilderTest < ActiveSupport::TestCase
7
30
  setup do
8
31
  @operation_builder = CableReady::OperationBuilder.new("test")
@@ -32,42 +55,42 @@ class CableReady::OperationBuilderTest < ActiveSupport::TestCase
32
55
 
33
56
  operations = @operation_builder.instance_variable_get(:@enqueued_operations)
34
57
 
35
- assert_equal 1, operations["foobar"].size
36
- assert_equal({"name" => "passed_option"}, operations["foobar"].first)
58
+ assert_equal 1, operations.size
59
+ assert_equal({"name" => "passed_option", "operation" => "foobar"}, operations.first)
37
60
  end
38
61
 
39
62
  test "should json-ify operations" do
40
63
  @operation_builder.add_operation_method("foobar")
41
64
  @operation_builder.foobar({name: "passed_option"})
42
- assert_equal("{\"foobar\":[{\"name\":\"passed_option\"}]}", @operation_builder.to_json)
65
+ assert_equal("[{\"name\":\"passed_option\",\"operation\":\"foobar\"}]", @operation_builder.to_json)
43
66
  end
44
67
 
45
68
  test "should apply! many operations" do
46
- @operation_builder.apply!(foobar: [{name: "passed_option"}])
69
+ @operation_builder.apply!({name: "passed_option"})
47
70
 
48
71
  operations = @operation_builder.instance_variable_get(:@enqueued_operations)
49
- assert_equal 1, operations["foobar"].size
50
- assert_equal({"name" => "passed_option"}, operations["foobar"].first)
72
+ assert_equal 1, operations.size
73
+ assert_equal({"name" => "passed_option"}, operations.first)
51
74
  end
52
75
 
53
76
  test "should apply! many operations from a string" do
54
- @operation_builder.apply!(JSON.generate({foobar: [{name: "passed_option"}]}))
77
+ @operation_builder.apply!(JSON.generate({name: "passed_option"}))
55
78
 
56
79
  operations = @operation_builder.instance_variable_get(:@enqueued_operations)
57
- assert_equal 1, operations["foobar"].size
58
- assert_equal({"name" => "passed_option"}, operations["foobar"].first)
80
+ assert_equal 1, operations.size
81
+ assert_equal({"name" => "passed_option"}, operations.first)
59
82
  end
60
83
 
61
84
  test "operations payload should omit empty operations" do
62
85
  @operation_builder.add_operation_method("foobar")
63
86
  payload = @operation_builder.operations_payload
64
- assert_equal({}, payload)
87
+ assert_equal([], payload)
65
88
  end
66
89
 
67
90
  test "operations payload should camelize keys" do
68
91
  @operation_builder.add_operation_method("foo_bar")
69
92
  @operation_builder.foo_bar({beep_boop: "passed_option"})
70
- assert_equal({"fooBar" => [{"beepBoop" => "passed_option"}]}, @operation_builder.operations_payload)
93
+ assert_equal([{"operation" => "fooBar", "beepBoop" => "passed_option"}], @operation_builder.operations_payload)
71
94
  end
72
95
 
73
96
  test "should take first argument as selector" do
@@ -75,9 +98,7 @@ class CableReady::OperationBuilderTest < ActiveSupport::TestCase
75
98
 
76
99
  @operation_builder.inner_html("#smelly", html: "<span>I rock</span>")
77
100
 
78
- operations = {
79
- "innerHtml" => [{"html" => "<span>I rock</span>", "selector" => "#smelly"}]
80
- }
101
+ operations = [{"operation" => "innerHtml", "html" => "<span>I rock</span>", "selector" => "#smelly"}]
81
102
 
82
103
  assert_equal(operations, @operation_builder.operations_payload)
83
104
  end
@@ -88,10 +109,10 @@ class CableReady::OperationBuilderTest < ActiveSupport::TestCase
88
109
 
89
110
  @operation_builder.set_focus("#smelly").inner_html(html: "<span>I rock</span>")
90
111
 
91
- operations = {
92
- "setFocus" => [{"selector" => "#smelly"}],
93
- "innerHtml" => [{"html" => "<span>I rock</span>", "selector" => "#smelly"}]
94
- }
112
+ operations = [
113
+ {"operation" => "setFocus", "selector" => "#smelly"},
114
+ {"operation" => "innerHtml", "html" => "<span>I rock</span>", "selector" => "#smelly"}
115
+ ]
95
116
 
96
117
  assert_equal(operations, @operation_builder.operations_payload)
97
118
  end
@@ -104,7 +125,7 @@ class CableReady::OperationBuilderTest < ActiveSupport::TestCase
104
125
 
105
126
  @operation_builder.inner_html(html: "<span>winning</span>")
106
127
 
107
- assert_equal({"innerHtml" => [{"html" => "<span>winning</span>"}]}, @operation_builder.operations_payload)
128
+ assert_equal([{"operation" => "innerHtml", "html" => "<span>winning</span>"}], @operation_builder.operations_payload)
108
129
  end
109
130
 
110
131
  test "should use previous_selector if present and should use `selector` if explicitly provided" do
@@ -113,15 +134,55 @@ class CableReady::OperationBuilderTest < ActiveSupport::TestCase
113
134
 
114
135
  @operation_builder.set_focus("#smelly").inner_html(html: "<span>I rock</span>").inner_html(html: "<span>I rock too</span>", selector: "#smelly2")
115
136
 
116
- operations = {
117
- "setFocus" => [
118
- {"selector" => "#smelly"}
119
- ],
120
- "innerHtml" => [
121
- {"html" => "<span>I rock</span>", "selector" => "#smelly"},
122
- {"html" => "<span>I rock too</span>", "selector" => "#smelly2"}
123
- ]
124
- }
137
+ operations = [
138
+ {"operation" => "setFocus", "selector" => "#smelly"},
139
+ {"operation" => "innerHtml", "html" => "<span>I rock</span>", "selector" => "#smelly"},
140
+ {"operation" => "innerHtml", "html" => "<span>I rock too</span>", "selector" => "#smelly2"}
141
+ ]
142
+
143
+ assert_equal(operations, @operation_builder.operations_payload)
144
+ end
145
+
146
+ test "should pull html option from Death object" do
147
+ @operation_builder.add_operation_method("inner_html")
148
+ death = Death.new
149
+
150
+ @operation_builder.inner_html(html: death)
151
+
152
+ operations = [{"operation" => "innerHtml", "html" => "I rock"}]
153
+
154
+ assert_equal(operations, @operation_builder.operations_payload)
155
+ end
156
+
157
+ test "should pull html option with selector from Death object" do
158
+ @operation_builder.add_operation_method("inner_html")
159
+ death = Death.new
160
+
161
+ @operation_builder.inner_html(death, html: death)
162
+
163
+ operations = [{"operation" => "innerHtml", "html" => "I rock", "selector" => "#death"}]
164
+
165
+ assert_equal(operations, @operation_builder.operations_payload)
166
+ end
167
+
168
+ test "should pull html and dom_id options from Death object" do
169
+ @operation_builder.add_operation_method("inner_html")
170
+ death = Death.new
171
+
172
+ @operation_builder.inner_html(death)
173
+
174
+ operations = [{"operation" => "innerHtml", "html" => "I rock", "domId" => "death"}]
175
+
176
+ assert_equal(operations, @operation_builder.operations_payload)
177
+ end
178
+
179
+ test "should pull html and dom_id options from Life object" do
180
+ @operation_builder.add_operation_method("inner_html")
181
+ life = Life.new
182
+
183
+ @operation_builder.inner_html(life)
184
+
185
+ operations = [{"operation" => "innerHtml", "html" => "You go, girl", "domId" => "life"}]
125
186
 
126
187
  assert_equal(operations, @operation_builder.operations_payload)
127
188
  end
@@ -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"
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.pre1
4
+ version: 5.0.0.pre5
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-06-02 00:00:00.000000000 Z
11
+ date: 2021-10-07 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
@@ -171,12 +190,59 @@ files:
171
190
  - lib/cable_ready/stream_identifier.rb
172
191
  - lib/cable_ready/version.rb
173
192
  - lib/generators/cable_ready/channel_generator.rb
193
+ - lib/generators/cable_ready/helpers_generator.rb
174
194
  - lib/generators/cable_ready/initializer_generator.rb
175
- - lib/generators/cable_ready/stream_from_generator.rb
176
195
  - lib/generators/cable_ready/templates/config/initializers/cable_ready.rb
196
+ - test/dummy/app/channels/application_cable/channel.rb
197
+ - test/dummy/app/channels/application_cable/connection.rb
198
+ - test/dummy/app/controllers/application_controller.rb
199
+ - test/dummy/app/helpers/application_helper.rb
200
+ - test/dummy/app/jobs/application_job.rb
201
+ - test/dummy/app/mailers/application_mailer.rb
202
+ - test/dummy/app/models/application_record.rb
203
+ - test/dummy/app/models/global_idable_entity.rb
204
+ - test/dummy/app/models/post.rb
205
+ - test/dummy/app/models/section.rb
206
+ - test/dummy/app/models/team.rb
207
+ - test/dummy/app/models/topic.rb
208
+ - test/dummy/app/models/user.rb
209
+ - test/dummy/config/application.rb
210
+ - test/dummy/config/boot.rb
211
+ - test/dummy/config/environment.rb
212
+ - test/dummy/config/environments/development.rb
213
+ - test/dummy/config/environments/production.rb
214
+ - test/dummy/config/environments/test.rb
215
+ - test/dummy/config/initializers/application_controller_renderer.rb
216
+ - test/dummy/config/initializers/assets.rb
217
+ - test/dummy/config/initializers/backtrace_silencers.rb
218
+ - test/dummy/config/initializers/cable_ready.rb
219
+ - test/dummy/config/initializers/content_security_policy.rb
220
+ - test/dummy/config/initializers/cookies_serializer.rb
221
+ - test/dummy/config/initializers/filter_parameter_logging.rb
222
+ - test/dummy/config/initializers/inflections.rb
223
+ - test/dummy/config/initializers/mime_types.rb
224
+ - test/dummy/config/initializers/permissions_policy.rb
225
+ - test/dummy/config/initializers/wrap_parameters.rb
226
+ - test/dummy/config/puma.rb
227
+ - test/dummy/config/routes.rb
228
+ - test/dummy/db/migrate/20210902154139_create_users.rb
229
+ - test/dummy/db/migrate/20210902154153_create_posts.rb
230
+ - test/dummy/db/migrate/20210904081930_create_topics.rb
231
+ - test/dummy/db/migrate/20210904093607_create_sections.rb
232
+ - test/dummy/db/migrate/20210913191735_create_teams.rb
233
+ - test/dummy/db/migrate/20210913191759_add_team_reference_to_users.rb
234
+ - test/dummy/db/schema.rb
235
+ - test/dummy/test/models/post_test.rb
236
+ - test/dummy/test/models/section_test.rb
237
+ - test/dummy/test/models/team_test.rb
238
+ - test/dummy/test/models/topic_test.rb
239
+ - test/dummy/test/models/user_test.rb
177
240
  - test/lib/cable_ready/cable_car_test.rb
241
+ - test/lib/cable_ready/compoundable_test.rb
242
+ - test/lib/cable_ready/helper_test.rb
178
243
  - test/lib/cable_ready/identifiable_test.rb
179
244
  - test/lib/cable_ready/operation_builder_test.rb
245
+ - test/lib/cable_ready/updatable_test.rb
180
246
  - test/lib/generators/cable_ready/channel_generator_test.rb
181
247
  - test/support/generator_test_helpers.rb
182
248
  - test/test_helper.rb
@@ -204,9 +270,56 @@ signing_key:
204
270
  specification_version: 4
205
271
  summary: Out-of-Band Server Triggered DOM Operations
206
272
  test_files:
273
+ - test/dummy/db/migrate/20210904093607_create_sections.rb
274
+ - test/dummy/db/migrate/20210913191759_add_team_reference_to_users.rb
275
+ - test/dummy/db/migrate/20210904081930_create_topics.rb
276
+ - test/dummy/db/migrate/20210913191735_create_teams.rb
277
+ - test/dummy/db/migrate/20210902154153_create_posts.rb
278
+ - test/dummy/db/migrate/20210902154139_create_users.rb
279
+ - test/dummy/db/schema.rb
280
+ - test/dummy/config/environment.rb
281
+ - test/dummy/config/routes.rb
282
+ - test/dummy/config/application.rb
283
+ - test/dummy/config/initializers/mime_types.rb
284
+ - test/dummy/config/initializers/content_security_policy.rb
285
+ - test/dummy/config/initializers/backtrace_silencers.rb
286
+ - test/dummy/config/initializers/permissions_policy.rb
287
+ - test/dummy/config/initializers/wrap_parameters.rb
288
+ - test/dummy/config/initializers/assets.rb
289
+ - test/dummy/config/initializers/inflections.rb
290
+ - test/dummy/config/initializers/filter_parameter_logging.rb
291
+ - test/dummy/config/initializers/cookies_serializer.rb
292
+ - test/dummy/config/initializers/application_controller_renderer.rb
293
+ - test/dummy/config/initializers/cable_ready.rb
294
+ - test/dummy/config/boot.rb
295
+ - test/dummy/config/puma.rb
296
+ - test/dummy/config/environments/test.rb
297
+ - test/dummy/config/environments/production.rb
298
+ - test/dummy/config/environments/development.rb
299
+ - test/dummy/app/channels/application_cable/channel.rb
300
+ - test/dummy/app/channels/application_cable/connection.rb
301
+ - test/dummy/app/jobs/application_job.rb
302
+ - test/dummy/app/helpers/application_helper.rb
303
+ - test/dummy/app/controllers/application_controller.rb
304
+ - test/dummy/app/models/user.rb
305
+ - test/dummy/app/models/section.rb
306
+ - test/dummy/app/models/post.rb
307
+ - test/dummy/app/models/team.rb
308
+ - test/dummy/app/models/topic.rb
309
+ - test/dummy/app/models/application_record.rb
310
+ - test/dummy/app/models/global_idable_entity.rb
311
+ - test/dummy/app/mailers/application_mailer.rb
312
+ - test/dummy/test/models/section_test.rb
313
+ - test/dummy/test/models/post_test.rb
314
+ - test/dummy/test/models/user_test.rb
315
+ - test/dummy/test/models/team_test.rb
316
+ - test/dummy/test/models/topic_test.rb
207
317
  - test/support/generator_test_helpers.rb
208
318
  - test/lib/generators/cable_ready/channel_generator_test.rb
209
319
  - test/lib/cable_ready/cable_car_test.rb
320
+ - test/lib/cable_ready/helper_test.rb
210
321
  - test/lib/cable_ready/identifiable_test.rb
322
+ - test/lib/cable_ready/compoundable_test.rb
211
323
  - test/lib/cable_ready/operation_builder_test.rb
324
+ - test/lib/cable_ready/updatable_test.rb
212
325
  - test/test_helper.rb