cable_ready 5.0.0.pre0 → 5.0.0.pre4

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 (77) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +87 -8
  3. data/Gemfile.lock +105 -97
  4. data/README.md +10 -6
  5. data/app/channels/cable_ready/stream.rb +12 -0
  6. data/app/helpers/cable_ready_helper.rb +24 -0
  7. data/app/jobs/cable_ready_broadcast_job.rb +14 -0
  8. data/app/models/concerns/cable_ready/updatable/collection_updatable_callbacks.rb +19 -0
  9. data/app/models/concerns/cable_ready/updatable/collections_registry.rb +33 -0
  10. data/app/models/concerns/cable_ready/updatable/model_updatable_callbacks.rb +28 -0
  11. data/app/models/concerns/cable_ready/updatable.rb +98 -0
  12. data/app/models/concerns/extend_has_many.rb +13 -0
  13. data/lib/cable_ready/channels.rb +1 -1
  14. data/lib/cable_ready/compoundable.rb +1 -1
  15. data/lib/cable_ready/config.rb +2 -0
  16. data/lib/cable_ready/identifiable.rb +13 -2
  17. data/lib/cable_ready/operation_builder.rb +25 -14
  18. data/lib/cable_ready/sanity_checker.rb +50 -50
  19. data/lib/cable_ready/version.rb +1 -1
  20. data/lib/cable_ready.rb +3 -0
  21. data/lib/generators/cable_ready/{stream_from_generator.rb → helpers_generator.rb} +1 -1
  22. data/test/dummy/app/channels/application_cable/channel.rb +4 -0
  23. data/test/dummy/app/channels/application_cable/connection.rb +4 -0
  24. data/test/dummy/app/controllers/application_controller.rb +2 -0
  25. data/test/dummy/app/helpers/application_helper.rb +2 -0
  26. data/test/dummy/app/jobs/application_job.rb +7 -0
  27. data/test/dummy/app/mailers/application_mailer.rb +4 -0
  28. data/test/dummy/app/models/application_record.rb +3 -0
  29. data/test/dummy/app/models/global_idable_entity.rb +16 -0
  30. data/test/dummy/app/models/post.rb +4 -0
  31. data/test/dummy/app/models/section.rb +6 -0
  32. data/test/dummy/app/models/team.rb +6 -0
  33. data/test/dummy/app/models/topic.rb +4 -0
  34. data/test/dummy/app/models/user.rb +7 -0
  35. data/test/dummy/config/application.rb +22 -0
  36. data/test/dummy/config/boot.rb +5 -0
  37. data/test/dummy/config/environment.rb +5 -0
  38. data/test/dummy/config/environments/development.rb +76 -0
  39. data/test/dummy/config/environments/production.rb +120 -0
  40. data/test/dummy/config/environments/test.rb +59 -0
  41. data/test/dummy/config/initializers/application_controller_renderer.rb +8 -0
  42. data/test/dummy/config/initializers/assets.rb +12 -0
  43. data/test/dummy/config/initializers/backtrace_silencers.rb +8 -0
  44. data/test/dummy/config/initializers/cable_ready.rb +18 -0
  45. data/test/dummy/config/initializers/content_security_policy.rb +28 -0
  46. data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
  47. data/test/dummy/config/initializers/filter_parameter_logging.rb +6 -0
  48. data/test/dummy/config/initializers/inflections.rb +16 -0
  49. data/test/dummy/config/initializers/mime_types.rb +4 -0
  50. data/test/dummy/config/initializers/permissions_policy.rb +11 -0
  51. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  52. data/test/dummy/config/puma.rb +43 -0
  53. data/test/dummy/config/routes.rb +3 -0
  54. data/test/dummy/db/migrate/20210902154139_create_users.rb +9 -0
  55. data/test/dummy/db/migrate/20210902154153_create_posts.rb +10 -0
  56. data/test/dummy/db/migrate/20210904081930_create_topics.rb +9 -0
  57. data/test/dummy/db/migrate/20210904093607_create_sections.rb +9 -0
  58. data/test/dummy/db/migrate/20210913191735_create_teams.rb +8 -0
  59. data/test/dummy/db/migrate/20210913191759_add_team_reference_to_users.rb +5 -0
  60. data/test/dummy/db/schema.rb +49 -0
  61. data/test/dummy/test/models/post_test.rb +7 -0
  62. data/test/dummy/test/models/section_test.rb +7 -0
  63. data/test/dummy/test/models/team_test.rb +7 -0
  64. data/test/dummy/test/models/topic_test.rb +7 -0
  65. data/test/dummy/test/models/user_test.rb +7 -0
  66. data/test/lib/cable_ready/cable_car_test.rb +25 -3
  67. data/test/lib/cable_ready/compoundable_test.rb +26 -0
  68. data/test/lib/cable_ready/helper_test.rb +25 -0
  69. data/test/lib/cable_ready/identifiable_test.rb +0 -6
  70. data/test/lib/cable_ready/operation_builder_test.rb +89 -28
  71. data/test/lib/cable_ready/updatable_test.rb +112 -0
  72. data/test/test_helper.rb +4 -1
  73. metadata +126 -14
  74. data/cable_ready.gemspec +0 -27
  75. data/package.json +0 -39
  76. data/tags +0 -80
  77. data/yarn.lock +0 -2562
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+ require_relative "../../../lib/cable_ready"
5
+
6
+ class CableReady::CompoundableTest < ActiveSupport::TestCase
7
+ include CableReady::Compoundable
8
+
9
+ test "compounds an ActiveRecord::Base" do
10
+ user = User.create(name: "Alan Turing")
11
+
12
+ assert_equal "gid://dummy/User/1", compound([user])
13
+ end
14
+
15
+ test "compounds any GlobalId-able entity" do
16
+ entity = GlobalIdableEntity.new
17
+
18
+ assert_equal "gid://dummy/GlobalIdableEntity/fake-id", compound([entity])
19
+ end
20
+
21
+ test "compounds any combination of globalid-able and strings" do
22
+ user = User.create(name: "Alan Turing")
23
+
24
+ assert_equal "gid://dummy/User/1:enigma", compound([user, :enigma])
25
+ end
26
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class CableReady::HelperTest < ActionView::TestCase
6
+ include CableReadyHelper
7
+
8
+ # stream_from
9
+
10
+ test "stream_from renders html options" do
11
+ element = Nokogiri::HTML.fragment(stream_from("key", html_options: {class: "block", data: {controller: "modal"}}) {})
12
+
13
+ assert_equal "block", element.children.first["class"]
14
+ assert_equal "modal", element.children.first["data-controller"]
15
+ end
16
+
17
+ # updates_for
18
+
19
+ test "updates_for renders html options" do
20
+ element = Nokogiri::HTML.fragment(updates_for("key", html_options: {class: "block", data: {controller: "modal"}}) {})
21
+
22
+ assert_equal "block", element.children.first["class"]
23
+ assert_equal "modal", element.children.first["data-controller"]
24
+ end
25
+ end
@@ -3,12 +3,6 @@
3
3
  require "test_helper"
