stimulus_reflex 3.3.0.pre3 → 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 (29) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +118 -4
  3. data/Gemfile.lock +72 -69
  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/stimulus_reflex/templates/app/javascript/controllers/%file_name%_controller.js.tt +89 -0
  8. data/lib/generators/{templates → stimulus_reflex/templates}/app/javascript/controllers/application_controller.js.tt +11 -8
  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 +5 -2
  13. data/lib/stimulus_reflex/broadcasters/broadcaster.rb +4 -7
  14. data/lib/stimulus_reflex/broadcasters/page_broadcaster.rb +2 -3
  15. data/lib/stimulus_reflex/broadcasters/selector_broadcaster.rb +2 -5
  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 +98 -0
  20. data/lib/stimulus_reflex/version.rb +1 -1
  21. data/lib/tasks/stimulus_reflex/install.rake +23 -8
  22. data/package.json +63 -0
  23. data/stimulus_reflex.gemspec +2 -1
  24. data/tags +23 -1
  25. data/test/generators/stimulus_reflex_generator_test.rb +3 -2
  26. data/yarn.lock +6261 -0
  27. metadata +30 -11
  28. data/lib/generators/templates/app/javascript/controllers/%file_name%_controller.js.tt +0 -57
  29. data/lib/stimulus_reflex/channel.rb +0 -99
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.pre3
4
+ version: 3.4.0.pre0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Hopkins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-31 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
@@ -58,14 +58,28 @@ dependencies:
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 4.1.2
61
+ version: 4.3.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 4.1.2
68
+ version: 4.3.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: redis
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: bundler
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -156,27 +170,32 @@ files:
156
170
  - bin/setup
157
171
  - bin/standardize
158
172
  - lib/generators/USAGE
159
- - lib/generators/stimulus_reflex_generator.rb
160
- - lib/generators/templates/app/javascript/controllers/%file_name%_controller.js.tt
161
- - lib/generators/templates/app/javascript/controllers/application_controller.js.tt
162
- - lib/generators/templates/app/reflexes/%file_name%_reflex.rb.tt
163
- - 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
164
180
  - lib/stimulus_reflex.rb
165
181
  - lib/stimulus_reflex/broadcasters/broadcaster.rb
166
182
  - lib/stimulus_reflex/broadcasters/nothing_broadcaster.rb
167
183
  - lib/stimulus_reflex/broadcasters/page_broadcaster.rb
168
184
  - lib/stimulus_reflex/broadcasters/selector_broadcaster.rb
169
- - lib/stimulus_reflex/channel.rb
185
+ - lib/stimulus_reflex/configuration.rb
170
186
  - lib/stimulus_reflex/element.rb
171
187
  - lib/stimulus_reflex/reflex.rb
188
+ - lib/stimulus_reflex/sanity_checker.rb
172
189
  - lib/stimulus_reflex/version.rb
173
190
  - lib/tasks/stimulus_reflex/install.rake
191
+ - package.json
174
192
  - stimulus_reflex.gemspec
175
193
  - tags
176
194
  - test/generators/stimulus_reflex_generator_test.rb
177
195
  - test/test_helper.rb
178
196
  - test/tmp/app/reflexes/application_reflex.rb
179
197
  - test/tmp/app/reflexes/user_reflex.rb
198
+ - yarn.lock
180
199
  homepage: https://github.com/hopsoft/stimulus_reflex
181
200
  licenses:
182
201
  - MIT
@@ -205,7 +224,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
205
224
  - !ruby/object:Gem::Version
206
225
  version: 1.3.1
207
226
  requirements: []
208
- rubygems_version: 3.0.3
227
+ rubygems_version: 3.1.2
209
228
  signing_key:
210
229
  specification_version: 4
211
230
  summary: Build reactive applications with the Rails tooling you already know and love.
