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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +118 -4
- data/Gemfile.lock +72 -69
- data/README.md +5 -2
- data/lib/generators/stimulus_reflex/config_generator.rb +14 -0
- data/lib/generators/{stimulus_reflex_generator.rb → stimulus_reflex/stimulus_reflex_generator.rb} +0 -0
- data/lib/generators/stimulus_reflex/templates/app/javascript/controllers/%file_name%_controller.js.tt +89 -0
- data/lib/generators/{templates → stimulus_reflex/templates}/app/javascript/controllers/application_controller.js.tt +11 -8
- data/lib/generators/{templates → stimulus_reflex/templates}/app/reflexes/%file_name%_reflex.rb.tt +0 -0
- data/lib/generators/{templates → stimulus_reflex/templates}/app/reflexes/application_reflex.rb.tt +0 -0
- data/lib/generators/stimulus_reflex/templates/config/initializers/stimulus_reflex.rb +9 -0
- data/lib/stimulus_reflex.rb +5 -2
- data/lib/stimulus_reflex/broadcasters/broadcaster.rb +4 -7
- data/lib/stimulus_reflex/broadcasters/page_broadcaster.rb +2 -3
- data/lib/stimulus_reflex/broadcasters/selector_broadcaster.rb +2 -5
- data/lib/stimulus_reflex/configuration.rb +24 -0
- data/lib/stimulus_reflex/element.rb +8 -0
- data/lib/stimulus_reflex/reflex.rb +21 -18
- data/lib/stimulus_reflex/sanity_checker.rb +98 -0
- data/lib/stimulus_reflex/version.rb +1 -1
- data/lib/tasks/stimulus_reflex/install.rake +23 -8
- data/package.json +63 -0
- data/stimulus_reflex.gemspec +2 -1
- data/tags +23 -1
- data/test/generators/stimulus_reflex_generator_test.rb +3 -2
- data/yarn.lock +6261 -0
- metadata +30 -11
- data/lib/generators/templates/app/javascript/controllers/%file_name%_controller.js.tt +0 -57
- 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.
|
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-
|
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.
|
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.
|
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/
|
160
|
-
- lib/generators/
|
161
|
-
- lib/generators/templates/app/javascript/controllers
|
162
|
-
- lib/generators/templates/app/
|
163
|
-
- lib/generators/templates/app/reflexes
|
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/
|
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.
|
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
|