stimulus_reflex 3.3.0.pre3 → 3.4.0.pre0

Sign up to get free protection for your applications and to get access to all the features.

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