stimulus_reflex 3.3.0 → 3.4.0.pre0

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.

Potentially problematic release.


This version of stimulus_reflex might be problematic. Click here for more details.

Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +55 -8
  3. data/Gemfile.lock +66 -65
  4. data/README.md +5 -2
  5. data/lib/generators/stimulus_reflex/config_generator.rb +14 -0
  6. data/lib/generators/{stimulus_reflex_generator.rb → stimulus_reflex/stimulus_reflex_generator.rb} +0 -0
  7. data/lib/generators/{templates → stimulus_reflex/templates}/app/javascript/controllers/%file_name%_controller.js.tt +0 -0
  8. data/lib/generators/{templates → stimulus_reflex/templates}/app/javascript/controllers/application_controller.js.tt +0 -0
  9. data/lib/generators/{templates → stimulus_reflex/templates}/app/reflexes/%file_name%_reflex.rb.tt +0 -0
  10. data/lib/generators/{templates → stimulus_reflex/templates}/app/reflexes/application_reflex.rb.tt +0 -0
  11. data/lib/generators/stimulus_reflex/templates/config/initializers/stimulus_reflex.rb +9 -0
  12. data/lib/stimulus_reflex.rb +1 -2
  13. data/lib/stimulus_reflex/broadcasters/broadcaster.rb +3 -7
  14. data/lib/stimulus_reflex/broadcasters/page_broadcaster.rb +2 -2
  15. data/lib/stimulus_reflex/broadcasters/selector_broadcaster.rb +2 -2
  16. data/lib/stimulus_reflex/configuration.rb +24 -0
  17. data/lib/stimulus_reflex/element.rb +8 -0
  18. data/lib/stimulus_reflex/reflex.rb +21 -18
  19. data/lib/stimulus_reflex/sanity_checker.rb +36 -18
  20. data/lib/stimulus_reflex/version.rb +1 -1
  21. data/lib/tasks/stimulus_reflex/install.rake +11 -8
  22. data/package.json +63 -0
  23. data/stimulus_reflex.gemspec +40 -0
  24. data/tags +98 -0
  25. data/test/generators/stimulus_reflex_generator_test.rb +1 -0
  26. data/test/tmp/app/reflexes/application_reflex.rb +12 -0
  27. data/test/tmp/app/reflexes/user_reflex.rb +33 -0
  28. data/yarn.lock +6261 -0
  29. metadata +25 -15
  30. data/lib/stimulus_reflex/channel.rb +0 -110
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stimulus_reflex
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.4.0.pre0
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: 2020-09-22 00:00:00.000000000 Z
11
+ date: 2020-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -150,7 +150,7 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
- description:
153
+ description:
154
154
  email:
155
155
  - natehop@gmail.com
156
156
  executables: []
@@ -170,24 +170,32 @@ files:
170
170
  - bin/setup
171
171
  - bin/standardize
172
172
  - lib/generators/USAGE
173
- - lib/generators/stimulus_reflex_generator.rb
174
- - lib/generators/templates/app/javascript/controllers/%file_name%_controller.js.tt
175
- - lib/generators/templates/app/javascript/controllers/application_controller.js.tt
176
- - lib/generators/templates/app/reflexes/%file_name%_reflex.rb.tt
177
- - lib/generators/templates/app/reflexes/application_reflex.rb.tt
173
+ - lib/generators/stimulus_reflex/config_generator.rb
174
+ - lib/generators/stimulus_reflex/stimulus_reflex_generator.rb
175
+ - lib/generators/stimulus_reflex/templates/app/javascript/controllers/%file_name%_controller.js.tt
176
+ - lib/generators/stimulus_reflex/templates/app/javascript/controllers/application_controller.js.tt
177
+ - lib/generators/stimulus_reflex/templates/app/reflexes/%file_name%_reflex.rb.tt
178
+ - lib/generators/stimulus_reflex/templates/app/reflexes/application_reflex.rb.tt
179
+ - lib/generators/stimulus_reflex/templates/config/initializers/stimulus_reflex.rb
178
180
  - lib/stimulus_reflex.rb
179
181
  - lib/stimulus_reflex/broadcasters/broadcaster.rb
180
182
  - lib/stimulus_reflex/broadcasters/nothing_broadcaster.rb
181
183
  - lib/stimulus_reflex/broadcasters/page_broadcaster.rb
182
184
  - lib/stimulus_reflex/broadcasters/selector_broadcaster.rb
183
- - lib/stimulus_reflex/channel.rb
185
+ - lib/stimulus_reflex/configuration.rb
184
186
  - lib/stimulus_reflex/element.rb
185
187
  - lib/stimulus_reflex/reflex.rb
186
188
  - lib/stimulus_reflex/sanity_checker.rb
187
189
  - lib/stimulus_reflex/version.rb
188
190
  - lib/tasks/stimulus_reflex/install.rake
191
+ - package.json
192
+ - stimulus_reflex.gemspec
193
+ - tags
189
194
  - test/generators/stimulus_reflex_generator_test.rb
190
195
  - test/test_helper.rb
196
+ - test/tmp/app/reflexes/application_reflex.rb
197
+ - test/tmp/app/reflexes/user_reflex.rb
198
+ - yarn.lock
191
199
  homepage: https://github.com/hopsoft/stimulus_reflex
192
200
  licenses:
193
201
  - MIT
@@ -212,14 +220,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
212
220
  version: '0'