4
4
  require_relative "../../../lib/cable_ready"
5
5
 
6
- class User
7
- include ActiveModel::Model
8
-
9
- attr_accessor :id
10
- end
11
-
12
6
  class CableReady::IdentifiableTest < ActiveSupport::TestCase
13
7
  include CableReady::Identifiable
14
8
 
@@ -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.pre0
4
+ version: 5.0.0.pre4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Hopkins
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-20 00:00:00.000000000 Z
11
+ date: 2021-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -136,7 +136,21 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
- description:
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'
153
+ description:
140
154
  email:
141
155
  - natehop@gmail.com
142
156
  executables: []
@@ -151,11 +165,18 @@ files:
151
165
  - LICENSE.txt
152
166
  - README.md
153
167
  - Rakefile
168
+ - app/channels/cable_ready/stream.rb
169
+ - app/helpers/cable_ready_helper.rb
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
154
176
  - bin/console
155
177
  - bin/loc
156
178
  - bin/setup
157
179
  - bin/standardize
158
- - cable_ready.gemspec
159
180
  - lib/cable_ready.rb
160
181
  - lib/cable_ready/broadcaster.rb
161
182
  - lib/cable_ready/cable_car.rb
@@ -169,23 +190,67 @@ files:
169
190
  - lib/cable_ready/stream_identifier.rb
170
191
  - lib/cable_ready/version.rb
171
192
  - lib/generators/cable_ready/channel_generator.rb
193
+ - lib/generators/cable_ready/helpers_generator.rb
172
194
  - lib/generators/cable_ready/initializer_generator.rb
