stimulus_reflex 3.4.1 → 3.5.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 +587 -495
- data/Gemfile.lock +82 -86
- data/LATEST +1 -0
- data/README.md +10 -10
- data/app/channels/stimulus_reflex/channel.rb +40 -67
- data/lib/generators/USAGE +1 -1
- data/lib/generators/stimulus_reflex/{config_generator.rb → initializer_generator.rb} +3 -3
- data/lib/generators/stimulus_reflex/templates/app/reflexes/%file_name%_reflex.rb.tt +3 -2
- data/lib/generators/stimulus_reflex/templates/app/reflexes/application_reflex.rb.tt +1 -1
- data/lib/generators/stimulus_reflex/templates/config/initializers/stimulus_reflex.rb +6 -1
- data/lib/stimulus_reflex.rb +9 -2
- data/lib/stimulus_reflex/broadcasters/broadcaster.rb +7 -4
- data/lib/stimulus_reflex/broadcasters/page_broadcaster.rb +2 -2
- data/lib/stimulus_reflex/broadcasters/selector_broadcaster.rb +12 -5
- data/lib/stimulus_reflex/cable_ready_channels.rb +6 -2
- data/lib/stimulus_reflex/callbacks.rb +55 -5
- data/lib/stimulus_reflex/concern_enhancer.rb +37 -0
- data/lib/stimulus_reflex/configuration.rb +2 -1
- data/lib/stimulus_reflex/element.rb +31 -7
- data/lib/stimulus_reflex/policies/reflex_invocation_policy.rb +28 -0
- data/lib/stimulus_reflex/reflex.rb +35 -20
- data/lib/stimulus_reflex/reflex_data.rb +79 -0
- data/lib/stimulus_reflex/reflex_factory.rb +31 -0
- data/lib/stimulus_reflex/request_parameters.rb +19 -0
- data/lib/stimulus_reflex/{logger.rb → utils/logger.rb} +0 -2
- data/lib/stimulus_reflex/{sanity_checker.rb → utils/sanity_checker.rb} +58 -10
- data/lib/stimulus_reflex/version.rb +1 -1
- data/lib/tasks/stimulus_reflex/install.rake +6 -4
- data/package.json +6 -5
- data/stimulus_reflex.gemspec +5 -5
- data/test/broadcasters/broadcaster_test_case.rb +1 -1
- data/test/broadcasters/nothing_broadcaster_test.rb +5 -3
- data/test/broadcasters/page_broadcaster_test.rb +8 -4
- data/test/broadcasters/selector_broadcaster_test.rb +171 -55
- data/test/callbacks_test.rb +652 -0
- data/test/concern_enhancer_test.rb +54 -0
- data/test/element_test.rb +181 -0
- data/test/reflex_test.rb +1 -1
- data/test/test_helper.rb +4 -0
- data/test/tmp/app/reflexes/application_reflex.rb +2 -2
- data/test/tmp/app/reflexes/user_reflex.rb +3 -2
- data/yarn.lock +1138 -919
- metadata +39 -28
- data/tags +0 -156
data/Gemfile.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
stimulus_reflex (3.
|
5
|
-
cable_ready (
|
4
|
+
stimulus_reflex (3.5.0.pre0)
|
5
|
+
cable_ready (= 5.0.0.pre0)
|
6
6
|
nokogiri
|
7
7
|
rack
|
8
8
|
rails (>= 5.2)
|
@@ -11,60 +11,60 @@ PATH
|
|
11
11
|
GEM
|
12
12
|
remote: https://rubygems.org/
|
13
13
|
specs:
|
14
|
-
actioncable (6.1.
|
15
|
-
actionpack (= 6.1.
|
16
|
-
activesupport (= 6.1.
|
14
|
+
actioncable (6.1.3.2)
|
15
|
+
actionpack (= 6.1.3.2)
|
16
|
+
activesupport (= 6.1.3.2)
|
17
17
|
nio4r (~> 2.0)
|
18
18
|
websocket-driver (>= 0.6.1)
|
19
|
-
actionmailbox (6.1.
|
20
|
-
actionpack (= 6.1.
|
21
|
-
activejob (= 6.1.
|
22
|
-
activerecord (= 6.1.
|
23
|
-
activestorage (= 6.1.
|
24
|
-
activesupport (= 6.1.
|
19
|
+
actionmailbox (6.1.3.2)
|
20
|
+
actionpack (= 6.1.3.2)
|
21
|
+
activejob (= 6.1.3.2)
|
22
|
+
activerecord (= 6.1.3.2)
|
23
|
+
activestorage (= 6.1.3.2)
|
24
|
+
activesupport (= 6.1.3.2)
|
25
25
|
mail (>= 2.7.1)
|
26
|
-
actionmailer (6.1.
|
27
|
-
actionpack (= 6.1.
|
28
|
-
actionview (= 6.1.
|
29
|
-
activejob (= 6.1.
|
30
|
-
activesupport (= 6.1.
|
26
|
+
actionmailer (6.1.3.2)
|
27
|
+
actionpack (= 6.1.3.2)
|
28
|
+
actionview (= 6.1.3.2)
|
29
|
+
activejob (= 6.1.3.2)
|
30
|
+
activesupport (= 6.1.3.2)
|
31
31
|
mail (~> 2.5, >= 2.5.4)
|
32
32
|
rails-dom-testing (~> 2.0)
|
33
|
-
actionpack (6.1.
|
34
|
-
actionview (= 6.1.
|
35
|
-
activesupport (= 6.1.
|
33
|
+
actionpack (6.1.3.2)
|
34
|
+
actionview (= 6.1.3.2)
|
35
|
+
activesupport (= 6.1.3.2)
|
36
36
|
rack (~> 2.0, >= 2.0.9)
|
37
37
|
rack-test (>= 0.6.3)
|
38
38
|
rails-dom-testing (~> 2.0)
|
39
39
|
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
40
|
-
actiontext (6.1.
|
41
|
-
actionpack (= 6.1.
|
42
|
-
activerecord (= 6.1.
|
43
|
-
activestorage (= 6.1.
|
44
|
-
activesupport (= 6.1.
|
40
|
+
actiontext (6.1.3.2)
|
41
|
+
actionpack (= 6.1.3.2)
|
42
|
+
activerecord (= 6.1.3.2)
|
43
|
+
activestorage (= 6.1.3.2)
|
44
|
+
activesupport (= 6.1.3.2)
|
45
45
|
nokogiri (>= 1.8.5)
|
46
|
-
actionview (6.1.
|
47
|
-
activesupport (= 6.1.
|
46
|
+
actionview (6.1.3.2)
|
47
|
+
activesupport (= 6.1.3.2)
|
48
48
|
builder (~> 3.1)
|
49
49
|
erubi (~> 1.4)
|
50
50
|
rails-dom-testing (~> 2.0)
|
51
51
|
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
52
|
-
activejob (6.1.
|
53
|
-
activesupport (= 6.1.
|
52
|
+
activejob (6.1.3.2)
|
53
|
+
activesupport (= 6.1.3.2)
|
54
54
|
globalid (>= 0.3.6)
|
55
|
-
activemodel (6.1.
|
56
|
-
activesupport (= 6.1.
|
57
|
-
activerecord (6.1.
|
58
|
-
activemodel (= 6.1.
|
59
|
-
activesupport (= 6.1.
|
60
|
-
activestorage (6.1.
|
61
|
-
actionpack (= 6.1.
|
62
|
-
activejob (= 6.1.
|
63
|
-
activerecord (= 6.1.
|
64
|
-
activesupport (= 6.1.
|
65
|
-
marcel (~> 0.
|
66
|
-
|
67
|
-
activesupport (6.1.
|
55
|
+
activemodel (6.1.3.2)
|
56
|
+
activesupport (= 6.1.3.2)
|
57
|
+
activerecord (6.1.3.2)
|
58
|
+
activemodel (= 6.1.3.2)
|
59
|
+
activesupport (= 6.1.3.2)
|
60
|
+
activestorage (6.1.3.2)
|
61
|
+
actionpack (= 6.1.3.2)
|
62
|
+
activejob (= 6.1.3.2)
|
63
|
+
activerecord (= 6.1.3.2)
|
64
|
+
activesupport (= 6.1.3.2)
|
65
|
+
marcel (~> 1.0.0)
|
66
|
+
mini_mime (~> 1.0.2)
|
67
|
+
activesupport (6.1.3.2)
|
68
68
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
69
69
|
i18n (>= 1.6, < 2)
|
70
70
|
minitest (>= 5.1)
|
@@ -72,7 +72,7 @@ GEM
|
|
72
72
|
zeitwerk (~> 2.3)
|
73
73
|
ast (2.4.2)
|
74
74
|
builder (3.2.4)
|
75
|
-
cable_ready (
|
75
|
+
cable_ready (5.0.0.pre0)
|
76
76
|
rails (>= 5.2)
|
77
77
|
thread-local (>= 1.1.0)
|
78
78
|
coderay (1.1.3)
|
@@ -81,26 +81,22 @@ GEM
|
|
81
81
|
erubi (1.10.0)
|
82
82
|
globalid (0.4.2)
|
83
83
|
activesupport (>= 4.2.0)
|
84
|
-
i18n (1.8.
|
84
|
+
i18n (1.8.10)
|
85
85
|
concurrent-ruby (~> 1.0)
|
86
|
-
loofah (2.9.
|
86
|
+
loofah (2.9.1)
|
87
87
|
crass (~> 1.0.2)
|
88
88
|
nokogiri (>= 1.5.9)
|
89
89
|
mail (2.7.1)
|
90
90
|
mini_mime (>= 0.1.1)
|
91
|
-
marcel (0.
|
92
|
-
mimemagic (~> 0.3.2)
|
91
|
+
marcel (1.0.1)
|
93
92
|
method_source (0.9.2)
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
nio4r (2.5.4)
|
99
|
-
nokogiri (1.11.1)
|
100
|
-
mini_portile2 (~> 2.5.0)
|
93
|
+
mini_mime (1.0.3)
|
94
|
+
minitest (5.14.4)
|
95
|
+
nio4r (2.5.7)
|
96
|
+
nokogiri (1.11.5-arm64-darwin)
|
101
97
|
racc (~> 1.4)
|
102
98
|
parallel (1.20.1)
|
103
|
-
parser (3.0.
|
99
|
+
parser (3.0.1.1)
|
104
100
|
ast (~> 2.4.1)
|
105
101
|
pry (0.12.2)
|
106
102
|
coderay (~> 1.1.0)
|
@@ -111,50 +107,50 @@ GEM
|
|
111
107
|
rack (2.2.3)
|
112
108
|
rack-test (1.1.0)
|
113
109
|
rack (>= 1.0, < 3)
|
114
|
-
rails (6.1.
|
115
|
-
actioncable (= 6.1.
|
116
|
-
actionmailbox (= 6.1.
|
117
|
-
actionmailer (= 6.1.
|
118
|
-
actionpack (= 6.1.
|
119
|
-
actiontext (= 6.1.
|
120
|
-
actionview (= 6.1.
|
121
|
-
activejob (= 6.1.
|
122
|
-
activemodel (= 6.1.
|
123
|
-
activerecord (= 6.1.
|
124
|
-
activestorage (= 6.1.
|
125
|
-
activesupport (= 6.1.
|
110
|
+
rails (6.1.3.2)
|
111
|
+
actioncable (= 6.1.3.2)
|
112
|
+
actionmailbox (= 6.1.3.2)
|
113
|
+
actionmailer (= 6.1.3.2)
|
114
|
+
actionpack (= 6.1.3.2)
|
115
|
+
actiontext (= 6.1.3.2)
|
116
|
+
actionview (= 6.1.3.2)
|
117
|
+
activejob (= 6.1.3.2)
|
118
|
+
activemodel (= 6.1.3.2)
|
119
|
+
activerecord (= 6.1.3.2)
|
120
|
+
activestorage (= 6.1.3.2)
|
121
|
+
activesupport (= 6.1.3.2)
|
126
122
|
bundler (>= 1.15.0)
|
127
|
-
railties (= 6.1.
|
123
|
+
railties (= 6.1.3.2)
|
128
124
|
sprockets-rails (>= 2.0.0)
|
129
125
|
rails-dom-testing (2.0.3)
|
130
126
|
activesupport (>= 4.2.0)
|
131
127
|
nokogiri (>= 1.6)
|
132
128
|
rails-html-sanitizer (1.3.0)
|
133
129
|
loofah (~> 2.3)
|
134
|
-
railties (6.1.
|
135
|
-
actionpack (= 6.1.
|
136
|
-
activesupport (= 6.1.
|
130
|
+
railties (6.1.3.2)
|
131
|
+
actionpack (= 6.1.3.2)
|
132
|
+
activesupport (= 6.1.3.2)
|
137
133
|
method_source
|
138
134
|
rake (>= 0.8.7)
|
139
135
|
thor (~> 1.0)
|
140
136
|
rainbow (3.0.0)
|
141
137
|
rake (13.0.3)
|
142
138
|
redis (4.2.5)
|
143
|
-
regexp_parser (2.
|
144
|
-
rexml (3.2.
|
145
|
-
rubocop (1.
|
139
|
+
regexp_parser (2.1.1)
|
140
|
+
rexml (3.2.5)
|
141
|
+
rubocop (1.14.0)
|
146
142
|
parallel (~> 1.10)
|
147
|
-
parser (>=
|
143
|
+
parser (>= 3.0.0.0)
|
148
144
|
rainbow (>= 2.2.2, < 4.0)
|
149
145
|
regexp_parser (>= 1.8, < 3.0)
|
150
146
|
rexml
|
151
|
-
rubocop-ast (>= 1.
|
147
|
+
rubocop-ast (>= 1.5.0, < 2.0)
|
152
148
|
ruby-progressbar (~> 1.7)
|
153
|
-
unicode-display_width (>= 1.4.0, <
|
154
|
-
rubocop-ast (1.
|
155
|
-
parser (>=
|
156
|
-
rubocop-performance (1.
|
157
|
-
rubocop (>=
|
149
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
150
|
+
rubocop-ast (1.5.0)
|
151
|
+
parser (>= 3.0.1.1)
|
152
|
+
rubocop-performance (1.11.2)
|
153
|
+
rubocop (>= 1.7.0, < 2.0)
|
158
154
|
rubocop-ast (>= 0.4.0)
|
159
155
|
ruby-progressbar (1.11.0)
|
160
156
|
sprockets (4.0.2)
|
@@ -164,16 +160,16 @@ GEM
|
|
164
160
|
actionpack (>= 4.0)
|
165
161
|
activesupport (>= 4.0)
|
166
162
|
sprockets (>= 3.0.0)
|
167
|
-
standard (
|
168
|
-
rubocop (= 1.
|
169
|
-
rubocop-performance (= 1.
|
163
|
+
standard (1.1.1)
|
164
|
+
rubocop (= 1.14.0)
|
165
|
+
rubocop-performance (= 1.11.2)
|
170
166
|
standardrb (1.0.0)
|
171
167
|
standard
|
172
168
|
thor (1.1.0)
|
173
169
|
thread-local (1.1.0)
|
174
170
|
tzinfo (2.0.4)
|
175
171
|
concurrent-ruby (~> 1.0)
|
176
|
-
unicode-display_width (
|
172
|
+
unicode-display_width (2.0.0)
|
177
173
|
websocket-driver (0.7.3)
|
178
174
|
websocket-extensions (>= 0.1.0)
|
179
175
|
websocket-extensions (0.1.5)
|
@@ -187,8 +183,8 @@ DEPENDENCIES
|
|
187
183
|
pry
|
188
184
|
pry-nav
|
189
185
|
rake
|
190
|
-
standardrb
|
186
|
+
standardrb (~> 1.0)
|
191
187
|
stimulus_reflex!
|
192
188
|
|
193
189
|
BUNDLED WITH
|
194
|
-
2.
|
190
|
+
2.2.4
|
data/LATEST
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
3.4.1
|
data/README.md
CHANGED
@@ -7,11 +7,11 @@
|
|
7
7
|
<a href="https://www.npmjs.com/package/stimulus_reflex">
|
8
8
|
<img alt="downloads" src="https://img.shields.io/npm/dm/stimulus_reflex.svg?color=blue" target="_blank" />
|
9
9
|
</a>
|
10
|
-
<a href="https://github.com/
|
10
|
+
<a href="https://github.com/stimulusreflex/stimulus_reflex/blob/master/LICENSE">
|
11
11
|
<img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-brightgreen.svg" target="_blank" />
|
12
12
|
</a>
|
13
13
|
<a href="http://blog.codinghorror.com/the-best-code-is-no-code-at-all/" target="_blank">
|
14
|
-
<img alt="Lines of Code" src="https://img.shields.io/badge/lines_of_code-
|
14
|
+
<img alt="Lines of Code" src="https://img.shields.io/badge/lines_of_code-2190-brightgreen.svg?style=flat" />
|
15
15
|
</a>
|
16
16
|
<a href="https://docs.stimulusreflex.com/" target="_blank">
|
17
17
|
<img alt="Documentation" src="https://img.shields.io/badge/documentation-yes-brightgreen.svg" />
|
@@ -30,14 +30,14 @@
|
|
30
30
|
<a href="https://www.codacy.com/manual/hopsoft/stimulus_reflex/dashboard?utm_source=github.com&utm_medium=referral&utm_content=hopsoft/stimulus_reflex&utm_campaign=Badge_Grade" target="_blank">
|
31
31
|
<img alt="Code Quality" src="https://app.codacy.com/project/badge/Grade/d1d72a7060f5467b8696884351cf477f"/>
|
32
32
|
</a>
|
33
|
-
<a target="_blank" rel="noopener noreferrer" href="https://github.com/
|
34
|
-
<img src="https://github.com/
|
33
|
+
<a target="_blank" rel="noopener noreferrer" href="https://github.com/stimulusreflex/stimulus_reflex/workflows/Prettier-Standard/badge.svg">
|
34
|
+
<img src="https://github.com/stimulusreflex/stimulus_reflex/workflows/Prettier-Standard/badge.svg" alt="Prettier-Standard" style="max-width:100%;">
|
35
35
|
</a>
|
36
|
-
<a target="_blank" rel="noopener noreferrer" href="https://github.com/
|
37
|
-
<img src="https://github.com/
|
36
|
+
<a target="_blank" rel="noopener noreferrer" href="https://github.com/stimulusreflex/stimulus_reflex/workflows/StandardRB/badge.svg">
|
37
|
+
<img src="https://github.com/stimulusreflex/stimulus_reflex/workflows/StandardRB/badge.svg" alt="StandardRB" style="max-width:100%;">
|
38
38
|
</a>
|
39
|
-
<a target="_blank" rel="noopener noreferrer" href="https://github.com/
|
40
|
-
<img src="https://github.com/
|
39
|
+
<a target="_blank" rel="noopener noreferrer" href="https://github.com/stimulusreflex/stimulus_reflex/workflows/Tests/badge.svg">
|
40
|
+
<img src="https://github.com/stimulusreflex/stimulus_reflex/workflows/Tests/badge.svg" alt="Tests">
|
41
41
|
</a>
|
42
42
|
</p>
|
43
43
|
</p>
|
@@ -75,7 +75,7 @@ This project strives to live up to the vision outlined in [The Rails Doctrine](h
|
|
75
75
|
|
76
76
|
## 👩👩👧 Discord Community
|
77
77
|
|
78
|
-
Please join over 1000 of us on [Discord](https://discord.gg/
|
78
|
+
Please join over 1000 of us on [Discord](https://discord.gg/stimulus-reflex) for support getting started, as well as active discussions around Rails, StimulusJS and CableReady.
|
79
79
|
|
80
80
|

|
81
81
|
|
@@ -104,7 +104,7 @@ and [Prettier-Standard](https://github.com/sheerun/prettier-standard) for JavaSc
|
|
104
104
|
|
105
105
|
Please run `./bin/standardize` prior to submitting pull requests.
|
106
106
|
|
107
|
-
View the [wiki](https://github.com/
|
107
|
+
View the [wiki](https://github.com/stimulusreflex/stimulus_reflex/wiki/Editor-Configuration) to see recommendations for configuring your editor to work best with the project.
|
108
108
|
|
109
109
|
## 📦 Releasing
|
110
110
|
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class StimulusReflex::Channel < StimulusReflex.configuration.parent_channel.constantize
|
4
|
+
attr_reader :reflex_data
|
5
|
+
|
4
6
|
def stream_name
|
5
7
|
ids = connection.identifiers.map { |identifier| send(identifier).try(:id) || send(identifier) }
|
6
8
|
[
|
@@ -11,50 +13,25 @@ class StimulusReflex::Channel < StimulusReflex.configuration.parent_channel.cons
|
|
11
13
|
|
12
14
|
def subscribed
|
13
15
|
super
|
14
|
-
fix_environment!
|
15
16
|
stream_from stream_name
|
16
17
|
end
|
17
18
|
|
18
19
|
def receive(data)
|
19
|
-
|
20
|
-
selectors = (data["selectors"] || []).select(&:present?)
|
21
|
-
selectors = data["selectors"] = ["body"] if selectors.blank?
|
22
|
-
target = data["target"].to_s
|
23
|
-
reflex_name, method_name = target.split("#")
|
24
|
-
reflex_name = reflex_name.camelize
|
25
|
-
reflex_name = reflex_name.end_with?("Reflex") ? reflex_name : "#{reflex_name}Reflex"
|
26
|
-
arguments = (data["args"] || []).map { |arg| object_with_indifferent_access arg }
|
27
|
-
element = StimulusReflex::Element.new(data)
|
28
|
-
permanent_attribute_name = data["permanentAttributeName"]
|
29
|
-
form_data = Rack::Utils.parse_nested_query(data["formData"])
|
30
|
-
params = form_data.deep_merge(data["params"] || {})
|
31
|
-
|
20
|
+
@reflex_data = StimulusReflex::ReflexData.new(data)
|
32
21
|
begin
|
33
22
|
begin
|
34
|
-
|
35
|
-
reflex
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
method_name: method_name,
|
40
|
-
params: params,
|
41
|
-
client_attributes: {
|
42
|
-
reflex_id: data["reflexId"],
|
43
|
-
xpath_controller: data["xpathController"],
|
44
|
-
xpath_element: data["xpathElement"],
|
45
|
-
reflex_controller: data["reflexController"],
|
46
|
-
permanent_attribute_name: permanent_attribute_name
|
47
|
-
})
|
48
|
-
delegate_call_to_reflex reflex, method_name, arguments
|
49
|
-
rescue => invoke_error
|
50
|
-
message = exception_message_with_backtrace(invoke_error)
|
51
|
-
body = "Reflex #{target} failed: #{message} [#{url}]"
|
23
|
+
reflex = StimulusReflex::ReflexFactory.create_reflex_from_data(self, @reflex_data)
|
24
|
+
delegate_call_to_reflex reflex
|
25
|
+
rescue => exception
|
26
|
+
error = exception_with_backtrace(exception)
|
27
|
+
error_message = "\e[31mReflex #{reflex_data.target} failed: #{error[:message]} [#{reflex_data.url}]\e[0m\n#{error[:stack]}"
|
52
28
|
|
53
29
|
if reflex
|
54
|
-
reflex.rescue_with_handler(
|
55
|
-
|
30
|
+
reflex.rescue_with_handler(exception)
|
31
|
+
puts error_message
|
32
|
+
reflex.broadcast_message subject: "error", data: data, error: exception
|
56
33
|
else
|
57
|
-
puts
|
34
|
+
puts error_message
|
58
35
|
|
59
36
|
if body.to_s.include? "No route matches"
|
60
37
|
initializer_path = Rails.root.join("config", "initializers", "stimulus_reflex.rb")
|
@@ -84,43 +61,35 @@ class StimulusReflex::Channel < StimulusReflex.configuration.parent_channel.cons
|
|
84
61
|
reflex.broadcast_message subject: "halted", data: data
|
85
62
|
else
|
86
63
|
begin
|
87
|
-
reflex.broadcast(selectors, data)
|
88
|
-
rescue =>
|
89
|
-
reflex.rescue_with_handler(
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
puts "\e[31m#{body}\e[0m"
|
64
|
+
reflex.broadcast(reflex_data.selectors, data)
|
65
|
+
rescue => exception
|
66
|
+
reflex.rescue_with_handler(exception)
|
67
|
+
error = exception_with_backtrace(exception)
|
68
|
+
reflex.broadcast_message subject: "error", data: data, error: exception
|
69
|
+
puts "\e[31mReflex failed to re-render: #{error[:message]} [#{reflex_data.url}]\e[0m\n#{error[:stack]}"
|
94
70
|
end
|
95
71
|
end
|
96
72
|
ensure
|
97
73
|
if reflex
|
98
74
|
commit_session(reflex)
|
99
|
-
reflex.
|
75
|
+
report_failed_basic_auth(reflex) if reflex.controller?
|
76
|
+
reflex.logger&.print
|
100
77
|
end
|
101
78
|
end
|
102
79
|
end
|
103
80
|
|
104
81
|
private
|
105
82
|
|
106
|
-
def
|
107
|
-
|
108
|
-
|
109
|
-
object
|
110
|
-
end
|
111
|
-
|
112
|
-
def is_reflex?(reflex_class)
|
113
|
-
reflex_class.ancestors.include? StimulusReflex::Reflex
|
114
|
-
end
|
115
|
-
|
116
|
-
def delegate_call_to_reflex(reflex, method_name, arguments = [])
|
83
|
+
def delegate_call_to_reflex(reflex)
|
84
|
+
method_name = reflex_data.method_name
|
85
|
+
arguments = reflex_data.arguments
|
117
86
|
method = reflex.method(method_name)
|
118
|
-
required_params = method.parameters.select { |(kind, _)| kind == :req }
|
119
|
-
optional_params = method.parameters.select { |(kind, _)| kind == :opt }
|
120
87
|
|
121
|
-
|
88
|
+
policy = StimulusReflex::ReflexMethodInvocationPolicy.new(method, arguments)
|
89
|
+
|
90
|
+
if policy.no_arguments?
|
122
91
|
reflex.process(method_name)
|
123
|
-
elsif
|
92
|
+
elsif policy.arguments?
|
124
93
|
reflex.process(method_name, *arguments)
|
125
94
|
else
|
126
95
|
raise ArgumentError.new("wrong number of arguments (given #{arguments.inspect}, expected #{required_params.inspect}, optional #{optional_params.inspect})")
|
@@ -130,18 +99,22 @@ class StimulusReflex::Channel < StimulusReflex.configuration.parent_channel.cons
|
|
130
99
|
def commit_session(reflex)
|
131
100
|
store = reflex.request.session.instance_variable_get("@by")
|
132
101
|
store.commit_session reflex.request, reflex.controller.response
|
133
|
-
rescue =>
|
134
|
-
|
135
|
-
puts "\e[
|
102
|
+
rescue => exception
|
103
|
+
error = exception_with_backtrace(exception)
|
104
|
+
puts "\e[31mFailed to commit session! #{error[:message]}\e[0m\n#{error[:backtrace]}"
|
136
105
|
end
|
137
106
|
|
138
|
-
def
|
139
|
-
|
107
|
+
def report_failed_basic_auth(reflex)
|
108
|
+
if reflex.controller.response.status == 401
|
109
|
+
puts "\e[31mReflex failed to process controller action \"#{reflex.controller.class}##{reflex.controller.action_name}\" due to HTTP basic auth. Consider adding \"unless: -> { @stimulus_reflex }\" to the before_action or method responible for authentication.\e[0m"
|
110
|
+
end
|
140
111
|
end
|
141
112
|
|
142
|
-
def
|
143
|
-
|
144
|
-
|
145
|
-
|
113
|
+
def exception_with_backtrace(exception)
|
114
|
+
{
|
115
|
+
message: exception.to_s,
|
116
|
+
backtrace: exception.backtrace.first,
|
117
|
+
stack: exception.backtrace.join("\n")
|
118
|
+
}
|
146
119
|
end
|
147
120
|
end
|