213
221
  required_rubygems_version: !ruby/object:Gem::Requirement
214
222
  requirements:
215
- - - ">="
223
+ - - ">"
216
224
  - !ruby/object:Gem::Version
217
- version: '0'
225
+ version: 1.3.1
218
226
  requirements: []
219
- rubygems_version: 3.0.6
220
- signing_key:
227
+ rubygems_version: 3.1.2
228
+ signing_key:
221
229
  specification_version: 4
222
230
  summary: Build reactive applications with the Rails tooling you already know and love.
223
231
  test_files:
224
- - test/generators/stimulus_reflex_generator_test.rb
225
232
  - test/test_helper.rb
233
+ - test/generators/stimulus_reflex_generator_test.rb
234
+ - test/tmp/app/reflexes/application_reflex.rb
235
+ - test/tmp/app/reflexes/user_reflex.rb
@@ -1,110 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ApplicationCable
4
- class Channel < ActionCable::Channel::Base
5
- def initialize(connection, identifier, params = {})
6
- super
7
- application_channel = Rails.root.join("app", "channels", "application_cable", "channel.rb")
8
- require application_channel if File.exist?(application_channel)
9
- end
10
- end
11
- end
12
-
13
- class StimulusReflex::Channel < ApplicationCable::Channel
14
- def stream_name
15
- ids = connection.identifiers.map { |identifier| send(identifier).try(:id) || send(identifier) }
16
- [
17
- params[:channel],
18
- ids.select(&:present?).join(";")
19
- ].select(&:present?).join(":")
20
- end
21
-
22
- def subscribed
23
- super
24
- stream_from stream_name
25
- end
26
-
27
- def receive(data)
28
- url = data["url"].to_s
29
- selectors = (data["selectors"] || []).select(&:present?)
30
- selectors = data["selectors"] = ["body"] if selectors.blank?
31
- target = data["target"].to_s
32
- reflex_name, method_name = target.split("#")
33
- reflex_name = reflex_name.camelize
34
- reflex_name = reflex_name.end_with?("Reflex") ? reflex_name : "#{reflex_name}Reflex"
35
- arguments = (data["args"] || []).map { |arg| object_with_indifferent_access arg }
36
- element = StimulusReflex::Element.new(data)
37
- permanent_attribute_name = data["permanent_attribute_name"]
38
- params = data["params"] || {}
39
-
40
- begin
41
- begin
42
- reflex_class = reflex_name.constantize.tap { |klass| raise ArgumentError.new("#{reflex_name} is not a StimulusReflex::Reflex") unless is_reflex?(klass) }
43
- reflex = reflex_class.new(self, url: url, element: element, selectors: selectors, method_name: method_name, permanent_attribute_name: permanent_attribute_name, params: params)
44
- delegate_call_to_reflex reflex, method_name, arguments
45
- rescue => invoke_error
46
- message = exception_message_with_backtrace(invoke_error)
47
- body = "StimulusReflex::Channel Failed to invoke #{target}! #{url} #{message}"
48
- if reflex
49
- reflex.rescue_with_handler(invoke_error)
50
- reflex.broadcast_message subject: "error", body: body, data: data
51
- else
52
- logger.error "\e[31m#{body}\e[0m"
53
- end
54
- return
55
- end
56
-
57
- if reflex.halted?
58
- reflex.broadcast_message subject: "halted", data: data
59
- else
60
- begin
61
- reflex.broadcast(selectors, data)
62
- rescue => render_error
63
- reflex.rescue_with_handler(render_error)
64
- message = exception_message_with_backtrace(render_error)
65
- reflex.broadcast_message subject: "error", body: "StimulusReflex::Channel Failed to re-render #{url} #{message}", data: data
66
- end
67
- end
68
- ensure
69
- commit_session reflex if reflex
70
- end
71
- end
72
-
73
- private
74
-
75
- def object_with_indifferent_access(object)
76
- return object.with_indifferent_access if object.respond_to?(:with_indifferent_access)
77
- object.map! { |obj| object_with_indifferent_access obj } if object.is_a?(Array)
78
- object
79
- end
80
-
81
- def is_reflex?(reflex_class)
82
- reflex_class.ancestors.include? StimulusReflex::Reflex
83
- end
84
-
85
- def delegate_call_to_reflex(reflex, method_name, arguments = [])
86
- method = reflex.method(method_name)
87
- required_params = method.parameters.select { |(kind, _)| kind == :req }
88
- optional_params = method.parameters.select { |(kind, _)| kind == :opt }
89
-
90
- if arguments.size == 0 && required_params.size == 0
91
- reflex.process(method_name)
92
- elsif arguments.size >= required_params.size && arguments.size <= required_params.size + optional_params.size
93
- reflex.process(method_name, *arguments)
94
- else
95
- raise ArgumentError.new("wrong number of arguments (given #{arguments.inspect}, expected #{required_params.inspect}, optional #{optional_params.inspect})")
96
- end
97
- end
98
-
99
- def commit_session(reflex)
100
- store = reflex.request.session.instance_variable_get("@by")
101
- store.commit_session reflex.request, reflex.controller.response
102
- rescue => e
103
- message = "Failed to commit session! #{exception_message_with_backtrace(e)}"
104
- logger.error "\e[31m#{message}\e[0m"
105
- end
106
-
107
- def exception_message_with_backtrace(exception)
108
- "#{exception} #{exception.backtrace.first}"
109
- end
110
- end