stimulus_reflex 3.4.0.pre5 → 3.4.0

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.

Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +78 -2
  3. data/Gemfile.lock +76 -73
  4. data/README.md +5 -8
  5. data/Rakefile +5 -5
  6. data/app/channels/stimulus_reflex/channel.rb +22 -0
  7. data/bin/console +1 -0
  8. data/lib/generators/stimulus_reflex/templates/app/javascript/controllers/%file_name%_controller.js.tt +14 -2
  9. data/lib/generators/stimulus_reflex/templates/app/javascript/controllers/application_controller.js.tt +10 -2
  10. data/lib/generators/stimulus_reflex/templates/app/reflexes/%file_name%_reflex.rb.tt +19 -9
  11. data/lib/generators/stimulus_reflex/templates/app/reflexes/application_reflex.rb.tt +2 -2
  12. data/lib/generators/stimulus_reflex/templates/config/initializers/stimulus_reflex.rb +10 -1
  13. data/lib/stimulus_reflex.rb +2 -1
  14. data/lib/stimulus_reflex/broadcasters/broadcaster.rb +2 -4
  15. data/lib/stimulus_reflex/broadcasters/page_broadcaster.rb +2 -1
  16. data/lib/stimulus_reflex/broadcasters/selector_broadcaster.rb +2 -2
  17. data/lib/stimulus_reflex/cable_ready_channels.rb +21 -0
  18. data/lib/stimulus_reflex/configuration.rb +2 -1
  19. data/lib/stimulus_reflex/reflex.rb +16 -6
  20. data/lib/stimulus_reflex/sanity_checker.rb +18 -4
  21. data/lib/stimulus_reflex/version.rb +1 -1
  22. data/lib/tasks/stimulus_reflex/install.rake +8 -3
  23. data/package.json +3 -3
  24. data/stimulus_reflex.gemspec +3 -1
  25. data/tags +95 -37
  26. data/test/broadcasters/broadcaster_test.rb +3 -6
  27. data/test/broadcasters/broadcaster_test_case.rb +15 -0
  28. data/test/broadcasters/nothing_broadcaster_test.rb +27 -26
  29. data/test/broadcasters/page_broadcaster_test.rb +56 -50
  30. data/test/broadcasters/selector_broadcaster_test.rb +57 -83
  31. data/test/reflex_test.rb +32 -0
  32. data/test/test_helper.rb +43 -2
  33. data/test/tmp/app/reflexes/application_reflex.rb +2 -2
  34. data/test/tmp/app/reflexes/demo_reflex.rb +34 -0
  35. data/yarn.lock +199 -226
  36. metadata +13 -8
  37. data/test/tmp/app/reflexes/posts_reflex.rb +0 -24
@@ -39,14 +39,22 @@ export default class extends Controller {
39
39
  }
40
40
 
41
41
  reflexSuccess (element, reflex, noop, reflexId) {
42
- // show success message etc...
42
+ // show success message
43
43
  }
44
44
 
45
45
  reflexError (element, reflex, error, reflexId) {
46
- // show error message etc...
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,34 @@
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 - 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)
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
+ # - reflex_id - a UUIDv4 that uniquely identies each Reflex
15
20
  #
16
21
  # Example:
17
22
  #
23
+ # before_reflex do
24
+ # # throw :abort # this will prevent the Reflex from continuing
25
+ # # learn more about callbacks at https://docs.stimulusreflex.com/lifecycle
26
+ # end
27
+ #
18
28
  # def example(argument=true)
19
29
  # # Your logic here...
20
30
  # # Any declared instance variables will be made available to the Rails controller and view.
21
31
  # end
22
32
  #
23
- # Learn more at: https://docs.stimulusreflex.com
33
+ # Learn more at: https://docs.stimulusreflex.com/reflexes#reflex-classes
24
34
 
25
35
  <% actions.each do |action| -%>
26
36
  def <%= action %>
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ApplicationReflex < StimulusReflex::Reflex
4
- # Put application wide Reflex behavior in this file.
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
@@ -12,9 +12,18 @@ StimulusReflex.configure do |config|
12
12
 
13
13
  # Customize server-side Reflex logging format, with optional colorization:
14
14
  # Available tokens: session_id, session_id_full, reflex_info, operation, reflex_id, reflex_id_full, mode, selector, operation_counter, connection_id, connection_id_full, timestamp
15
- # Available colors: green, yellow, blue, magenta, cyan, white
15
+ # Available colors: red, green, yellow, blue, magenta, cyan, white
16
16
  # You can also use attributes from your ActionCable Connection's identifiers that resolve to valid ActiveRecord models
17
17
  # eg. if your connection is `identified_by :current_user` and your User model has an email attribute, you can access r.email (it will display `-` if the user isn't logged in)
18
+ # Learn more at: https://docs.stimulusreflex.com/troubleshooting#stimulusreflex-logging
18
19
 
19
20
  # config.logging = proc { "[#{session_id}] #{operation_counter.magenta} #{reflex_info.green} -> #{selector.cyan} via #{mode} Morph (#{operation.yellow})" }