173
- - lib/generators/cable_ready/stream_from_generator.rb
174
195
  - lib/generators/cable_ready/templates/config/initializers/cable_ready.rb
175
- - package.json
176
- - tags
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
183
- - yarn.lock
184
249
  homepage: https://github.com/stimulusreflex/cable_ready
185
250
  licenses:
186
251
  - MIT
187
252
  metadata: {}
188
- post_install_message:
253
+ post_install_message:
189
254
  rdoc_options: []
190
255
  require_paths:
191
256
  - lib
@@ -200,14 +265,61 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
265
  - !ruby/object:Gem::Version
201
266
  version: 1.3.1
202
267
  requirements: []
203
- rubygems_version: 3.2.3
204
- signing_key:
268
+ rubygems_version: 3.1.6
269
+ signing_key:
205
270
  specification_version: 4
206
271
  summary: Out-of-Band Server Triggered DOM Operations
207
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
317
+ - test/support/generator_test_helpers.rb
318
+ - test/lib/generators/cable_ready/channel_generator_test.rb
208
319
  - test/lib/cable_ready/cable_car_test.rb
320
+ - test/lib/cable_ready/helper_test.rb
209
321
  - test/lib/cable_ready/identifiable_test.rb
322
+ - test/lib/cable_ready/compoundable_test.rb
210
323
  - test/lib/cable_ready/operation_builder_test.rb
211
- - test/lib/generators/cable_ready/channel_generator_test.rb
212
- - test/support/generator_test_helpers.rb
324
+ - test/lib/cable_ready/updatable_test.rb
213
325
  - test/test_helper.rb
data/cable_ready.gemspec DELETED
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require File.expand_path("../lib/cable_ready/version", __FILE__)
4
-
5
- Gem::Specification.new do |gem|
6
- gem.name = "cable_ready"
7
- gem.license = "MIT"
8
- gem.version = CableReady::VERSION
9
- gem.authors = ["Nathan Hopkins"]
10
- gem.email = ["natehop@gmail.com"]
11
- gem.homepage = "https://github.com/stimulusreflex/cable_ready"
12
- gem.summary = "Out-of-Band Server Triggered DOM Operations"
13
-
14
- gem.files = Dir["lib/**/*.rb", "app/assets/javascripts/cable_ready.js", "bin/*", "[A-Z]*"]
15
- gem.test_files = Dir["test/**/*.rb"]
16
-
17
- gem.add_dependency "rails", ">= 5.2"
18
- gem.add_dependency "thread-local", ">= 1.1.0"
19
-
20
- gem.add_development_dependency "github_changelog_generator"
21
- gem.add_development_dependency "magic_frozen_string_literal"
22
- gem.add_development_dependency "pry"
23
- gem.add_development_dependency "pry-nav"
24
- gem.add_development_dependency "rake"
25
- gem.add_development_dependency "standardrb"
26
- gem.add_development_dependency "mocha"
27
- end
data/package.json DELETED
@@ -1,39 +0,0 @@
1
- {
2
- "name": "cable_ready",
3
- "version": "4.5.0",
4
- "description": "CableReady helps you create great real-time user experiences by making it simple to trigger client-side DOM changes from server-side Ruby.",
5
- "keywords": [
6
- "ruby",
7
- "rails",
8
- "websockets",
9
- "actioncable",
10
- "cable",
11
- "ssr",
12
- "stimulus_reflex",
13
- "client-side",
14
- "dom"
15
- ],
16
- "homepage": "https://cableready.stimulusreflex.com/",
17
- "bugs": {
18
- "url": "https://github.com/stimulusreflex/cable_ready/issues"
19
- },
20
- "repository": {
21
- "type": "git",
22
- "url": "git+https://github.com:stimulusreflex/cable_ready.git"
23
- },
24
- "license": "MIT",
25
- "author": "Nathan Hopkins <natehop@gmail.com>",
26
- "main": "./javascript/index.js",
27
- "scripts": {
28
- "lint": "yarn run prettier-standard:check",
29
- "format": "yarn run prettier-standard:format",
30
- "prettier-standard:check": "yarn run prettier-standard --check ./javascript/**/*.js",
31
- "prettier-standard:format": "yarn run prettier-standard ./javascript/**/*.js"
32
- },
33
- "dependencies": {
34
- "morphdom": "^2.6.1"
35
- },
36
- "devDependencies": {
37
- "prettier-standard": "^16.1.0"
38
- }
39
- }