@@ -1,57 +0,0 @@
1
- import ApplicationController from './application_controller'
2
-
3
- /* This is the custom StimulusReflex controller for <%= class_name %>Reflex.
4
- * Learn more at: https://docs.stimulusreflex.com
5
- */
6
- export default class extends ApplicationController {
7
- /* Reflex specific lifecycle methods.
8
- * Use methods similar to this example to handle lifecycle concerns for a specific Reflex method.
9
- * Using the lifecycle is optional, so feel free to delete these stubs if you don't need them.
10
- *
11
- * Example:
12
- *
13
- * <a href="#" data-reflex="<%= class_name %>Reflex#example">Example</a>
14
- *
15
- * Arguments:
16
- *
17
- * element - the element that triggered the reflex
18
- * may be different than the Stimulus controller's this.element
19
- *
20
- * reflex - the name of the reflex e.g. "<%= class_name %>Reflex#example"
21
- *
22
- * error - error message from the server
23
- */
24
-
25
- <% if actions.empty? -%>
26
- // beforeUpdate(element, reflex) {
27
- // element.innerText = 'Updating...'
28
- // }
29
-
30
- // updateSuccess(element, reflex) {
31
- // element.innerText = 'Updated Successfully.'
32
- // }
33
-
34
- // updateError(element, reflex, error) {
35
- // console.error('updateError', error);
36
- // element.innerText = 'Update Failed!'
37
- // }
38
- <% end -%>
39
- <% actions.each do |action| -%>
40
- // <%= "before_#{action}".camelize(:lower) %>(element, reflex) {
41
- // console.log("before <%= action %>", element, reflex)
42
- // }
43
-
44
- // <%= "#{action}_success".camelize(:lower) %>(element, reflex) {
45
- // console.log("<%= action %> success", element, reflex)
46
- // }
47
-
48
- // <%= "#{action}_error".camelize(:lower) %>(element, reflex, error) {
49
- // console.error("<%= action %> error", element, reflex, error)
50
- // }
51
-
52
- // <%= "after_#{action}".camelize(:lower) %>(element, reflex, error) {
53
- // console.log("after <%= action %>", element, reflex, error)
54
- // }
55
- <%= "\n" unless action == actions.last -%>
56
- <% end -%>
57
- }
@@ -1,99 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class StimulusReflex::Channel < ActionCable::Channel::Base
4
- def stream_name
5
- ids = connection.identifiers.map { |identifier| send(identifier).try(:id) || send(identifier) }
6
- [
7
- params[:channel],
8
- ids.select(&:present?).join(";")
9
- ].select(&:present?).join(":")
10
- end
11
-
12
- def subscribed
13
- stream_from stream_name
14
- end
15
-
16
- def receive(data)
17
- url = data["url"].to_s
18
- selectors = (data["selectors"] || []).select(&:present?)
19
- selectors = data["selectors"] = ["body"] if selectors.blank?
20
- target = data["target"].to_s
21
- reflex_name, method_name = target.split("#")
22
- reflex_name = reflex_name.camelize
23
- reflex_name = reflex_name.end_with?("Reflex") ? reflex_name : "#{reflex_name}Reflex"
24
- arguments = (data["args"] || []).map { |arg| object_with_indifferent_access arg }
25
- element = StimulusReflex::Element.new(data)
26
- permanent_attribute_name = data["permanent_attribute_name"]
27
- params = data["params"] || {}
28
-
29
- begin
30
- begin
31
- reflex_class = reflex_name.constantize.tap { |klass| raise ArgumentError.new("#{reflex_name} is not a StimulusReflex::Reflex") unless is_reflex?(klass) }
32
- reflex = reflex_class.new(self, url: url, element: element, selectors: selectors, method_name: method_name, permanent_attribute_name: permanent_attribute_name, params: params)
33
- delegate_call_to_reflex reflex, method_name, arguments
34
- rescue => invoke_error
35
- message = exception_message_with_backtrace(invoke_error)
36
- body = "StimulusReflex::Channel Failed to invoke #{target}! #{url} #{message}"
37
- if reflex
38
- reflex.rescue_with_handler(invoke_error)
39
- reflex.broadcast_message subject: "error", body: body, data: data
40
- else
41
- logger.error "\e[31m#{body}\e[0m"
42
- end
43
- return
44
- end
45
-
46
- if reflex.halted?
47
- reflex.broadcast_message subject: "halted", data: data
48
- else
49
- begin
50
- reflex.broadcast(selectors, data)
51
- rescue => render_error
52
- reflex.rescue_with_handler(render_error)
53
- message = exception_message_with_backtrace(render_error)
54
- reflex.broadcast_message subject: "error", body: "StimulusReflex::Channel Failed to re-render #{url} #{message}", data: data
55
- end
56
- end
57
- ensure
58
- commit_session reflex if reflex
59
- end
60
- end
61
-
62
- private
63
-
64
- def object_with_indifferent_access(object)
65
- return object.with_indifferent_access if object.respond_to?(:with_indifferent_access)
66
- object.map! { |obj| object_with_indifferent_access obj } if object.is_a?(Array)
67
- object
68
- end
69
-
70
- def is_reflex?(reflex_class)
71
- reflex_class.ancestors.include? StimulusReflex::Reflex
72
- end
73
-
74
- def delegate_call_to_reflex(reflex, method_name, arguments = [])
75
- method = reflex.method(method_name)
76
- required_params = method.parameters.select { |(kind, _)| kind == :req }
77
- optional_params = method.parameters.select { |(kind, _)| kind == :opt }
78
-
79
- if arguments.size == 0 && required_params.size == 0
80
- reflex.process(method_name)
81
- elsif arguments.size >= required_params.size && arguments.size <= required_params.size + optional_params.size
82
- reflex.process(method_name, *arguments)
83
- else
84
- raise ArgumentError.new("wrong number of arguments (given #{arguments.inspect}, expected #{required_params.inspect}, optional #{optional_params.inspect})")
85
- end
86
- end
87
-
88
- def commit_session(reflex)
89
- store = reflex.request.session.instance_variable_get("@by")
90
- store.commit_session reflex.request, reflex.controller.response
91
- rescue => e
92
- message = "Failed to commit session! #{exception_message_with_backtrace(e)}"
93
- logger.error "\e[31m#{message}\e[0m"
94
- end
95
-
96
- def exception_message_with_backtrace(exception)
97
- "#{exception} #{exception.backtrace.first}"
98
- end
99
- end