21
+
22
+ # Optimized for speed, StimulusReflex doesn't enable Rack middleware by default.
23
+ # If you are using Page Morphs and your app uses Rack middleware to rewrite part of the request path, you must enable those middleware modules in StimulusReflex.
24
+ #
25
+ # Learn more about registering Rack middleware in Rails here: https://guides.rubyonrails.org/rails_on_rack.html#configuring-middleware-stack
26
+
27
+ # config.middleware.use FirstRackMiddleware
28
+ # config.middleware.use SecondRackMiddleware
20
29
  end
@@ -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"
@@ -23,7 +24,7 @@ require "stimulus_reflex/logger"
23
24
  module StimulusReflex
24
25
  class Engine < Rails::Engine
25
26
  initializer "stimulus_reflex.sanity_check" do
26
- SanityChecker.check!
27
+ SanityChecker.check! unless Rails.env.production?
27
28
  end
28
29
  end
29
30
  end
@@ -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 :permanent_attribute_name, :stream_name, to: :reflex
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[stream_name].dispatch_event(
29
+ cable_ready.dispatch_event(
32
30
  name: "stimulus-reflex:server-message",
33
31
  detail: {
34
32
  reflexId: data["reflexId"],
@@ -13,7 +13,7 @@ module StimulusReflex
13
13
  selectors.each do |selector|
14
14
  operations << [selector, :morph]
15
15
  html = document.css(selector).inner_html
16
- cable_ready[stream_name].morph(
16
+ cable_ready.morph(
17
17
  selector: selector,
18
18
  html: html,
19
19
  children_only: true,
@@ -23,6 +23,7 @@ module StimulusReflex
23
23
  })
24
24
  )
25
25
  end
26
+
26
27
  cable_ready.broadcast
27
28
  end
28
29
 
@@ -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[stream_name].morph(
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[stream_name].inner_html(
26
+ cable_ready.inner_html(
27
27
  selector: selector,
28
28
  html: fragment.to_html,
29
29
  stimulus_reflex: data.merge({
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StimulusReflex
4
+ class CableReadyChannels
5
+ stimulus_reflex_channel_methods = CableReady::Channels.instance.operations.keys + [:broadcast, :broadcast_to]
6
+ delegate(*stimulus_reflex_channel_methods, to: "stimulus_reflex_channel")
7
+ delegate :[], to: "cable_ready_channels"
8
+
9
+ def initialize(stream_name)
10
+ @stream_name = stream_name
11
+ end
12
+
13
+ def cable_ready_channels
14
+ CableReady::Channels.instance
15
+ end
16
+
17
+ def stimulus_reflex_channel
18
+ CableReady::Channels.instance[@stream_name]
19
+ end
20
+ end
21
+ end
@@ -14,7 +14,7 @@ module StimulusReflex
14
14
  end
15
15
 
16
16
  class Configuration
17
- attr_accessor :on_failed_sanity_checks, :parent_channel, :logging
17
+ attr_accessor :on_failed_sanity_checks, :parent_channel, :logging, :middleware
18
18
 
19
19
  DEFAULT_LOGGING = proc { "[#{session_id}] #{operation_counter.magenta} #{reflex_info.green} -> #{selector.cyan} via #{mode} Morph (#{operation.yellow})" }
20
20
 
@@ -22,6 +22,7 @@ module StimulusReflex
22
22
  @on_failed_sanity_checks = :exit
23
23
  @parent_channel = "ApplicationCable::Channel"
24
24
  @logging = DEFAULT_LOGGING
25
+ @middleware = ActionDispatch::MiddlewareStack.new
25
26
  end
26
27
  end
27
28
  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,14 +44,16 @@ 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
 
52
51
  delegate :connection, :stream_name, to: :channel
53
- delegate :flash, :session, to: :request
52
+ delegate :controller_class, :flash, :session, to: :request
54
53
  delegate :broadcast, :broadcast_message, to: :broadcaster
55
54
  delegate :reflex_id, :reflex_controller, :xpath, :c_xpath, :permanent_attribute_name, to: :client_attributes
55
+ delegate :render, to: :controller_class
56
+ delegate :dom_id, to: "ActionView::RecordIdentifier"
56
57
 
57
58
  def initialize(channel, url: nil, element: nil, selectors: [], method_name: nil, params: {}, client_attributes: {})
58
59
  @channel = channel
@@ -64,6 +65,7 @@ class StimulusReflex::Reflex
64
65
  @broadcaster = StimulusReflex::PageBroadcaster.new(self)
65
66
  @logger = StimulusReflex::Logger.new(self)
66
67
  @client_attributes = ClientAttributes.new(client_attributes)
68
+ @cable_ready = StimulusReflex::CableReadyChannels.new(stream_name)
67
69
  self.params
68
70
  end
69
71
 
@@ -86,6 +88,14 @@ class StimulusReflex::Reflex
86
88
  )
87
89
 
88
90
  env = connection.env.merge(mock_env)
91
+
92
+ middleware = StimulusReflex.config.middleware
93
+
94
+ if middleware.any?
95
+ stack = middleware.build(Rails.application.routes)
96
+ stack.call(env)
97
+ end
98
+
89
99
  req = ActionDispatch::Request.new(env)
90
100
 
91
101
  path_params = Rails.application.routes.recognize_path_with_request(req, url, req.env[:extras] || {})
@@ -114,11 +124,11 @@ class StimulusReflex::Reflex
114
124
 
115
125
  def controller
116
126
  @controller ||= begin
117
- request.controller_class.new.tap do |c|
127
+ controller_class.new.tap do |c|
118
128
  c.instance_variable_set :"@stimulus_reflex", true
119
129
  instance_variables.each { |name| c.instance_variable_set name, instance_variable_get(name) }
120
- c.request = request
121
- c.response = ActionDispatch::Response.new
130
+ c.set_request! request
131
+ c.set_response! controller_class.make_response!(request)
122
132
  end
123
133
  end
124
134
  end
@@ -1,11 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class StimulusReflex::SanityChecker
4
+ NODE_VERSION_FORMAT = /(\d+\.\d+\.\d+.*):/
4
5
  JSON_VERSION_FORMAT = /(\d+\.\d+\.\d+.*)"/
5
6
 
6
7
  class << self
7
8
  def check!
8
9
  return if StimulusReflex.config.on_failed_sanity_checks == :ignore
10
+ return if called_by_installer?
9
11
  return if called_by_generate_config?
10
12
 
11
13
  instance = new
@@ -15,6 +17,12 @@ class StimulusReflex::SanityChecker
15
17
 
16
18
  private
17
19
 
20
+ def called_by_installer?
21
+ Rake.application.top_level_tasks.include? "stimulus_reflex:install"
22
+ rescue
23
+ false
24
+ end
25
+
18
26
  def called_by_generate_config?
19
27
  ARGV.include? "stimulus_reflex:config"
20
28
  end
@@ -79,6 +87,8 @@ class StimulusReflex::SanityChecker
79
87
  def find_javascript_package_version
80
88
  if (match = search_file(package_json_path, regex: /version/))
81
89
  match[JSON_VERSION_FORMAT, 1]
90
+ elsif (match = search_file(yarn_lock_path, regex: /^stimulus_reflex/))
91
+ match[NODE_VERSION_FORMAT, 1]
82
92
  end
83
93
  end
84
94
 
@@ -91,6 +101,10 @@ class StimulusReflex::SanityChecker
91
101
  Rails.root.join("node_modules", "stimulus_reflex", "package.json")
92
102
  end
93
103
 
104
+ def yarn_lock_path
105
+ Rails.root.join("yarn.lock")
106
+ end
107
+
94
108
  def initializer_path
95
109
  @_initializer_path ||= Rails.root.join("config", "initializers", "stimulus_reflex.rb")
96
110
  end
@@ -120,13 +134,13 @@ class StimulusReflex::SanityChecker
120
134
  puts <<~INFO
121
135
  If you know what you are doing and you want to start the application anyway,
122
136
  you can create a StimulusReflex initializer with the command:
123
-
137
+
124
138
  bundle exec rails generate stimulus_reflex:config
125
-
139
+
126
140
  Then open your initializer at
127
-
141
+
128
142
  <RAILS_ROOT>/config/initializers/stimulus_reflex.rb
129
-
143
+
130
144
  and then add the following directive:
131
145
 
132
146
  StimulusReflex.configure do |config|
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module StimulusReflex
4
- VERSION = "3.4.0.pre5"
4
+ VERSION = "3.4.0"
5
5
  end
@@ -6,9 +6,10 @@ require "stimulus_reflex/version"
6
6
  namespace :stimulus_reflex do
7
7
  desc "Install StimulusReflex in this application"
8
8
  task install: :environment do
9
- system "bundle exec rails webpacker:install:stimulus"
9
+ system "rails dev:cache" unless Rails.root.join("tmp", "caching-dev.txt").exist?
10
10
  gem_version = StimulusReflex::VERSION.gsub(".pre", "-pre")
11
11
  system "yarn add stimulus_reflex@#{gem_version}"
12
+ system "bundle exec rails webpacker:install:stimulus"
12
13
  main_folder = defined?(Webpacker) ? Webpacker.config.source_path.to_s.gsub("#{Rails.root}/", "") : "app/javascript"
13
14
 
14
15
  FileUtils.mkdir_p Rails.root.join("#{main_folder}/controllers"), verbose: true
@@ -39,7 +40,7 @@ namespace :stimulus_reflex do
39
40
 
40
41
  unless lines.find { |line| line.start_with?("import controller") }
41
42
  matches = lines.select { |line| line =~ /\A(require|import)/ }
42
- lines.insert lines.index(matches.last).to_i + 1, "import controller from './application_controller'\n"
43
+ lines.insert lines.index(matches.last).to_i + 1, "import controller from '../controllers/application_controller'\n"
43
44
  end
44
45
 
45
46
  initialize_line = lines.find { |line| line.start_with?("StimulusReflex.initialize") }
@@ -67,6 +68,10 @@ namespace :stimulus_reflex do
67
68
  system "bundle exec rails generate stimulus_reflex example"
68
69
  puts "Generating default StimulusReflex configuration file into your application config/initializers directory"
69
70
  system "bundle exec rails generate stimulus_reflex:config"
70
- system "rails dev:cache" unless Rails.root.join("tmp", "caching-dev.txt").exist?
71
+
72
+ puts
73
+ puts "StimulusReflex and CableReady have been successfully installed!"
74
+ puts "Go to https://docs.stimulusreflex.com/quickstart if you need help getting started."
75
+ puts
71
76
  end
72
77
  end
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stimulus_reflex",
3
- "version": "3.4.0-pre4",
3
+ "version": "3.4.0-pre9",
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.3.0"
44
+ "cable_ready": ">= 4.4"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@babel/core": "^7.6.2",
@@ -52,6 +52,6 @@
52
52
  "jsdom": "^16.0.1",
53
53
  "mocha": "^8.0.1",
54
54
  "prettier-standard": "^16.1.0",
55
- "stimulus": "^1.1.1"
55
+ "stimulus": ">= 1.1"
56
56
  }
57
57
  }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.expand_path("../lib/stimulus_reflex/version", __FILE__)
2
4
 
3
5
  Gem::Specification.new do |gem|
@@ -30,7 +32,7 @@ Gem::Specification.new do |gem|
30
32
  gem.add_dependency "nokogiri"
31
33
  gem.add_dependency "rails", ">= 5.2"
32
34
  gem.add_dependency "redis"
33
- gem.add_dependency "cable_ready", ">= 4.3.0"
35
+ gem.add_dependency "cable_ready", ">= 4.4"
34
36
 
35
37
  gem.add_development_dependency "bundler", "~> 2.0"
36
38
  gem.add_development_dependency "pry-nav"
data/tags CHANGED
@@ -4,95 +4,153 @@
4
4
  !_TAG_PROGRAM_NAME Exuberant Ctags //
5
5
  !_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
6
6
  !_TAG_PROGRAM_VERSION 5.8 //
7
+ ActionDispatch test/test_helper.rb /^class ActionDispatch::Request$/;" c
8
+ ApplicationController test/test_helper.rb /^class ApplicationController < ActionController::Base; end$/;" c
7
9
  ApplicationReflex test/tmp/app/reflexes/application_reflex.rb /^class ApplicationReflex < StimulusReflex::Reflex$/;" c
8
10
  Broadcaster lib/stimulus_reflex/broadcasters/broadcaster.rb /^ class Broadcaster$/;" c class:StimulusReflex
9
- CompareXML lib/stimulus_reflex/compare_xml.rb /^module CompareXML$/;" m
11
+ CableReadyChannels lib/stimulus_reflex/cable_ready_channels.rb /^ class CableReadyChannels$/;" c class:StimulusReflex
12
+ Colorize lib/stimulus_reflex/utils/colorize.rb /^ module Colorize$/;" m class:StimulusReflex.Utils
13
+ ConfigGenerator lib/generators/stimulus_reflex/config_generator.rb /^ class ConfigGenerator < Rails::Generators::Base$/;" c class:StimulusReflex
14
+ Configuration lib/stimulus_reflex/configuration.rb /^ class Configuration$/;" c
10
15
  Engine lib/stimulus_reflex.rb /^ class Engine < Rails::Engine$/;" c class:StimulusReflex
16
+ Logger lib/stimulus_reflex/logger.rb /^ class Logger$/;" c class:StimulusReflex
11
17
  NothingBroadcaster lib/stimulus_reflex/broadcasters/nothing_broadcaster.rb /^ class NothingBroadcaster < Broadcaster$/;" c class:StimulusReflex
12
18
  PageBroadcaster lib/stimulus_reflex/broadcasters/page_broadcaster.rb /^ class PageBroadcaster < Broadcaster$/;" c class:StimulusReflex
13
19
  SelectorBroadcaster lib/stimulus_reflex/broadcasters/selector_broadcaster.rb /^ class SelectorBroadcaster < Broadcaster$/;" c class:StimulusReflex
20
+ SessionMock test/test_helper.rb /^class SessionMock$/;" c
21
+ StimulusReflex app/channels/stimulus_reflex/channel.rb /^class StimulusReflex::Channel < StimulusReflex.configuration.parent_channel.constantize$/;" c
22
+ StimulusReflex lib/generators/stimulus_reflex/config_generator.rb /^module StimulusReflex$/;" m
14
23
  StimulusReflex lib/stimulus_reflex.rb /^module StimulusReflex$/;" m
15
24
  StimulusReflex lib/stimulus_reflex/broadcasters/broadcaster.rb /^module StimulusReflex$/;" m
16
25
  StimulusReflex lib/stimulus_reflex/broadcasters/nothing_broadcaster.rb /^module StimulusReflex$/;" m
17
26
  StimulusReflex lib/stimulus_reflex/broadcasters/page_broadcaster.rb /^module StimulusReflex$/;" m
18
27
  StimulusReflex lib/stimulus_reflex/broadcasters/selector_broadcaster.rb /^module StimulusReflex$/;" m
19
- StimulusReflex lib/stimulus_reflex/channel.rb /^class StimulusReflex::Channel < ActionCable::Channel::Base$/;" c
28
+ StimulusReflex lib/stimulus_reflex/cable_ready_channels.rb /^module StimulusReflex$/;" m
29
+ StimulusReflex lib/stimulus_reflex/configuration.rb /^module StimulusReflex$/;" m
20
30
  StimulusReflex lib/stimulus_reflex/element.rb /^class StimulusReflex::Element < OpenStruct$/;" c
31
+ StimulusReflex lib/stimulus_reflex/logger.rb /^module StimulusReflex$/;" m
21
32
  StimulusReflex lib/stimulus_reflex/reflex.rb /^class StimulusReflex::Reflex$/;" c
33
+ StimulusReflex lib/stimulus_reflex/sanity_checker.rb /^class StimulusReflex::SanityChecker$/;" c
34
+ StimulusReflex lib/stimulus_reflex/utils/colorize.rb /^module StimulusReflex$/;" m
22
35
  StimulusReflex lib/stimulus_reflex/version.rb /^module StimulusReflex$/;" m
23
- StimulusReflexGenerator lib/generators/stimulus_reflex_generator.rb /^class StimulusReflexGenerator < Rails::Generators::NamedBase$/;" c
36
+ StimulusReflex test/broadcasters/broadcaster_test.rb /^class StimulusReflex::BroadcasterTest < StimulusReflex::BroadcasterTestCase$/;" c
37
+ StimulusReflex test/broadcasters/broadcaster_test_case.rb /^class StimulusReflex::BroadcasterTestCase < ActionCable::Channel::TestCase$/;" c
38
+ StimulusReflex test/broadcasters/nothing_broadcaster_test.rb /^class StimulusReflex::NothingBroadcasterTest < StimulusReflex::BroadcasterTestCase$/;" c
39
+ StimulusReflex test/broadcasters/page_broadcaster_test.rb /^class StimulusReflex::PageBroadcasterTest < StimulusReflex::BroadcasterTestCase$/;" c
40
+ StimulusReflex test/reflex_test.rb /^class StimulusReflex::ReflexTest < ActionCable::Channel::TestCase$/;" c
41
+ StimulusReflexGenerator lib/generators/stimulus_reflex/stimulus_reflex_generator.rb /^class StimulusReflexGenerator < Rails::Generators::NamedBase$/;" c
24
42
  StimulusReflexGeneratorTest test/generators/stimulus_reflex_generator_test.rb /^class StimulusReflexGeneratorTest < Rails::Generators::TestCase$/;" c
43
+ TestApp test/test_helper.rb /^class TestApp < Rails::Application$/;" c
44
+ TestController test/test_helper.rb /^class TestController < ApplicationController$/;" c
25
45
  UserReflex test/tmp/app/reflexes/user_reflex.rb /^class UserReflex < ApplicationReflex$/;" c
26
- addDifference lib/stimulus_reflex/compare_xml.rb /^ def addDifference(node1, node2, diff1, diff2, opts, differences)$/;" f class:CompareXML
46
+ Utils lib/stimulus_reflex/utils/colorize.rb /^ module Utils$/;" m class:StimulusReflex
27
47
  add_callback lib/stimulus_reflex/reflex.rb /^ def add_callback(kind, *args, &block)$/;" f class:StimulusReflex
28
48
  after_reflex lib/stimulus_reflex/reflex.rb /^ def after_reflex(*args, &block)$/;" f class:StimulusReflex
49
+ append_morph lib/stimulus_reflex/broadcasters/selector_broadcaster.rb /^ def append_morph(selectors, html)$/;" f class:StimulusReflex.SelectorBroadcaster
29
50
  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
51
  before_reflex lib/stimulus_reflex/reflex.rb /^ def before_reflex(*args, &block)$/;" f class:StimulusReflex
52
+ body test/broadcasters/page_broadcaster_test.rb /^ def body$/;" f
34
53
  broadcast lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def broadcast(*args)$/;" f class:StimulusReflex.Broadcaster
35
54
  broadcast lib/stimulus_reflex/broadcasters/nothing_broadcaster.rb /^ def broadcast(_, data)$/;" f class:StimulusReflex.NothingBroadcaster
36
55
  broadcast lib/stimulus_reflex/broadcasters/page_broadcaster.rb /^ def broadcast(selectors, data)$/;" f class:StimulusReflex.PageBroadcaster
37
56
  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
- collapse lib/stimulus_reflex/compare_xml.rb /^ def collapse(text)$/;" f class:CompareXML
40
- commit_session lib/stimulus_reflex/channel.rb /^ def commit_session(reflex)$/;" f class:StimulusReflex
41
- compareAttributeSets lib/stimulus_reflex/compare_xml.rb /^ def compareAttributeSets(n1, n2, a1_set, a2_set, opts, differences)$/;" f class:CompareXML
42
- compareAttributes lib/stimulus_reflex/compare_xml.rb /^ def compareAttributes(n1, n2, a1, a2, opts, differences, status = EQUIVALENT)$/;" f class:CompareXML
43
- compareChildren lib/stimulus_reflex/compare_xml.rb /^ def compareChildren(n1_set, n2_set, opts, differences, diffchildren = false, status = EQUIVALENT)$/;" f class:CompareXML
44
- compareCommentNodes lib/stimulus_reflex/compare_xml.rb /^ def compareCommentNodes(n1, n2, opts, differences, status = EQUIVALENT)$/;" f class:CompareXML
45
- compareDocumentNodes lib/stimulus_reflex/compare_xml.rb /^ def compareDocumentNodes(n1, n2, opts, differences, childopts = {}, diffchildren = false, status = EQUIVALENT)$/;" f class:CompareXML
46
- compareElementNodes lib/stimulus_reflex/compare_xml.rb /^ def compareElementNodes(n1, n2, opts, differences, childopts = {}, diffchildren = false, status = EQUIVALENT)$/;" f class:CompareXML
47
- compareNodes lib/stimulus_reflex/compare_xml.rb /^ def compareNodes(n1, n2, opts, differences, childopts = {}, diffchildren = false, status = EQUIVALENT)$/;" f class:CompareXML
48
- compareSortedAttributeSets lib/stimulus_reflex/compare_xml.rb /^ def compareSortedAttributeSets(n1, n2, a1_set, a2_set, opts, differences, status = EQUIVALENT)$/;" f class:CompareXML
49
- compareTextNodes lib/stimulus_reflex/compare_xml.rb /^ def compareTextNodes(n1, n2, opts, differences, status = EQUIVALENT)$/;" f class:CompareXML
50
- compareUnsortedAttributeSets lib/stimulus_reflex/compare_xml.rb /^ def compareUnsortedAttributeSets(n1, n2, a1_set, a2_set, opts, differences, status = EQUIVALENT)$/;" f class:CompareXML
57
+ broadcast_message lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def broadcast_message(subject:, body: nil, data: {}, error: nil)$/;" f class:StimulusReflex.Broadcaster
58
+ cable_ready_channels lib/stimulus_reflex/cable_ready_channels.rb /^ def cable_ready_channels$/;" f class:StimulusReflex.CableReadyChannels
59
+ caching_enabled? lib/stimulus_reflex/sanity_checker.rb /^ def caching_enabled?$/;" f
60
+ called_by_generate_config? lib/stimulus_reflex/sanity_checker.rb /^ def called_by_generate_config?$/;" f class:StimulusReflex
61
+ called_by_installer? lib/stimulus_reflex/sanity_checker.rb /^ def called_by_installer?$/;" f class:StimulusReflex
62
+ check! lib/stimulus_reflex/sanity_checker.rb /^ def check!$/;" f class:StimulusReflex
63
+ check_caching_enabled lib/stimulus_reflex/sanity_checker.rb /^ def check_caching_enabled$/;" f
64
+ check_javascript_package_version lib/stimulus_reflex/sanity_checker.rb /^ def check_javascript_package_version$/;" f
65
+ commit_session app/channels/stimulus_reflex/channel.rb /^ def commit_session(reflex)$/;" f class:StimulusReflex
66
+ config_logging lib/stimulus_reflex/logger.rb /^ def config_logging$/;" f class:StimulusReflex.Logger
67
+ configuration lib/stimulus_reflex/configuration.rb /^ def configuration$/;" f class:StimulusReflex
68
+ configure lib/stimulus_reflex/configuration.rb /^ def configure$/;" f class:StimulusReflex
69
+ connection_id lib/stimulus_reflex/logger.rb /^ def connection_id$/;" f class:StimulusReflex.Logger
70
+ connection_id_full lib/stimulus_reflex/logger.rb /^ def connection_id_full$/;" f class:StimulusReflex.Logger
51
71
  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
72
+ copy_application_files lib/generators/stimulus_reflex/stimulus_reflex_generator.rb /^ def copy_application_files$/;" f class:StimulusReflexGenerator
73
+ copy_config_file lib/generators/stimulus_reflex/config_generator.rb /^ def copy_config_file$/;" f class:StimulusReflex.ConfigGenerator
53
74
  dataset lib/stimulus_reflex/element.rb /^ def dataset$/;" f class:StimulusReflex
54
75
  default_reflex lib/stimulus_reflex/reflex.rb /^ def default_reflex$/;" f
55
- delegate_call_to_reflex lib/stimulus_reflex/channel.rb /^ def delegate_call_to_reflex(reflex, method_name, arguments = [])$/;" f class:StimulusReflex
76
+ delegate_call_to_reflex app/channels/stimulus_reflex/channel.rb /^ def delegate_call_to_reflex(reflex, method_name, arguments = [])$/;" f class:StimulusReflex
56
77
  do_more_stuff test/tmp/app/reflexes/user_reflex.rb /^ def do_more_stuff$/;" f class:UserReflex
57
78
  do_stuff test/tmp/app/reflexes/user_reflex.rb /^ def do_stuff$/;" f class:UserReflex
58
- enqueue_message lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def enqueue_message(subject:, body: nil, data: {})$/;" f class:StimulusReflex.Broadcaster
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
79
+ env test/broadcasters/broadcaster_test_case.rb /^ def connection.env$/;" F class:StimulusReflex
80
+ env test/reflex_test.rb /^ def connection.env$/;" F class:StimulusReflex
81
+ exception_message_with_backtrace app/channels/stimulus_reflex/channel.rb /^ def exception_message_with_backtrace(exception)$/;" f class:StimulusReflex
82
+ execute lib/generators/stimulus_reflex/stimulus_reflex_generator.rb /^ def execute$/;" f class:StimulusReflexGenerator
83
+ exit_with_info lib/stimulus_reflex/sanity_checker.rb /^ def exit_with_info$/;" f
63
84
  export.reflexAttribute javascript/schema.js /^ reflexAttribute: 'data-reflex',$/;" p
64
85
  export.reflexDatasetAttribute javascript/schema.js /^ reflexDatasetAttribute: 'data-reflex-dataset'$/;" p
65
86
  export.reflexPermanentAttribute javascript/schema.js /^ reflexPermanentAttribute: 'data-reflex-permanent',$/;" p
66
87
  export.reflexRootAttribute javascript/schema.js /^ reflexRootAttribute: 'data-reflex-root',$/;" p
67
88
  findConsumer javascript/consumer.js /^function findConsumer (object, depth = 0) {$/;" f
68
- function.success javascript/log.js /^function success (response, options = { halted: false }) {$/;" f
89
+ find_javascript_package_version lib/stimulus_reflex/sanity_checker.rb /^ def find_javascript_package_version$/;" f
90
+ fix_environment! app/channels/stimulus_reflex/channel.rb /^ def fix_environment!$/;" f class:StimulusReflex
91
+ function.error javascript/log.js /^function error (event) {$/;" f
92
+ gem_version lib/stimulus_reflex/sanity_checker.rb /^ def gem_version$/;" f
69
93
  halted? lib/stimulus_reflex/reflex.rb /^ def halted?$/;" f
94
+ index test/test_helper.rb /^ def index$/;" f class:TestController
70
95
  initialize lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def initialize(reflex)$/;" f class:StimulusReflex.Broadcaster
96
+ initialize lib/stimulus_reflex/cable_ready_channels.rb /^ def initialize(stream_name)$/;" f class:StimulusReflex.CableReadyChannels
97
+ initialize lib/stimulus_reflex/configuration.rb /^ def initialize$/;" f class:Configuration
71
98
  initialize lib/stimulus_reflex/element.rb /^ def initialize(data = {})$/;" f class:StimulusReflex
72
- initialize lib/stimulus_reflex/reflex.rb /^ def initialize(channel, url: nil, element: nil, selectors: [], method_name: nil, permanent_attribute_name: nil, params: {})$/;" f
73
- is_reflex? lib/stimulus_reflex/channel.rb /^ def is_reflex?(reflex_class)$/;" f class:StimulusReflex
99
+ initialize lib/stimulus_reflex/logger.rb /^ def initialize(reflex)$/;" f class:StimulusReflex.Logger
100
+ initialize lib/stimulus_reflex/reflex.rb /^ def initialize(channel, url: nil, element: nil, selectors: [], method_name: nil, params: {}, client_attributes: {})$/;" f
101
+ initializer_path lib/stimulus_reflex/sanity_checker.rb /^ def initializer_path$/;" f
102
+ is_reflex? app/channels/stimulus_reflex/channel.rb /^ def is_reflex?(reflex_class)$/;" f class:StimulusReflex
103
+ javascript_package_version lib/stimulus_reflex/sanity_checker.rb /^ def javascript_package_version$/;" f
104
+ javascript_version_matches? lib/stimulus_reflex/sanity_checker.rb /^ def javascript_version_matches?$/;" f
105
+ load! test/test_helper.rb /^ def load!$/;" f class:SessionMock
106
+ method_missing lib/stimulus_reflex/logger.rb /^ def method_missing method$/;" f class:StimulusReflex.Logger
107
+ mode lib/stimulus_reflex/logger.rb /^ def mode$/;" f class:StimulusReflex.Logger
74
108
  morph lib/stimulus_reflex/reflex.rb /^ def morph(selectors, html = "")$/;" f
75
109
  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
110
  normalize_callback_option! lib/stimulus_reflex/reflex.rb /^ def normalize_callback_option!(options, from, to)$/;" f class:StimulusReflex
78
111
  normalize_callback_options! lib/stimulus_reflex/reflex.rb /^ def normalize_callback_options!(options)$/;" f class:StimulusReflex
112
+ not_null_store? lib/stimulus_reflex/sanity_checker.rb /^ def not_null_store?$/;" f
79
113
  nothing? lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def nothing?$/;" f class:StimulusReflex.Broadcaster
80
114
  nothing? lib/stimulus_reflex/broadcasters/nothing_broadcaster.rb /^ def nothing?$/;" f class:StimulusReflex.NothingBroadcaster
81
- object_with_indifferent_access lib/stimulus_reflex/channel.rb /^ def object_with_indifferent_access(object)$/;" f class:StimulusReflex
115
+ object_with_indifferent_access app/channels/stimulus_reflex/channel.rb /^ def object_with_indifferent_access(object)$/;" f class:StimulusReflex
116
+ operation lib/stimulus_reflex/logger.rb /^ def operation$/;" f class:StimulusReflex.Logger
117
+ operation_counter lib/stimulus_reflex/logger.rb /^ def operation_counter$/;" f class:StimulusReflex.Logger
118
+ package_json_path lib/stimulus_reflex/sanity_checker.rb /^ def package_json_path$/;" f
82
119
  page? lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def page?$/;" f class:StimulusReflex.Broadcaster
83
120
  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
121
  params lib/stimulus_reflex/reflex.rb /^ def params$/;" f
122
+ print lib/stimulus_reflex/logger.rb /^ def print$/;" f class:StimulusReflex.Logger
123
+ private_instance_methods lib/stimulus_reflex/logger.rb /^ def private_instance_methods$/;" f class:StimulusReflex.Logger
86
124
  process lib/stimulus_reflex/reflex.rb /^ def process(name, *args)$/;" f
87
- receive lib/stimulus_reflex/channel.rb /^ def receive(data)$/;" f class:StimulusReflex
125
+ receive app/channels/stimulus_reflex/channel.rb /^ def receive(data)$/;" f class:StimulusReflex
126
+ reflex javascript/lifecycle.js /^ const detail = { reflex: target, controller, reflexId }$/;" p
127
+ reflex_id lib/stimulus_reflex/logger.rb /^ def reflex_id$/;" f class:StimulusReflex.Logger
128
+ reflex_id_full lib/stimulus_reflex/logger.rb /^ def reflex_id_full$/;" f class:StimulusReflex.Logger
129
+ reflex_info lib/stimulus_reflex/logger.rb /^ def reflex_info$/;" f class:StimulusReflex.Logger
130
+ request javascript/log.js /^function request (reflexId, target, args, controller, element) {$/;" f
88
131
  request lib/stimulus_reflex/reflex.rb /^ def request$/;" f
132
+ request.success javascript/log.js /^function success (event) {$/;" f
133
+ respond_to_missing? lib/stimulus_reflex/logger.rb /^ def respond_to_missing? method$/;" f class:StimulusReflex.Logger
134
+ search_file lib/stimulus_reflex/sanity_checker.rb /^ def search_file(path, regex:)$/;" f
135
+ selector lib/stimulus_reflex/logger.rb /^ def selector$/;" f class:StimulusReflex.Logger
89
136
  selector? lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def selector?$/;" f class:StimulusReflex.Broadcaster
90
137
  selector? lib/stimulus_reflex/broadcasters/selector_broadcaster.rb /^ def selector?$/;" f class:StimulusReflex.SelectorBroadcaster
91
- stream_name lib/stimulus_reflex/channel.rb /^ def stream_name$/;" f class:StimulusReflex
92
- subscribed lib/stimulus_reflex/channel.rb /^ def subscribed$/;" f class:StimulusReflex
138
+ session test/test_helper.rb /^ def session$/;" f class:ActionDispatch
139
+ session_id lib/stimulus_reflex/logger.rb /^ def session_id$/;" f class:StimulusReflex.Logger
140
+ session_id_full lib/stimulus_reflex/logger.rb /^ def session_id_full$/;" f class:StimulusReflex.Logger
141
+ signed lib/stimulus_reflex/element.rb /^ def signed$/;" f class:StimulusReflex
142
+ stimulus_reflex_channel lib/stimulus_reflex/cable_ready_channels.rb /^ def stimulus_reflex_channel$/;" f class:StimulusReflex.CableReadyChannels
143
+ stream_name app/channels/stimulus_reflex/channel.rb /^ def stream_name$/;" f class:StimulusReflex
144
+ subscribed app/channels/stimulus_reflex/channel.rb /^ def subscribed$/;" f class:StimulusReflex
145
+ timestamp lib/stimulus_reflex/logger.rb /^ def timestamp$/;" f class:StimulusReflex.Logger
146
+ to_s lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def to_s$/;" f class:StimulusReflex.Broadcaster
147
+ to_s lib/stimulus_reflex/broadcasters/nothing_broadcaster.rb /^ def to_s$/;" f class:StimulusReflex.NothingBroadcaster
148
+ to_s lib/stimulus_reflex/broadcasters/page_broadcaster.rb /^ def to_s$/;" f class:StimulusReflex.PageBroadcaster
149
+ to_s lib/stimulus_reflex/broadcasters/selector_broadcaster.rb /^ def to_s$/;" f class:StimulusReflex.SelectorBroadcaster
93
150
  to_sym lib/stimulus_reflex/broadcasters/broadcaster.rb /^ def to_sym$/;" f class:StimulusReflex.Broadcaster
94
151
  to_sym lib/stimulus_reflex/broadcasters/nothing_broadcaster.rb /^ def to_sym$/;" f class:StimulusReflex.NothingBroadcaster
95
152
  to_sym lib/stimulus_reflex/broadcasters/page_broadcaster.rb /^ def to_sym$/;" f class:StimulusReflex.PageBroadcaster
96
153
  to_sym lib/stimulus_reflex/broadcasters/selector_broadcaster.rb /^ def to_sym$/;" f class:StimulusReflex.SelectorBroadcaster
154
+ unsigned lib/stimulus_reflex/element.rb /^ def unsigned$/;" f class:StimulusReflex
97
155
  update test/tmp/app/reflexes/user_reflex.rb /^ def update$/;" f class:UserReflex
98
- url_params lib/stimulus_reflex/reflex.rb /^ def url_params$/;" f
156
+ warn_and_exit lib/stimulus_reflex/sanity_checker.rb /^ def warn_and_exit(text)$/;" f