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.
- 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
|