stimulus_reflex 3.4.0.pre5 → 3.4.0.pre6
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -2
- data/Gemfile.lock +5 -5
- data/README.md +2 -5
- data/Rakefile +5 -5
- data/bin/console +1 -0
- data/lib/generators/stimulus_reflex/templates/app/javascript/controllers/%file_name%_controller.js.tt +14 -2
- data/lib/generators/stimulus_reflex/templates/app/javascript/controllers/application_controller.js.tt +10 -2
- data/lib/generators/stimulus_reflex/templates/app/reflexes/%file_name%_reflex.rb.tt +18 -9
- data/lib/generators/stimulus_reflex/templates/app/reflexes/application_reflex.rb.tt +2 -2
- data/lib/stimulus_reflex.rb +1 -0
- data/lib/stimulus_reflex/broadcasters/broadcaster.rb +2 -4
- data/lib/stimulus_reflex/broadcasters/page_broadcaster.rb +1 -1
- data/lib/stimulus_reflex/broadcasters/selector_broadcaster.rb +2 -2
- data/lib/stimulus_reflex/cable_ready_channels.rb +18 -0
- data/lib/stimulus_reflex/reflex.rb +2 -2
- data/lib/stimulus_reflex/sanity_checker.rb +11 -4
- data/lib/stimulus_reflex/version.rb +1 -1
- data/package.json +2 -2
- data/stimulus_reflex.gemspec +1 -1
- data/tags +82 -41
- data/test/broadcasters/broadcaster_test.rb +2 -7
- data/test/broadcasters/broadcaster_test_case.rb +13 -0
- data/test/broadcasters/nothing_broadcaster_test.rb +26 -27
- data/test/broadcasters/page_broadcaster_test.rb +55 -51
- data/test/broadcasters/selector_broadcaster_test.rb +55 -83
- data/test/test_helper.rb +37 -2
- data/test/tmp/app/reflexes/application_reflex.rb +2 -2
- data/test/tmp/app/reflexes/demo_reflex.rb +34 -0
- data/yarn.lock +4 -4
- metadata +9 -6
- data/test/tmp/app/reflexes/posts_reflex.rb +0 -24
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7c1b21d72db7dc3cae4b0a6225af2a17af6505e43b46d10a4db1ff1505566d1f
|
|
4
|
+
data.tar.gz: 0a0d7acc4ebaf2b9f717e0cf01f0cdcb2999694627f960cea27db10693b5480e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 92b7b673a36cea3d4bbbf3b491524a6f1819d5a7d477b0609bd605f236a24a4dc6a8c1ec9af336399a1179376c3e5257dd8266933607e45d183bb63220ddf1b8
|
|
7
|
+
data.tar.gz: baada4b0985537e8aed1717f383cde05c94bcd502e047d6a58bbbb50580a691960f1ff792c8cefbc07a0940c1541f0e1eea985be9193d345db92d99c0560a054
|
data/CHANGELOG.md
CHANGED
|
@@ -2,7 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased](https://github.com/hopsoft/stimulus_reflex/tree/HEAD)
|
|
4
4
|
|
|
5
|
-
[Full Changelog](https://github.com/hopsoft/stimulus_reflex/compare/v3.4.0.
|
|
5
|
+
[Full Changelog](https://github.com/hopsoft/stimulus_reflex/compare/v3.4.0.pre5...HEAD)
|
|
6
|
+
|
|
7
|
+
**Merged pull requests:**
|
|
8
|
+
|
|
9
|
+
- Update templates for new stage etc [\#390](https://github.com/hopsoft/stimulus_reflex/pull/390) ([leastbad](https://github.com/leastbad))
|
|
10
|
+
- reflexError and received refactor [\#389](https://github.com/hopsoft/stimulus_reflex/pull/389) ([leastbad](https://github.com/leastbad))
|
|
11
|
+
- add jQuery support to SR library events [\#388](https://github.com/hopsoft/stimulus_reflex/pull/388) ([leastbad](https://github.com/leastbad))
|
|
12
|
+
- dont exit in sanity checker on `stimulus\_reflex:install` [\#387](https://github.com/hopsoft/stimulus_reflex/pull/387) ([marcoroth](https://github.com/marcoroth))
|
|
13
|
+
- Allow `success` and `after` lifecycle methods on replaced elements [\#386](https://github.com/hopsoft/stimulus_reflex/pull/386) ([marcoroth](https://github.com/marcoroth))
|
|
14
|
+
- split SR operations from data.operations [\#385](https://github.com/hopsoft/stimulus_reflex/pull/385) ([leastbad](https://github.com/leastbad))
|
|
15
|
+
- don't show findElement warnings unless debugging [\#384](https://github.com/hopsoft/stimulus_reflex/pull/384) ([leastbad](https://github.com/leastbad))
|
|
16
|
+
- Setup a proxy object that wraps CableReady::Channels [\#382](https://github.com/hopsoft/stimulus_reflex/pull/382) ([hopsoft](https://github.com/hopsoft))
|
|
17
|
+
- non-SR cable\_ready operation pass-through [\#381](https://github.com/hopsoft/stimulus_reflex/pull/381) ([leastbad](https://github.com/leastbad))
|
|
18
|
+
|
|
19
|
+
## [v3.4.0.pre5](https://github.com/hopsoft/stimulus_reflex/tree/v3.4.0.pre5) (2020-11-25)
|
|
20
|
+
|
|
21
|
+
[Full Changelog](https://github.com/hopsoft/stimulus_reflex/compare/v3.4.0.pre4...v3.4.0.pre5)
|
|
6
22
|
|
|
7
23
|
**Closed issues:**
|
|
8
24
|
|
|
@@ -254,7 +270,6 @@
|
|
|
254
270
|
**Implemented enhancements:**
|
|
255
271
|
|
|
256
272
|
- Returns more helpful error message if Reflex doesn't exist [\#254](https://github.com/hopsoft/stimulus_reflex/pull/254) ([leastbad](https://github.com/leastbad))
|
|
257
|
-
- Update install.rake to handle Typescript [\#241](https://github.com/hopsoft/stimulus_reflex/pull/241) ([iv-mexx](https://github.com/iv-mexx))
|
|
258
273
|
- Morph Modes: page, selector and nothing [\#211](https://github.com/hopsoft/stimulus_reflex/pull/211) ([leastbad](https://github.com/leastbad))
|
|
259
274
|
|
|
260
275
|
**Fixed bugs:**
|
|
@@ -295,6 +310,10 @@
|
|
|
295
310
|
|
|
296
311
|
[Full Changelog](https://github.com/hopsoft/stimulus_reflex/compare/v3.2.2...v3.2.3)
|
|
297
312
|
|
|
313
|
+
**Implemented enhancements:**
|
|
314
|
+
|
|
315
|
+
- Update install.rake to handle Typescript [\#241](https://github.com/hopsoft/stimulus_reflex/pull/241) ([iv-mexx](https://github.com/iv-mexx))
|
|
316
|
+
|
|
298
317
|
**Fixed bugs:**
|
|
299
318
|
|
|
300
319
|
- Add more smarts to \_\_perform [\#235](https://github.com/hopsoft/stimulus_reflex/pull/235) ([hopsoft](https://github.com/hopsoft))
|
data/Gemfile.lock
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
stimulus_reflex (3.4.0.
|
|
5
|
-
cable_ready (>= 4.
|
|
4
|
+
stimulus_reflex (3.4.0.pre6)
|
|
5
|
+
cable_ready (>= 4.4)
|
|
6
6
|
nokogiri
|
|
7
7
|
rack
|
|
8
8
|
rails (>= 5.2)
|
|
@@ -68,7 +68,7 @@ GEM
|
|
|
68
68
|
zeitwerk (~> 2.2, >= 2.2.2)
|
|
69
69
|
ast (2.4.1)
|
|
70
70
|
builder (3.2.4)
|
|
71
|
-
cable_ready (4.4.
|
|
71
|
+
cable_ready (4.4.1)
|
|
72
72
|
rails (>= 5.2)
|
|
73
73
|
coderay (1.1.3)
|
|
74
74
|
concurrent-ruby (1.1.7)
|
|
@@ -78,7 +78,7 @@ GEM
|
|
|
78
78
|
activesupport (>= 4.2.0)
|
|
79
79
|
i18n (1.8.5)
|
|
80
80
|
concurrent-ruby (~> 1.0)
|
|
81
|
-
loofah (2.
|
|
81
|
+
loofah (2.8.0)
|
|
82
82
|
crass (~> 1.0.2)
|
|
83
83
|
nokogiri (>= 1.5.9)
|
|
84
84
|
mail (2.7.1)
|
|
@@ -170,7 +170,7 @@ GEM
|
|
|
170
170
|
websocket-driver (0.7.3)
|
|
171
171
|
websocket-extensions (>= 0.1.0)
|
|
172
172
|
websocket-extensions (0.1.5)
|
|
173
|
-
zeitwerk (2.4.
|
|
173
|
+
zeitwerk (2.4.2)
|
|
174
174
|
|
|
175
175
|
PLATFORMS
|
|
176
176
|
ruby
|
data/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
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-1599-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,9 +30,6 @@
|
|
|
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 href="https://codeclimate.com/github/hopsoft/stimulus_reflex/maintainability" target="_blank">
|
|
34
|
-
<img alt="Maintainability" src="https://api.codeclimate.com/v1/badges/2b24fdbd1ae37a24bedb/maintainability" />
|
|
35
|
-
</a>
|
|
36
33
|
<a target="_blank" rel="noopener noreferrer" href="https://github.com/hopsoft/stimulus_reflex/workflows/Prettier-Standard/badge.svg">
|
|
37
34
|
<img src="https://github.com/hopsoft/stimulus_reflex/workflows/Prettier-Standard/badge.svg" alt="Prettier-Standard" style="max-width:100%;">
|
|
38
35
|
</a>
|
|
@@ -77,7 +74,7 @@ This project strives to live up to the vision outlined in [The Rails Doctrine](h
|
|
|
77
74
|
|
|
78
75
|
## 👩👩👧 Discord Community
|
|
79
76
|
|
|
80
|
-
Please join over
|
|
77
|
+
Please join over 800 of us on [Discord](https://discord.gg/XveN625) for support getting started, as well as active discussions around Rails, StimulusJS and CableReady.
|
|
81
78
|
|
|
82
79
|

|
|
83
80
|
|
data/Rakefile
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
require "bundler/gem_tasks"
|
|
4
4
|
require "rails/test_unit/runner"
|
|
5
5
|
|
|
6
|
-
task
|
|
7
|
-
|
|
8
|
-
task :test do |task|
|
|
9
|
-
return 1 unless system("yarn run test")
|
|
10
|
-
Rails::TestUnit::Runner.run
|
|
6
|
+
task :test_javascript do |task|
|
|
7
|
+
system "yarn run test"
|
|
11
8
|
end
|
|
12
9
|
|
|
13
10
|
task :test_ruby do |task|
|
|
14
11
|
Rails::TestUnit::Runner.run
|
|
15
12
|
end
|
|
13
|
+
|
|
14
|
+
task test: [:test_javascript, :test_ruby]
|
|
15
|
+
task default: [:test]
|
data/bin/console
CHANGED
|
@@ -56,12 +56,20 @@ export default class extends ApplicationController {
|
|
|
56
56
|
// }
|
|
57
57
|
|
|
58
58
|
// danceSuccess(element, reflex, noop, reflexId) {
|
|
59
|
-
// element.innerText = '
|
|
59
|
+
// element.innerText = '\nDanced like no one was watching! Was someone watching?'
|
|
60
60
|
// }
|
|
61
61
|
|
|
62
62
|
// danceError(element, reflex, error, reflexId) {
|
|
63
63
|
// console.error('danceError', error);
|
|
64
|
-
// element.innerText = "
|
|
64
|
+
// element.innerText = "\nCouldn\'t dance!"
|
|
65
|
+
// }
|
|
66
|
+
|
|
67
|
+
// afterDance(element, reflex, noop, reflexId) {
|
|
68
|
+
// element.innerText = '\nWhatever that was, it\'s over now.'
|
|
69
|
+
// }
|
|
70
|
+
|
|
71
|
+
// finalizeDance(element, reflex, noop, reflexId) {
|
|
72
|
+
// element.innerText = '\nNow, the cleanup can begin!'
|
|
65
73
|
// }
|
|
66
74
|
<% end -%>
|
|
67
75
|
<% actions.each do |action| -%>
|
|
@@ -84,6 +92,10 @@ export default class extends ApplicationController {
|
|
|
84
92
|
// <%= "after_#{action}".camelize(:lower) %>(element, reflex, noop, reflexId) {
|
|
85
93
|
// console.log("after <%= action %>", element, reflex, reflexId)
|
|
86
94
|
// }
|
|
95
|
+
|
|
96
|
+
// <%= "finalize_#{action}".camelize(:lower) %>(element, reflex, noop, reflexId) {
|
|
97
|
+
// console.log("finalize <%= action %>", element, reflex, reflexId)
|
|
98
|
+
// }
|
|
87
99
|
<%= "\n" unless action == actions.last -%>
|
|
88
100
|
<% end -%>
|
|
89
101
|
}
|
|
@@ -39,14 +39,22 @@ export default class extends Controller {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
reflexSuccess (element, reflex, noop, reflexId) {
|
|
42
|
-
// show success message
|
|
42
|
+
// show success message
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
reflexError (element, reflex, error, reflexId) {
|
|
46
|
-
// show error message
|
|
46
|
+
// show error message
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
reflexHalted (element, reflex, error, reflexId) {
|
|
50
|
+
// handle aborted Reflex action
|
|
47
51
|
}
|
|
48
52
|
|
|
49
53
|
afterReflex (element, reflex, noop, reflexId) {
|
|
50
54
|
// document.body.classList.remove('wait')
|
|
51
55
|
}
|
|
56
|
+
|
|
57
|
+
finalizeReflex (element, reflex, noop, reflexId) {
|
|
58
|
+
// all operations have completed, animation etc is now safe
|
|
59
|
+
}
|
|
52
60
|
}
|
|
@@ -3,24 +3,33 @@
|
|
|
3
3
|
class <%= class_name %>Reflex < ApplicationReflex
|
|
4
4
|
# Add Reflex methods in this file.
|
|
5
5
|
#
|
|
6
|
-
# All Reflex instances expose the following properties:
|
|
6
|
+
# All Reflex instances include CableReady::Broadcaster and expose the following properties:
|
|
7
7
|
#
|
|
8
|
-
# - connection
|
|
9
|
-
# - channel
|
|
10
|
-
# - request
|
|
11
|
-
# - session
|
|
12
|
-
# -
|
|
13
|
-
# -
|
|
14
|
-
# - params
|
|
8
|
+
# - connection - the ActionCable connection
|
|
9
|
+
# - channel - the ActionCable channel
|
|
10
|
+
# - request - an ActionDispatch::Request proxy for the socket connection
|
|
11
|
+
# - session - the ActionDispatch::Session store for the current visitor
|
|
12
|
+
# - flash - the ActionDispatch::Flash::FlashHash for the current request
|
|
13
|
+
# - url - the URL of the page that triggered the reflex
|
|
14
|
+
# - params - parameters from the element's closest form (if any)
|
|
15
|
+
# - element - a Hash like object that represents the HTML element that triggered the reflex
|
|
16
|
+
# - signed - use a signed Global ID to map dataset attribute to a model eg. element.signed[:foo]
|
|
17
|
+
# - unsigned - use an unsigned Global ID to map dataset attribute to a model eg. element.unsigned[:foo]
|
|
18
|
+
# - cable_ready - a special cable_ready that can broadcast to the current visitor (no brackets needed)
|
|
15
19
|
#
|
|
16
20
|
# Example:
|
|
17
21
|
#
|
|
22
|
+
# before_reflex do
|
|
23
|
+
# # throw :abort # this will prevent the Reflex from continuing
|
|
24
|
+
# # learn more about callbacks at https://docs.stimulusreflex.com/lifecycle
|
|
25
|
+
# end
|
|
26
|
+
#
|
|
18
27
|
# def example(argument=true)
|
|
19
28
|
# # Your logic here...
|
|
20
29
|
# # Any declared instance variables will be made available to the Rails controller and view.
|
|
21
30
|
# end
|
|
22
31
|
#
|
|
23
|
-
# Learn more at: https://docs.stimulusreflex.com
|
|
32
|
+
# Learn more at: https://docs.stimulusreflex.com/reflexes#reflex-classes
|
|
24
33
|
|
|
25
34
|
<% actions.each do |action| -%>
|
|
26
35
|
def <%= action %>
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
class ApplicationReflex < StimulusReflex::Reflex
|
|
4
|
-
# Put application
|
|
4
|
+
# Put application-wide Reflex behavior and callbacks in this file.
|
|
5
5
|
#
|
|
6
6
|
# Example:
|
|
7
7
|
#
|
|
8
8
|
# # If your ActionCable connection is: `identified_by :current_user`
|
|
9
9
|
# delegate :current_user, to: :connection
|
|
10
10
|
#
|
|
11
|
-
# Learn more at: https://docs.stimulusreflex.com
|
|
11
|
+
# Learn more at: https://docs.stimulusreflex.com/reflexes#reflex-classes
|
|
12
12
|
end
|
data/lib/stimulus_reflex.rb
CHANGED
|
@@ -9,6 +9,7 @@ require "action_cable"
|
|
|
9
9
|
require "nokogiri"
|
|
10
10
|
require "cable_ready"
|
|
11
11
|
require "stimulus_reflex/version"
|
|
12
|
+
require "stimulus_reflex/cable_ready_channels"
|
|
12
13
|
require "stimulus_reflex/configuration"
|
|
13
14
|
require "stimulus_reflex/reflex"
|
|
14
15
|
require "stimulus_reflex/element"
|
|
@@ -2,10 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
module StimulusReflex
|
|
4
4
|
class Broadcaster
|
|
5
|
-
include CableReady::Broadcaster
|
|
6
|
-
|
|
7
5
|
attr_reader :reflex, :logger, :operations
|
|
8
|
-
delegate :
|
|
6
|
+
delegate :cable_ready, :permanent_attribute_name, to: :reflex
|
|
9
7
|
|
|
10
8
|
def initialize(reflex)
|
|
11
9
|
@reflex = reflex
|
|
@@ -28,7 +26,7 @@ module StimulusReflex
|
|
|
28
26
|
def broadcast_message(subject:, body: nil, data: {}, error: nil)
|
|
29
27
|
logger.error "\e[31m#{body}\e[0m" if subject == "error"
|
|
30
28
|
operations << ["document", :dispatch_event]
|
|
31
|
-
cable_ready
|
|
29
|
+
cable_ready.dispatch_event(
|
|
32
30
|
name: "stimulus-reflex:server-message",
|
|
33
31
|
detail: {
|
|
34
32
|
reflexId: data["reflexId"],
|
|
@@ -12,7 +12,7 @@ module StimulusReflex
|
|
|
12
12
|
match = fragment.at_css(selector)
|
|
13
13
|
if match.present?
|
|
14
14
|
operations << [selector, :morph]
|
|
15
|
-
cable_ready
|
|
15
|
+
cable_ready.morph(
|
|
16
16
|
selector: selector,
|
|
17
17
|
html: match.inner_html,
|
|
18
18
|
children_only: true,
|
|
@@ -23,7 +23,7 @@ module StimulusReflex
|
|
|
23
23
|
)
|
|
24
24
|
else
|
|
25
25
|
operations << [selector, :inner_html]
|
|
26
|
-
cable_ready
|
|
26
|
+
cable_ready.inner_html(
|
|
27
27
|
selector: selector,
|
|
28
28
|
html: fragment.to_html,
|
|
29
29
|
stimulus_reflex: data.merge({
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module StimulusReflex
|
|
2
|
+
class CableReadyChannels
|
|
3
|
+
def initialize(stream_name)
|
|
4
|
+
@cable_ready_channels = CableReady::Channels.instance
|
|
5
|
+
@stimulus_reflex_channel = @cable_ready_channels[stream_name]
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def method_missing(name, *args)
|
|
9
|
+
return @stimulus_reflex_channel.send(name, *args) if @stimulus_reflex_channel.respond_to?(name)
|
|
10
|
+
@cable_ready_channels.send(name, *args)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def respond_to_missing?(name, include_all)
|
|
14
|
+
@stimulus_reflex_channel.respond_to?(name, include_all) ||
|
|
15
|
+
@cable_ready_channels.respond_to?(name, include_all)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -5,7 +5,6 @@ ClientAttributes = Struct.new(:reflex_id, :reflex_controller, :xpath, :c_xpath,
|
|
|
5
5
|
class StimulusReflex::Reflex
|
|
6
6
|
include ActiveSupport::Rescuable
|
|
7
7
|
include ActiveSupport::Callbacks
|
|
8
|
-
include CableReady::Broadcaster
|
|
9
8
|
|
|
10
9
|
define_callbacks :process, skip_after_callbacks_if_terminated: true
|
|
11
10
|
|
|
@@ -45,7 +44,7 @@ class StimulusReflex::Reflex
|
|
|
45
44
|
end
|
|
46
45
|
end
|
|
47
46
|
|
|
48
|
-
attr_reader :channel, :url, :element, :selectors, :method_name, :broadcaster, :client_attributes, :logger
|
|
47
|
+
attr_reader :cable_ready, :channel, :url, :element, :selectors, :method_name, :broadcaster, :client_attributes, :logger
|
|
49
48
|
|
|
50
49
|
alias_method :action_name, :method_name # for compatibility with controller libraries like Pundit that expect an action name
|
|
51
50
|
|
|
@@ -64,6 +63,7 @@ class StimulusReflex::Reflex
|
|
|
64
63
|
@broadcaster = StimulusReflex::PageBroadcaster.new(self)
|
|
65
64
|
@logger = StimulusReflex::Logger.new(self)
|
|
66
65
|
@client_attributes = ClientAttributes.new(client_attributes)
|
|
66
|
+
@cable_ready = StimulusReflex::CableReadyChannels.new(stream_name)
|
|
67
67
|
self.params
|
|
68
68
|
end
|
|
69
69
|
|
|
@@ -6,6 +6,7 @@ class StimulusReflex::SanityChecker
|
|
|
6
6
|
class << self
|
|
7
7
|
def check!
|
|
8
8
|
return if StimulusReflex.config.on_failed_sanity_checks == :ignore
|
|
9
|
+
return if called_by_installer?
|
|
9
10
|
return if called_by_generate_config?
|
|
10
11
|
|
|
11
12
|
instance = new
|
|
@@ -15,6 +16,12 @@ class StimulusReflex::SanityChecker
|
|
|
15
16
|
|
|
16
17
|
private
|
|
17
18
|
|
|
19
|
+
def called_by_installer?
|
|
20
|
+
Rake.application.top_level_tasks.include? "stimulus_reflex:install"
|
|
21
|
+
rescue
|
|
22
|
+
false
|
|
23
|
+
end
|
|
24
|
+
|
|
18
25
|
def called_by_generate_config?
|
|
19
26
|
ARGV.include? "stimulus_reflex:config"
|
|
20
27
|
end
|
|
@@ -120,13 +127,13 @@ class StimulusReflex::SanityChecker
|
|
|
120
127
|
puts <<~INFO
|
|
121
128
|
If you know what you are doing and you want to start the application anyway,
|
|
122
129
|
you can create a StimulusReflex initializer with the command:
|
|
123
|
-
|
|
130
|
+
|
|
124
131
|
bundle exec rails generate stimulus_reflex:config
|
|
125
|
-
|
|
132
|
+
|
|
126
133
|
Then open your initializer at
|
|
127
|
-
|
|
134
|
+
|
|
128
135
|
<RAILS_ROOT>/config/initializers/stimulus_reflex.rb
|
|
129
|
-
|
|
136
|
+
|
|
130
137
|
and then add the following directive:
|
|
131
138
|
|
|
132
139
|
StimulusReflex.configure do |config|
|
data/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stimulus_reflex",
|
|
3
|
-
"version": "3.4.0-
|
|
3
|
+
"version": "3.4.0-pre5",
|
|
4
4
|
"description": "Build reactive applications with the Rails tooling you already know and love.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ruby",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@rails/actioncable": ">= 6.0",
|
|
44
|
-
"cable_ready": ">= 4.
|
|
44
|
+
"cable_ready": ">= 4.4"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@babel/core": "^7.6.2",
|
data/stimulus_reflex.gemspec
CHANGED
|
@@ -30,7 +30,7 @@ Gem::Specification.new do |gem|
|
|
|
30
30
|
gem.add_dependency "nokogiri"
|
|
31
31
|
gem.add_dependency "rails", ">= 5.2"
|
|
32
32
|
gem.add_dependency "redis"
|
|
33
|
-
gem.add_dependency "cable_ready", ">= 4.
|
|
33
|
+
gem.add_dependency "cable_ready", ">= 4.4"
|
|
34
34
|
|
|
35
35
|
gem.add_development_dependency "bundler", "~> 2.0"
|
|
36
36
|
gem.add_development_dependency "pry-nav"
|
data/tags
CHANGED
|
@@ -6,93 +6,134 @@
|
|
|
6
6
|
!_TAG_PROGRAM_VERSION 5.8 //
|
|
7
7
|
ApplicationReflex test/tmp/app/reflexes/application_reflex.rb /^class ApplicationReflex < StimulusReflex::Reflex$/;" c
|
|
8
8
|
Broadcaster lib/stimulus_reflex/broadcasters/broadcaster.rb /^ class Broadcaster$/;" c class:StimulusReflex
|
|
9
|
-
|
|
9
|
+
CableReadyChannels lib/stimulus_reflex/cable_ready_channels.rb /^ class CableReadyChannels$/;" c class:StimulusReflex
|
|
10
|
+
Colorize lib/stimulus_reflex/utils/colorize.rb /^ module Colorize$/;" m class:StimulusReflex.Utils
|
|
11
|
+
ConfigGenerator lib/generators/stimulus_reflex/config_generator.rb /^ class ConfigGenerator < Rails::Generators::Base$/;" c class:StimulusReflex
|
|
12
|
+
Configuration lib/stimulus_reflex/configuration.rb /^ class Configuration$/;" c
|
|
10
13
|
Engine lib/stimulus_reflex.rb /^ class Engine < Rails::Engine$/;" c class:StimulusReflex
|
|
14
|
+
Logger lib/stimulus_reflex/logger.rb /^ class Logger$/;" c class:StimulusReflex
|
|
11
15
|
NothingBroadcaster lib/stimulus_reflex/broadcasters/nothing_broadcaster.rb /^ class NothingBroadcaster < Broadcaster$/;" c class:StimulusReflex
|
|
12
16
|
PageBroadcaster lib/stimulus_reflex/broadcasters/page_broadcaster.rb /^ class PageBroadcaster < Broadcaster$/;" c class:StimulusReflex
|
|
17
|
+
PostsReflex test/tmp/app/reflexes/posts_reflex.rb /^class PostsReflex < ApplicationReflex$/;" c
|
|
13
18
|
SelectorBroadcaster lib/stimulus_reflex/broadcasters/selector_broadcaster.rb /^ class SelectorBroadcaster < Broadcaster$/;" c class:StimulusReflex
|
|
19
|
+
StimulusReflex app/channels/stimulus_reflex/channel.rb /^class StimulusReflex::Channel < StimulusReflex.configuration.parent_channel.constantize$/;" c
|
|
20
|
+
StimulusReflex lib/generators/stimulus_reflex/config_generator.rb /^module StimulusReflex$/;" m
|
|
14
21
|
StimulusReflex lib/stimulus_reflex.rb /^module StimulusReflex$/;" m
|
|
15
22
|
StimulusReflex lib/stimulus_reflex/broadcasters/broadcaster.rb /^module StimulusReflex$/;" m
|
|
16
23
|
StimulusReflex lib/stimulus_reflex/broadcasters/nothing_broadcaster.rb /^module StimulusReflex$/;" m
|
|
17
24
|
StimulusReflex lib/stimulus_reflex/broadcasters/page_broadcaster.rb /^module StimulusReflex$/;" m
|
|
18
25
|
StimulusReflex lib/stimulus_reflex/broadcasters/selector_broadcaster.rb /^module StimulusReflex$/;" m
|
|
19
|
-
StimulusReflex lib/stimulus_reflex/
|
|
26
|
+
StimulusReflex lib/stimulus_reflex/cable_ready_channels.rb /^module StimulusReflex$/;" m
|
|
27
|
+
StimulusReflex lib/stimulus_reflex/configuration.rb /^module StimulusReflex$/;" m
|
|
20
28
|
StimulusReflex lib/stimulus_reflex/element.rb /^class StimulusReflex::Element < OpenStruct$/;" c
|
|
29
|
+
StimulusReflex lib/stimulus_reflex/logger.rb /^module StimulusReflex$/;" m
|
|
21
30
|
StimulusReflex lib/stimulus_reflex/reflex.rb /^class StimulusReflex::Reflex$/;" c
|
|
31
|
+
StimulusReflex lib/stimulus_reflex/sanity_checker.rb /^class StimulusReflex::SanityChecker$/;" c
|
|
32
|
+
StimulusReflex lib/stimulus_reflex/utils/colorize.rb /^module StimulusReflex$/;" m
|
|
22
33
|
StimulusReflex lib/stimulus_reflex/version.rb /^module StimulusReflex$/;" m
|
|
23
|
-
|
|
34
|
+
StimulusReflex test/broadcasters/broadcaster_test.rb /^class StimulusReflex::BroadcasterTest < ActiveSupport::TestCase$/;" c
|
|
35
|
+
StimulusReflex test/broadcasters/nothing_broadcaster_test.rb /^class StimulusReflex::NothingBroadcasterTest < ActiveSupport::TestCase$/;" c
|
|
36
|
+
StimulusReflex test/broadcasters/page_broadcaster_test.rb /^class StimulusReflex::PageBroadcasterTest < ActiveSupport::TestCase$/;" c
|
|
37
|
+
StimulusReflex test/broadcasters/selector_broadcaster_test.rb /^class StimulusReflex::SelectorBroadcasterTest < ActiveSupport::TestCase$/;" c
|
|
38
|
+
StimulusReflexGenerator lib/generators/stimulus_reflex/stimulus_reflex_generator.rb /^class StimulusReflexGenerator < Rails::Generators::NamedBase$/;" c
|
|
24
39
|
StimulusReflexGeneratorTest test/generators/stimulus_reflex_generator_test.rb /^class StimulusReflexGeneratorTest < Rails::Generators::TestCase$/;" c
|
|
25
|
-
|
|
26
|
-
addDifference lib/stimulus_reflex/compare_xml.rb /^ def addDifference(node1, node2, diff1, diff2, opts, differences)$/;" f class:CompareXML
|
|
40
|
+
Utils lib/stimulus_reflex/utils/colorize.rb /^ module Utils$/;" m class:StimulusReflex
|
|
27
41
|
add_callback lib/stimulus_reflex/reflex.rb /^ def add_callback(kind, *args, &block)$/;" f class:StimulusReflex
|
|
28
42
|
after_reflex lib/stimulus_reflex/reflex.rb /^ def after_reflex(*args, &block)$/;" f class:StimulusReflex
|
|
43
|
+
append_morph lib/stimulus_reflex/broadcasters/selector_broadcaster.rb /^ def append_morph(selectors, html)$/;" f class:StimulusReflex.SelectorBroadcaster
|
|
29
44
|
around_reflex lib/stimulus_reflex/reflex.rb /^ def around_reflex(*args, &block)$/;" f class:StimulusReflex
|
|
30
|
-
attrContentExcluded? lib/stimulus_reflex/compare_xml.rb /^ def attrContentExcluded?(a1, a2, opts)$/;" f class:CompareXML
|
|
31
|
-
attrNameExcluded? lib/stimulus_reflex/compare_xml.rb /^ def attrNameExcluded?(a1, a2, opts)$/;" f class:CompareXML
|
|
32
|
-
attrsExcluded? lib/stimulus_reflex/compare_xml.rb /^ def attrsExcluded?(a1, a2, opts)$/;" f class:CompareXML
|
|
33
45
|
before_reflex lib/stimulus_reflex/reflex.rb /^ def before_reflex(*args, &block)$/;" f class:StimulusReflex
|
|
34
46
|
broadcast lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def broadcast(*args)$/;" f class:StimulusReflex.Broadcaster
|
|
35
47
|
broadcast lib/stimulus_reflex/broadcasters/nothing_broadcaster.rb /^ def broadcast(_, data)$/;" f class:StimulusReflex.NothingBroadcaster
|
|
36
48
|
broadcast lib/stimulus_reflex/broadcasters/page_broadcaster.rb /^ def broadcast(selectors, data)$/;" f class:StimulusReflex.PageBroadcaster
|
|
37
49
|
broadcast lib/stimulus_reflex/broadcasters/selector_broadcaster.rb /^ def broadcast(_, data = {})$/;" f class:StimulusReflex.SelectorBroadcaster
|
|
38
|
-
broadcast_message lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def broadcast_message(subject:, body: nil, data: {})$/;" f class:StimulusReflex.Broadcaster
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
compareUnsortedAttributeSets lib/stimulus_reflex/compare_xml.rb /^ def compareUnsortedAttributeSets(n1, n2, a1_set, a2_set, opts, differences, status = EQUIVALENT)$/;" f class:CompareXML
|
|
50
|
+
broadcast_message lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def broadcast_message(subject:, body: nil, data: {}, error: nil)$/;" f class:StimulusReflex.Broadcaster
|
|
51
|
+
caching_enabled? lib/stimulus_reflex/sanity_checker.rb /^ def caching_enabled?$/;" f
|
|
52
|
+
called_by_generate_config? lib/stimulus_reflex/sanity_checker.rb /^ def called_by_generate_config?$/;" f class:StimulusReflex
|
|
53
|
+
check! lib/stimulus_reflex/sanity_checker.rb /^ def check!$/;" f class:StimulusReflex
|
|
54
|
+
check_caching_enabled lib/stimulus_reflex/sanity_checker.rb /^ def check_caching_enabled$/;" f
|
|
55
|
+
check_javascript_package_version lib/stimulus_reflex/sanity_checker.rb /^ def check_javascript_package_version$/;" f
|
|
56
|
+
commit_session app/channels/stimulus_reflex/channel.rb /^ def commit_session(reflex)$/;" f class:StimulusReflex
|
|
57
|
+
config_logging lib/stimulus_reflex/logger.rb /^ def config_logging$/;" f class:StimulusReflex.Logger
|
|
58
|
+
configuration lib/stimulus_reflex/configuration.rb /^ def configuration$/;" f class:StimulusReflex
|
|
59
|
+
configure lib/stimulus_reflex/configuration.rb /^ def configure$/;" f class:StimulusReflex
|
|
60
|
+
connection_id lib/stimulus_reflex/logger.rb /^ def connection_id$/;" f class:StimulusReflex.Logger
|
|
61
|
+
connection_id_full lib/stimulus_reflex/logger.rb /^ def connection_id_full$/;" f class:StimulusReflex.Logger
|
|
51
62
|
controller lib/stimulus_reflex/reflex.rb /^ def controller$/;" f
|
|
52
|
-
copy_application_files lib/generators/stimulus_reflex_generator.rb /^ def copy_application_files$/;" f class:StimulusReflexGenerator
|
|
63
|
+
copy_application_files lib/generators/stimulus_reflex/stimulus_reflex_generator.rb /^ def copy_application_files$/;" f class:StimulusReflexGenerator
|
|
64
|
+
copy_config_file lib/generators/stimulus_reflex/config_generator.rb /^ def copy_config_file$/;" f class:StimulusReflex.ConfigGenerator
|
|
53
65
|
dataset lib/stimulus_reflex/element.rb /^ def dataset$/;" f class:StimulusReflex
|
|
54
66
|
default_reflex lib/stimulus_reflex/reflex.rb /^ def default_reflex$/;" f
|
|
55
|
-
delegate_call_to_reflex
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
equivalent? lib/stimulus_reflex/compare_xml.rb /^ def equivalent?(n1, n2, opts = {}, childopts = {}, diffchildren = false)$/;" f class:CompareXML
|
|
60
|
-
error javascript/log.js /^function error (response) {$/;" f
|
|
61
|
-
exception_message_with_backtrace lib/stimulus_reflex/channel.rb /^ def exception_message_with_backtrace(exception)$/;" f class:StimulusReflex
|
|
62
|
-
execute lib/generators/stimulus_reflex_generator.rb /^ def execute$/;" f class:StimulusReflexGenerator
|
|
67
|
+
delegate_call_to_reflex app/channels/stimulus_reflex/channel.rb /^ def delegate_call_to_reflex(reflex, method_name, arguments = [])$/;" f class:StimulusReflex
|
|
68
|
+
exception_message_with_backtrace app/channels/stimulus_reflex/channel.rb /^ def exception_message_with_backtrace(exception)$/;" f class:StimulusReflex
|
|
69
|
+
execute lib/generators/stimulus_reflex/stimulus_reflex_generator.rb /^ def execute$/;" f class:StimulusReflexGenerator
|
|
70
|
+
exit_with_info lib/stimulus_reflex/sanity_checker.rb /^ def exit_with_info$/;" f
|
|
63
71
|
export.reflexAttribute javascript/schema.js /^ reflexAttribute: 'data-reflex',$/;" p
|
|
64
72
|
export.reflexDatasetAttribute javascript/schema.js /^ reflexDatasetAttribute: 'data-reflex-dataset'$/;" p
|
|
65
73
|
export.reflexPermanentAttribute javascript/schema.js /^ reflexPermanentAttribute: 'data-reflex-permanent',$/;" p
|
|
66
74
|
export.reflexRootAttribute javascript/schema.js /^ reflexRootAttribute: 'data-reflex-root',$/;" p
|
|
67
75
|
findConsumer javascript/consumer.js /^function findConsumer (object, depth = 0) {$/;" f
|
|
68
|
-
|
|
76
|
+
find_javascript_package_version lib/stimulus_reflex/sanity_checker.rb /^ def find_javascript_package_version$/;" f
|
|
77
|
+
fix_environment! app/channels/stimulus_reflex/channel.rb /^ def fix_environment!$/;" f class:StimulusReflex
|
|
78
|
+
function.error javascript/log.js /^function error (event) {$/;" f
|
|
79
|
+
gem_version lib/stimulus_reflex/sanity_checker.rb /^ def gem_version$/;" f
|
|
69
80
|
halted? lib/stimulus_reflex/reflex.rb /^ def halted?$/;" f
|
|
70
81
|
initialize lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def initialize(reflex)$/;" f class:StimulusReflex.Broadcaster
|
|
82
|
+
initialize lib/stimulus_reflex/cable_ready_channels.rb /^ def initialize(stream_name)$/;" f class:StimulusReflex.CableReadyChannels
|
|
83
|
+
initialize lib/stimulus_reflex/configuration.rb /^ def initialize$/;" f class:Configuration
|
|
71
84
|
initialize lib/stimulus_reflex/element.rb /^ def initialize(data = {})$/;" f class:StimulusReflex
|
|
72
|
-
initialize lib/stimulus_reflex/
|
|
73
|
-
|
|
85
|
+
initialize lib/stimulus_reflex/logger.rb /^ def initialize(reflex)$/;" f class:StimulusReflex.Logger
|
|
86
|
+
initialize lib/stimulus_reflex/reflex.rb /^ def initialize(channel, url: nil, element: nil, selectors: [], method_name: nil, params: {}, client_attributes: {})$/;" f
|
|
87
|
+
initializer_path lib/stimulus_reflex/sanity_checker.rb /^ def initializer_path$/;" f
|
|
88
|
+
is_reflex? app/channels/stimulus_reflex/channel.rb /^ def is_reflex?(reflex_class)$/;" f class:StimulusReflex
|
|
89
|
+
javascript_package_version lib/stimulus_reflex/sanity_checker.rb /^ def javascript_package_version$/;" f
|
|
90
|
+
javascript_version_matches? lib/stimulus_reflex/sanity_checker.rb /^ def javascript_version_matches?$/;" f
|
|
91
|
+
method_missing lib/stimulus_reflex/cable_ready_channels.rb /^ def method_missing(name, *args)$/;" f class:StimulusReflex.CableReadyChannels
|
|
92
|
+
method_missing lib/stimulus_reflex/logger.rb /^ def method_missing method$/;" f class:StimulusReflex.Logger
|
|
93
|
+
mode lib/stimulus_reflex/logger.rb /^ def mode$/;" f class:StimulusReflex.Logger
|
|
74
94
|
morph lib/stimulus_reflex/reflex.rb /^ def morph(selectors, html = "")$/;" f
|
|
75
95
|
morphs lib/stimulus_reflex/broadcasters/selector_broadcaster.rb /^ def morphs$/;" f class:StimulusReflex.SelectorBroadcaster
|
|
76
|
-
nodeExcluded? lib/stimulus_reflex/compare_xml.rb /^ def nodeExcluded?(n, opts)$/;" f class:CompareXML
|
|
77
96
|
normalize_callback_option! lib/stimulus_reflex/reflex.rb /^ def normalize_callback_option!(options, from, to)$/;" f class:StimulusReflex
|
|
78
97
|
normalize_callback_options! lib/stimulus_reflex/reflex.rb /^ def normalize_callback_options!(options)$/;" f class:StimulusReflex
|
|
98
|
+
not_null_store? lib/stimulus_reflex/sanity_checker.rb /^ def not_null_store?$/;" f
|
|
79
99
|
nothing? lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def nothing?$/;" f class:StimulusReflex.Broadcaster
|
|
80
100
|
nothing? lib/stimulus_reflex/broadcasters/nothing_broadcaster.rb /^ def nothing?$/;" f class:StimulusReflex.NothingBroadcaster
|
|
81
|
-
object_with_indifferent_access
|
|
101
|
+
object_with_indifferent_access app/channels/stimulus_reflex/channel.rb /^ def object_with_indifferent_access(object)$/;" f class:StimulusReflex
|
|
102
|
+
operation lib/stimulus_reflex/logger.rb /^ def operation$/;" f class:StimulusReflex.Logger
|
|
103
|
+
operation_counter lib/stimulus_reflex/logger.rb /^ def operation_counter$/;" f class:StimulusReflex.Logger
|
|
104
|
+
package_json_path lib/stimulus_reflex/sanity_checker.rb /^ def package_json_path$/;" f
|
|
82
105
|
page? lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def page?$/;" f class:StimulusReflex.Broadcaster
|
|
83
106
|
page? lib/stimulus_reflex/broadcasters/page_broadcaster.rb /^ def page?$/;" f class:StimulusReflex.PageBroadcaster
|
|
84
|
-
page_cache lib/stimulus_reflex/channel.rb /^ def page_cache$/;" f class:StimulusReflex
|
|
85
107
|
params lib/stimulus_reflex/reflex.rb /^ def params$/;" f
|
|
108
|
+
print lib/stimulus_reflex/logger.rb /^ def print$/;" f class:StimulusReflex.Logger
|
|
109
|
+
private_instance_methods lib/stimulus_reflex/logger.rb /^ def private_instance_methods$/;" f class:StimulusReflex.Logger
|
|
86
110
|
process lib/stimulus_reflex/reflex.rb /^ def process(name, *args)$/;" f
|
|
87
|
-
receive
|
|
111
|
+
receive app/channels/stimulus_reflex/channel.rb /^ def receive(data)$/;" f class:StimulusReflex
|
|
112
|
+
reflex_id lib/stimulus_reflex/logger.rb /^ def reflex_id$/;" f class:StimulusReflex.Logger
|
|
113
|
+
reflex_id_full lib/stimulus_reflex/logger.rb /^ def reflex_id_full$/;" f class:StimulusReflex.Logger
|
|
114
|
+
reflex_info lib/stimulus_reflex/logger.rb /^ def reflex_info$/;" f class:StimulusReflex.Logger
|
|
115
|
+
request javascript/log.js /^function request (reflexId, target, args, controller, element) {$/;" f
|
|
88
116
|
request lib/stimulus_reflex/reflex.rb /^ def request$/;" f
|
|
117
|
+
request.success javascript/log.js /^function success (event) {$/;" f
|
|
118
|
+
respond_to_missing? lib/stimulus_reflex/cable_ready_channels.rb /^ def respond_to_missing?(name, include_all)$/;" f class:StimulusReflex.CableReadyChannels
|
|
119
|
+
respond_to_missing? lib/stimulus_reflex/logger.rb /^ def respond_to_missing? method$/;" f class:StimulusReflex.Logger
|
|
120
|
+
search_file lib/stimulus_reflex/sanity_checker.rb /^ def search_file(path, regex:)$/;" f
|
|
121
|
+
selector lib/stimulus_reflex/logger.rb /^ def selector$/;" f class:StimulusReflex.Logger
|
|
89
122
|
selector? lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def selector?$/;" f class:StimulusReflex.Broadcaster
|
|
90
123
|
selector? lib/stimulus_reflex/broadcasters/selector_broadcaster.rb /^ def selector?$/;" f class:StimulusReflex.SelectorBroadcaster
|
|
91
|
-
|
|
92
|
-
|
|
124
|
+
session_id lib/stimulus_reflex/logger.rb /^ def session_id$/;" f class:StimulusReflex.Logger
|
|
125
|
+
session_id_full lib/stimulus_reflex/logger.rb /^ def session_id_full$/;" f class:StimulusReflex.Logger
|
|
126
|
+
signed lib/stimulus_reflex/element.rb /^ def signed$/;" f class:StimulusReflex
|
|
127
|
+
stream_name app/channels/stimulus_reflex/channel.rb /^ def stream_name$/;" f class:StimulusReflex
|
|
128
|
+
subscribed app/channels/stimulus_reflex/channel.rb /^ def subscribed$/;" f class:StimulusReflex
|
|
129
|
+
timestamp lib/stimulus_reflex/logger.rb /^ def timestamp$/;" f class:StimulusReflex.Logger
|
|
130
|
+
to_s lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def to_s$/;" f class:StimulusReflex.Broadcaster
|
|
131
|
+
to_s lib/stimulus_reflex/broadcasters/nothing_broadcaster.rb /^ def to_s$/;" f class:StimulusReflex.NothingBroadcaster
|
|
132
|
+
to_s lib/stimulus_reflex/broadcasters/page_broadcaster.rb /^ def to_s$/;" f class:StimulusReflex.PageBroadcaster
|
|
133
|
+
to_s lib/stimulus_reflex/broadcasters/selector_broadcaster.rb /^ def to_s$/;" f class:StimulusReflex.SelectorBroadcaster
|
|
93
134
|
to_sym lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def to_sym$/;" f class:StimulusReflex.Broadcaster
|
|
94
135
|
to_sym lib/stimulus_reflex/broadcasters/nothing_broadcaster.rb /^ def to_sym$/;" f class:StimulusReflex.NothingBroadcaster
|
|
95
136
|
to_sym lib/stimulus_reflex/broadcasters/page_broadcaster.rb /^ def to_sym$/;" f class:StimulusReflex.PageBroadcaster
|
|
96
137
|
to_sym lib/stimulus_reflex/broadcasters/selector_broadcaster.rb /^ def to_sym$/;" f class:StimulusReflex.SelectorBroadcaster
|
|
97
|
-
|
|
98
|
-
|
|
138
|
+
unsigned lib/stimulus_reflex/element.rb /^ def unsigned$/;" f class:StimulusReflex
|
|
139
|
+
warn_and_exit lib/stimulus_reflex/sanity_checker.rb /^ def warn_and_exit(text)$/;" f
|
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
require_relative "
|
|
2
|
-
|
|
3
|
-
class StimulusReflex::BroadcasterTest < ActiveSupport::TestCase
|
|
4
|
-
setup do
|
|
5
|
-
@reflex = Minitest::Mock.new
|
|
6
|
-
@reflex.expect :stream_name, "TestStream"
|
|
7
|
-
end
|
|
1
|
+
require_relative "broadcaster_test_case"
|
|
8
2
|
|
|
3
|
+
class StimulusReflex::BroadcasterTest < StimulusReflex::BroadcasterTestCase
|
|
9
4
|
test "raises a NotImplementedError if called directly" do
|
|
10
5
|
broadcaster = StimulusReflex::Broadcaster.new(@reflex)
|
|
11
6
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require_relative "../test_helper"
|
|
2
|
+
|
|
3
|
+
class StimulusReflex::BroadcasterTestCase < ActionCable::Channel::TestCase
|
|
4
|
+
tests StimulusReflex::Channel
|
|
5
|
+
|
|
6
|
+
setup do
|
|
7
|
+
stub_connection(session_id: SecureRandom.uuid)
|
|
8
|
+
def connection.env
|
|
9
|
+
@env ||= {}
|
|
10
|
+
end
|
|
11
|
+
@reflex = StimulusReflex::Reflex.new(subscribe, url: "https://test.stimulusreflex.com")
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -1,34 +1,33 @@
|
|
|
1
|
-
require_relative "
|
|
2
|
-
|
|
3
|
-
class StimulusReflex::NothingBroadcasterTest < ActiveSupport::TestCase
|
|
4
|
-
setup do
|
|
5
|
-
@reflex = Minitest::Mock.new
|
|
6
|
-
@reflex.expect :stream_name, "TestStream"
|
|
7
|
-
end
|
|
1
|
+
require_relative "broadcaster_test_case"
|
|
8
2
|
|
|
3
|
+
class StimulusReflex::NothingBroadcasterTest < StimulusReflex::BroadcasterTestCase
|
|
9
4
|
test "broadcasts a server message when called" do
|
|
10
5
|
broadcaster = StimulusReflex::NothingBroadcaster.new(@reflex)
|
|
11
6
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
7
|
+
expected = {
|
|
8
|
+
"cableReady" => true,
|
|
9
|
+
"operations" => {
|
|
10
|
+
"dispatchEvent" => [
|
|
11
|
+
{
|
|
12
|
+
"name" => "stimulus-reflex:server-message",
|
|
13
|
+
"detail" => {
|
|
14
|
+
"reflexId" => nil,
|
|
15
|
+
"stimulusReflex" => {
|
|
16
|
+
"some" => :data,
|
|
17
|
+
"morph" => :nothing,
|
|
18
|
+
"serverMessage" => {
|
|
19
|
+
"subject" => "nothing",
|
|
20
|
+
"body" => nil
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
30
28
|
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
assert_broadcast_on @reflex.stream_name, expected do
|
|
30
|
+
broadcaster.broadcast nil, some: :data
|
|
31
|
+
end
|
|
33
32
|
end
|
|
34
33
|
end
|
|
@@ -1,69 +1,73 @@
|
|
|
1
|
-
require_relative "
|
|
2
|
-
|
|
3
|
-
class StimulusReflex::PageBroadcasterTest < ActiveSupport::TestCase
|
|
4
|
-
setup do
|
|
5
|
-
@reflex = Minitest::Mock.new
|
|
6
|
-
@reflex.expect :params, {action: "show"}
|
|
7
|
-
@reflex.expect :stream_name, "TestStream"
|
|
8
|
-
@reflex.expect :permanent_attribute_name, "some-attribute"
|
|
9
|
-
end
|
|
1
|
+
require_relative "broadcaster_test_case"
|
|
10
2
|
|
|
3
|
+
class StimulusReflex::PageBroadcasterTest < StimulusReflex::BroadcasterTestCase
|
|
11
4
|
test "returns if the response html is empty" do
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
5
|
+
broadcaster = StimulusReflex::PageBroadcaster.new(@reflex)
|
|
6
|
+
broadcaster.broadcast(["#foo"], {some: :data})
|
|
7
|
+
# TODO: figure out how to refute_broadcast_on
|
|
8
|
+
end
|
|
16
9
|
|
|
17
|
-
|
|
18
|
-
controller.
|
|
10
|
+
test "performs a page morph on body" do
|
|
11
|
+
class << @reflex.controller.response
|
|
12
|
+
def body
|
|
13
|
+
"<html><head></head><body>New Content</body></html>"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
19
16
|
|
|
20
17
|
broadcaster = StimulusReflex::PageBroadcaster.new(@reflex)
|
|
21
18
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
expected = {
|
|
20
|
+
"cableReady" => true,
|
|
21
|
+
"operations" => {
|
|
22
|
+
"morph" => [
|
|
23
|
+
{
|
|
24
|
+
"selector" => "body",
|
|
25
|
+
"html" => "New Content",
|
|
26
|
+
"childrenOnly" => true,
|
|
27
|
+
"permanentAttributeName" => nil,
|
|
28
|
+
"stimulusReflex" => {
|
|
29
|
+
"some" => :data,
|
|
30
|
+
"morph" => :page
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
}
|
|
26
36
|
|
|
27
|
-
|
|
37
|
+
assert_broadcast_on @reflex.stream_name, expected do
|
|
38
|
+
broadcaster.broadcast(["body"], {some: :data})
|
|
39
|
+
end
|
|
28
40
|
end
|
|
29
41
|
|
|
30
42
|
test "performs a page morph given an array of reflex root selectors" do
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
# stub the controller response with a struct responding to :body
|
|
37
|
-
controller.expect(:response, Struct.new(:body).new("<html></html>"))
|
|
43
|
+
class << @reflex.controller.response
|
|
44
|
+
def body
|
|
45
|
+
"<html><head></head><body><div id=\"foo\">New Content</div></body></html>"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
38
48
|
|
|
39
49
|
broadcaster = StimulusReflex::PageBroadcaster.new(@reflex)
|
|
40
50
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
stimulus_reflex: {
|
|
55
|
-
some: :data,
|
|
56
|
-
morph: :page
|
|
51
|
+
expected = {
|
|
52
|
+
"cableReady" => true,
|
|
53
|
+
"operations" => {
|
|
54
|
+
"morph" => [
|
|
55
|
+
{
|
|
56
|
+
"selector" => "#foo",
|
|
57
|
+
"html" => "New Content",
|
|
58
|
+
"childrenOnly" => true,
|
|
59
|
+
"permanentAttributeName" => nil,
|
|
60
|
+
"stimulusReflex" => {
|
|
61
|
+
"some" => :data,
|
|
62
|
+
"morph" => :page
|
|
63
|
+
}
|
|
57
64
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
}
|
|
61
68
|
|
|
62
|
-
|
|
63
|
-
|
|
69
|
+
assert_broadcast_on @reflex.stream_name, expected do
|
|
70
|
+
broadcaster.broadcast(["#foo"], {some: :data})
|
|
64
71
|
end
|
|
65
|
-
|
|
66
|
-
assert_mock cable_ready_channels
|
|
67
|
-
assert_mock cable_ready_channel
|
|
68
72
|
end
|
|
69
73
|
end
|
|
@@ -1,83 +1,55 @@
|
|
|
1
|
-
require_relative "
|
|
2
|
-
|
|
3
|
-
class StimulusReflex::SelectorBroadcasterTest <
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
fragment.expect(:at_css, match, ["#foo"])
|
|
57
|
-
fragment.expect(:to_html, "<div id=\"baz\"><span>bar</span></div>")
|
|
58
|
-
match.expect(:present?, false)
|
|
59
|
-
|
|
60
|
-
# we need to mock `!`, because `blank?` returns
|
|
61
|
-
# respond_to?(:empty?) ? !!empty? : !self
|
|
62
|
-
match.expect(:!, true)
|
|
63
|
-
CableReady::Channels.stub :instance, cable_ready_channels do
|
|
64
|
-
broadcaster.append_morph("#foo", "<div id=\"baz\"><span>bar</span></div>")
|
|
65
|
-
cable_ready_channel.expect(:inner_html, nil, [{
|
|
66
|
-
selector: "#foo",
|
|
67
|
-
html: "<div id=\"baz\"><span>bar</span></div>",
|
|
68
|
-
stimulus_reflex: {
|
|
69
|
-
some: :data,
|
|
70
|
-
morph: :selector
|
|
71
|
-
}
|
|
72
|
-
}])
|
|
73
|
-
cable_ready_channels.expect(:[], cable_ready_channel, ["TestStream"])
|
|
74
|
-
cable_ready_channels.expect(:broadcast, nil)
|
|
75
|
-
|
|
76
|
-
broadcaster.broadcast(nil, {some: :data})
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
assert_mock cable_ready_channels
|
|
81
|
-
assert_mock cable_ready_channel
|
|
82
|
-
end
|
|
83
|
-
end
|
|
1
|
+
# require_relative "broadcaster_test_case"
|
|
2
|
+
|
|
3
|
+
# class StimulusReflex::SelectorBroadcasterTest < StimulusReflex::BroadcasterTestCase
|
|
4
|
+
# test "morphs the contents of an element if the selector(s) are present in both original and morphed html fragments" do
|
|
5
|
+
# broadcaster = StimulusReflex::SelectorBroadcaster.new(@reflex)
|
|
6
|
+
# broadcaster.append_morph("#foo", "<div id=\"foo\"><span>bar</span></div>")
|
|
7
|
+
|
|
8
|
+
# expected = {
|
|
9
|
+
# "cableReady" => true,
|
|
10
|
+
# "operations" => {
|
|
11
|
+
# "morph" => [
|
|
12
|
+
# {
|
|
13
|
+
# "selector" => "#foo",
|
|
14
|
+
# "html" => "<span>bar</span>",
|
|
15
|
+
# "childrenOnly" => true,
|
|
16
|
+
# "permanentAttributeName" => nil,
|
|
17
|
+
# "stimulusReflex" => {
|
|
18
|
+
# "some" => :data,
|
|
19
|
+
# "morph" => :selector
|
|
20
|
+
# }
|
|
21
|
+
# }
|
|
22
|
+
# ]
|
|
23
|
+
# }
|
|
24
|
+
# }
|
|
25
|
+
|
|
26
|
+
# assert_broadcast_on @reflex.stream_name, expected do
|
|
27
|
+
# broadcaster.broadcast nil, some: :data
|
|
28
|
+
# end
|
|
29
|
+
# end
|
|
30
|
+
|
|
31
|
+
# test "replaces the contents of an element and ignores permanent-attributes if the selector(s) aren't present in the replacing html fragment" do
|
|
32
|
+
# broadcaster = StimulusReflex::SelectorBroadcaster.new(@reflex)
|
|
33
|
+
# broadcaster.append_morph("#foo", "<div id=\"baz\"><span>bar</span></div>")
|
|
34
|
+
|
|
35
|
+
# expected = {
|
|
36
|
+
# "cableReady" => true,
|
|
37
|
+
# "operations" => {
|
|
38
|
+
# "innerHtml" => [
|
|
39
|
+
# {
|
|
40
|
+
# "selector" => "#foo",
|
|
41
|
+
# "html" => "<div id=\"baz\"><span>bar</span></div>",
|
|
42
|
+
# "stimulusReflex" => {
|
|
43
|
+
# "some" => :data,
|
|
44
|
+
# "morph" => :selector
|
|
45
|
+
# }
|
|
46
|
+
# }
|
|
47
|
+
# ]
|
|
48
|
+
# }
|
|
49
|
+
# }
|
|
50
|
+
|
|
51
|
+
# assert_broadcast_on @reflex.stream_name, expected do
|
|
52
|
+
# broadcaster.broadcast nil, some: :data
|
|
53
|
+
# end
|
|
54
|
+
# end
|
|
55
|
+
# end
|
data/test/test_helper.rb
CHANGED
|
@@ -1,6 +1,41 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "minitest/mock"
|
|
4
|
-
|
|
5
3
|
ENV["RAILS_ENV"] ||= "test"
|
|
4
|
+
|
|
5
|
+
require "minitest/mock"
|
|
6
|
+
require "rails"
|
|
7
|
+
require "action_controller"
|
|
8
|
+
require "pry"
|
|
6
9
|
require_relative "../lib/stimulus_reflex"
|
|
10
|
+
|
|
11
|
+
class TestApp < Rails::Application
|
|
12
|
+
routes.draw { root to: "test#index" }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class ApplicationController < ActionController::Base; end
|
|
16
|
+
|
|
17
|
+
class TestController < ApplicationController
|
|
18
|
+
include Rails.application.routes.url_helpers
|
|
19
|
+
|
|
20
|
+
def index
|
|
21
|
+
head :ok
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class SessionMock
|
|
26
|
+
def load!
|
|
27
|
+
nil
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class ActionDispatch::Request
|
|
32
|
+
def session
|
|
33
|
+
@session ||= SessionMock.new
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
StimulusReflex.configuration.parent_channel = "ActionCable::Channel::Base"
|
|
38
|
+
ActionCable::Server::Base.config.cable = {adapter: "test"}
|
|
39
|
+
ActionCable::Server::Base.config.logger = Logger.new(nil)
|
|
40
|
+
|
|
41
|
+
require_relative "../app/channels/stimulus_reflex/channel"
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
class ApplicationReflex < StimulusReflex::Reflex
|
|
4
|
-
# Put application
|
|
4
|
+
# Put application-wide Reflex behavior and callbacks in this file.
|
|
5
5
|
#
|
|
6
6
|
# Example:
|
|
7
7
|
#
|
|
8
8
|
# # If your ActionCable connection is: `identified_by :current_user`
|
|
9
9
|
# delegate :current_user, to: :connection
|
|
10
10
|
#
|
|
11
|
-
# Learn more at: https://docs.stimulusreflex.com
|
|
11
|
+
# Learn more at: https://docs.stimulusreflex.com/reflexes#reflex-classes
|
|
12
12
|
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class DemoReflex < ApplicationReflex
|
|
4
|
+
# Add Reflex methods in this file.
|
|
5
|
+
#
|
|
6
|
+
# All Reflex instances include CableReady::Broadcaster and expose the following properties:
|
|
7
|
+
#
|
|
8
|
+
# - connection - the ActionCable connection
|
|
9
|
+
# - channel - the ActionCable channel
|
|
10
|
+
# - request - an ActionDispatch::Request proxy for the socket connection
|
|
11
|
+
# - session - the ActionDispatch::Session store for the current visitor
|
|
12
|
+
# - flash - the ActionDispatch::Flash::FlashHash for the current request
|
|
13
|
+
# - url - the URL of the page that triggered the reflex
|
|
14
|
+
# - params - parameters from the element's closest form (if any)
|
|
15
|
+
# - element - a Hash like object that represents the HTML element that triggered the reflex
|
|
16
|
+
# - signed - use a signed Global ID to map dataset attribute to a model eg. element.signed[:foo]
|
|
17
|
+
# - unsigned - use an unsigned Global ID to map dataset attribute to a model eg. element.unsigned[:foo]
|
|
18
|
+
# - cable_ready - a special cable_ready that can broadcast to the current visitor (no brackets needed)
|
|
19
|
+
#
|
|
20
|
+
# Example:
|
|
21
|
+
#
|
|
22
|
+
# before_reflex do
|
|
23
|
+
# # throw :abort # this will prevent the Reflex from continuing
|
|
24
|
+
# # learn more about callbacks at https://docs.stimulusreflex.com/lifecycle
|
|
25
|
+
# end
|
|
26
|
+
#
|
|
27
|
+
# def example(argument=true)
|
|
28
|
+
# # Your logic here...
|
|
29
|
+
# # Any declared instance variables will be made available to the Rails controller and view.
|
|
30
|
+
# end
|
|
31
|
+
#
|
|
32
|
+
# Learn more at: https://docs.stimulusreflex.com/reflexes#reflex-classes
|
|
33
|
+
|
|
34
|
+
end
|
data/yarn.lock
CHANGED
|
@@ -1255,10 +1255,10 @@ buffer-from@^1.0.0:
|
|
|
1255
1255
|
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
|
1256
1256
|
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
|
|
1257
1257
|
|
|
1258
|
-
"cable_ready@>= 4.
|
|
1259
|
-
version "4.4.
|
|
1260
|
-
resolved "https://registry.yarnpkg.com/cable_ready/-/cable_ready-4.4.
|
|
1261
|
-
integrity sha512-
|
|
1258
|
+
"cable_ready@>= 4.4":
|
|
1259
|
+
version "4.4.1"
|
|
1260
|
+
resolved "https://registry.yarnpkg.com/cable_ready/-/cable_ready-4.4.1.tgz#b97564fb9347b2ad9ad21519956f1a5e5fa3690d"
|
|
1261
|
+
integrity sha512-dB8W2JVQMuSW3YYyl321mZOrkdCt+10KVAeL+51/o6dC5H/QTWSZPj//POYEFynVL8hShYU9joC5Qrw0B5lxLw==
|
|
1262
1262
|
dependencies:
|
|
1263
1263
|
morphdom "^2.6.1"
|
|
1264
1264
|
|
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.0.
|
|
4
|
+
version: 3.4.0.pre6
|
|
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-
|
|
11
|
+
date: 2020-11-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rack
|
|
@@ -72,14 +72,14 @@ dependencies:
|
|
|
72
72
|
requirements:
|
|
73
73
|
- - ">="
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: 4.
|
|
75
|
+
version: '4.4'
|
|
76
76
|
type: :runtime
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - ">="
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: 4.
|
|
82
|
+
version: '4.4'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: bundler
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -183,6 +183,7 @@ files:
|
|
|
183
183
|
- lib/stimulus_reflex/broadcasters/nothing_broadcaster.rb
|
|
184
184
|
- lib/stimulus_reflex/broadcasters/page_broadcaster.rb
|
|
185
185
|
- lib/stimulus_reflex/broadcasters/selector_broadcaster.rb
|
|
186
|
+
- lib/stimulus_reflex/cable_ready_channels.rb
|
|
186
187
|
- lib/stimulus_reflex/configuration.rb
|
|
187
188
|
- lib/stimulus_reflex/element.rb
|
|
188
189
|
- lib/stimulus_reflex/logger.rb
|
|
@@ -195,13 +196,14 @@ files:
|
|
|
195
196
|
- stimulus_reflex.gemspec
|
|
196
197
|
- tags
|
|
197
198
|
- test/broadcasters/broadcaster_test.rb
|
|
199
|
+
- test/broadcasters/broadcaster_test_case.rb
|
|
198
200
|
- test/broadcasters/nothing_broadcaster_test.rb
|
|
199
201
|
- test/broadcasters/page_broadcaster_test.rb
|
|
200
202
|
- test/broadcasters/selector_broadcaster_test.rb
|
|
201
203
|
- test/generators/stimulus_reflex_generator_test.rb
|
|
202
204
|
- test/test_helper.rb
|
|
203
205
|
- test/tmp/app/reflexes/application_reflex.rb
|
|
204
|
-
- test/tmp/app/reflexes/
|
|
206
|
+
- test/tmp/app/reflexes/demo_reflex.rb
|
|
205
207
|
- yarn.lock
|
|
206
208
|
homepage: https://github.com/hopsoft/stimulus_reflex
|
|
207
209
|
licenses:
|
|
@@ -238,9 +240,10 @@ summary: Build reactive applications with the Rails tooling you already know and
|
|
|
238
240
|
test_files:
|
|
239
241
|
- test/test_helper.rb
|
|
240
242
|
- test/generators/stimulus_reflex_generator_test.rb
|
|
243
|
+
- test/tmp/app/reflexes/demo_reflex.rb
|
|
241
244
|
- test/tmp/app/reflexes/application_reflex.rb
|
|
242
|
-
- test/tmp/app/reflexes/posts_reflex.rb
|
|
243
245
|
- test/broadcasters/broadcaster_test.rb
|
|
244
246
|
- test/broadcasters/selector_broadcaster_test.rb
|
|
245
247
|
- test/broadcasters/page_broadcaster_test.rb
|
|
248
|
+
- test/broadcasters/broadcaster_test_case.rb
|
|
246
249
|
- test/broadcasters/nothing_broadcaster_test.rb
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class PostsReflex < ApplicationReflex
|
|
4
|
-
# Add Reflex methods in this file.
|
|
5
|
-
#
|
|
6
|
-
# All Reflex instances expose the following properties:
|
|
7
|
-
#
|
|
8
|
-
# - connection - the ActionCable connection
|
|
9
|
-
# - channel - the ActionCable channel
|
|
10
|
-
# - request - an ActionDispatch::Request proxy for the socket connection
|
|
11
|
-
# - session - the ActionDispatch::Session store for the current visitor
|
|
12
|
-
# - url - the URL of the page that triggered the reflex
|
|
13
|
-
# - element - a Hash like object that represents the HTML element that triggered the reflex
|
|
14
|
-
# - params - parameters from the element's closest form (if any)
|
|
15
|
-
#
|
|
16
|
-
# Example:
|
|
17
|
-
#
|
|
18
|
-
# def example(argument=true)
|
|
19
|
-
# # Your logic here...
|
|
20
|
-
# # Any declared instance variables will be made available to the Rails controller and view.
|
|
21
|
-
# end
|
|
22
|
-
#
|
|
23
|
-
# Learn more at: https://docs.stimulusreflex.com
|
|
24
|
-
end
|