stimulus_reflex 3.4.0.pre2 → 3.4.0.pre7

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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +90 -3
  3. data/Gemfile.lock +18 -18
  4. data/README.md +6 -10
  5. data/Rakefile +5 -5
  6. data/app/channels/stimulus_reflex/channel.rb +20 -4
  7. data/bin/console +1 -0
  8. data/bin/standardize +1 -1
  9. data/lib/generators/stimulus_reflex/templates/app/javascript/controllers/%file_name%_controller.js.tt +14 -2
  10. data/lib/generators/stimulus_reflex/templates/app/javascript/controllers/application_controller.js.tt +10 -2
  11. data/lib/generators/stimulus_reflex/templates/app/reflexes/%file_name%_reflex.rb.tt +19 -9
  12. data/lib/generators/stimulus_reflex/templates/app/reflexes/application_reflex.rb.tt +2 -2
  13. data/lib/generators/stimulus_reflex/templates/config/initializers/stimulus_reflex.rb +13 -2
  14. data/lib/stimulus_reflex.rb +3 -0
  15. data/lib/stimulus_reflex/broadcasters/broadcaster.rb +11 -6
  16. data/lib/stimulus_reflex/broadcasters/nothing_broadcaster.rb +4 -0
  17. data/lib/stimulus_reflex/broadcasters/page_broadcaster.rb +8 -2
  18. data/lib/stimulus_reflex/broadcasters/selector_broadcaster.rb +12 -2
  19. data/lib/stimulus_reflex/cable_ready_channels.rb +12 -0
  20. data/lib/stimulus_reflex/configuration.rb +5 -2
  21. data/lib/stimulus_reflex/logger.rb +106 -0
  22. data/lib/stimulus_reflex/reflex.rb +9 -5
  23. data/lib/stimulus_reflex/sanity_checker.rb +60 -11
  24. data/lib/stimulus_reflex/utils/colorize.rb +23 -0
  25. data/lib/stimulus_reflex/version.rb +1 -1
  26. data/lib/tasks/stimulus_reflex/install.rake +3 -3
  27. data/package.json +11 -17
  28. data/stimulus_reflex.gemspec +1 -1
  29. data/tags +82 -41
  30. data/test/broadcasters/broadcaster_test.rb +10 -0
  31. data/test/broadcasters/broadcaster_test_case.rb +13 -0
  32. data/test/broadcasters/nothing_broadcaster_test.rb +33 -0
  33. data/test/broadcasters/page_broadcaster_test.rb +73 -0
  34. data/test/broadcasters/selector_broadcaster_test.rb +55 -0
  35. data/test/test_helper.rb +37 -0
  36. data/test/tmp/app/reflexes/application_reflex.rb +2 -2
  37. data/test/tmp/app/reflexes/demo_reflex.rb +33 -0
  38. data/yarn.lock +248 -1798
  39. metadata +28 -15
  40. data/test/tmp/app/reflexes/user_reflex.rb +0 -33
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module StimulusReflex
4
+ module Utils
5
+ module Colorize
6
+ COLORS = {
7
+ red: "31",
8
+ green: "32",
9
+ yellow: "33",
10
+ blue: "34",
11
+ magenta: "35",
12
+ cyan: "36",
13
+ white: "37"
14
+ }
15
+
16
+ refine String do
17
+ COLORS.each do |name, code|
18
+ define_method(name) { "\e[#{code}m#{self}\e[0m" }
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module StimulusReflex
4
- VERSION = "3.4.0.pre2"
4
+ VERSION = "3.4.0.pre7"
5
5
  end
@@ -6,10 +6,9 @@ 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 add cable_ready"
10
9
  system "bundle exec rails webpacker:install:stimulus"
11
10
  gem_version = StimulusReflex::VERSION.gsub(".pre", "-pre")
12
- system "yarn add cable_ready stimulus_reflex@#{gem_version}"
11
+ system "yarn add stimulus_reflex@#{gem_version}"
13
12
  main_folder = defined?(Webpacker) ? Webpacker.config.source_path.to_s.gsub("#{Rails.root}/", "") : "app/javascript"
14
13
 
15
14
  FileUtils.mkdir_p Rails.root.join("#{main_folder}/controllers"), verbose: true
@@ -61,11 +60,12 @@ namespace :stimulus_reflex do
61
60
  lines.delete_at 1
62
61
  lines.insert 1, " adapter: redis\n"
63
62
  lines.insert 2, " url: <%= ENV.fetch(\"REDIS_URL\") { \"redis://localhost:6379/1\" } %>\n"
64
- lines.insert 3, " channel_prefix: " + Rails.application.class.module_parent.to_s.underscore + "_development\n"
63
+ lines.insert 3, " channel_prefix: " + File.basename(Rails.root.to_s).underscore + "_development\n"
65
64
  File.open(filepath, "w") { |f| f.write lines.join }
66
65
  end
67
66
 
68
67
  system "bundle exec rails generate stimulus_reflex example"
68
+ puts "Generating default StimulusReflex configuration file into your application config/initializers directory"
69
69
  system "bundle exec rails generate stimulus_reflex:config"
70
70
  system "rails dev:cache" unless Rails.root.join("tmp", "caching-dev.txt").exist?
71
71
  end
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stimulus_reflex",
3
- "version": "3.3.0",
3
+ "version": "3.4.0-pre6",
4
4
  "description": "Build reactive applications with the Rails tooling you already know and love.",
5
5
  "keywords": [
6
6
  "ruby",
@@ -28,34 +28,28 @@
28
28
  },
29
29
  "license": "MIT",
30
30
  "author": "Nathan Hopkins <natehop@gmail.com>",
31
- "source": "javascript/stimulus_reflex.js",
32
- "main": "javascript/dist/stimulus_reflex.js",
33
- "module": "javascript/dist/stimulus_reflex.module.js",
34
- "esmodule": "javascript/dist/stimulus_reflex.modern.js",
31
+ "main": "./javascript/stimulus_reflex.js",
32
+ "module": "./javascript/stimulus_reflex.js",
35
33
  "scripts": {
36
- "prepare": "yarn build",
37
- "postinstall": "node javascript/scripts/post_install.js",
38
- "prettier-standard:check": "yarn run prettier-standard --check *.js **/*.js",
39
- "prettier-standard:format": "yarn run prettier-standard *.js **/*.js",
40
- "test": "yarn run mocha --require @babel/register --require esm ./javascript/test",
41
- "build": "microbundle --target browser --format modern,es,cjs --no-strict",
42
- "dev": "microbundle watch --target browser --format modern,es,cjs --no-strict"
34
+ "postinstall": "node ./javascript/scripts/post_install.js",
35
+ "prettier-standard:check": "yarn run prettier-standard --check ./javascript/*.js ./javascript/**/*.js",
36
+ "prettier-standard:format": "yarn run prettier-standard ./javascript/*.js ./javascript/**/*.js",
37
+ "test": "yarn run mocha --require @babel/register --require esm ./javascript/test"
43
38
  },
44
39
  "peerDependencies": {
45
- "@rails/actioncable": ">= 6.0",
46
- "cable_ready": ">= 4.3.0",
47
40
  "stimulus": ">= 1.1"
48
41
  },
42
+ "dependencies": {
43
+ "@rails/actioncable": ">= 6.0",
44
+ "cable_ready": ">= 4.4"
45
+ },
49
46
  "devDependencies": {
50
47
  "@babel/core": "^7.6.2",
51
48
  "@babel/preset-env": "^7.6.2",
52
49
  "@babel/register": "^7.6.2",
53
- "@rails/actioncable": "^6.0.3-3",
54
50
  "assert": "^2.0.0",
55
- "cable_ready": "^4.4.0-pre2",
56
51
  "esm": "^3.2.25",
57
52
  "jsdom": "^16.0.1",
58
- "microbundle": "^0.12.3",
59
53
  "mocha": "^8.0.1",
60
54
  "prettier-standard": "^16.1.0",
61
55
  "stimulus": "^1.1.1"
@@ -30,9 +30,9 @@ 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.4"
33
34
 
34
35
  gem.add_development_dependency "bundler", "~> 2.0"
35
- gem.add_development_dependency "cable_ready", ">= 4.3.0"
36
36
  gem.add_development_dependency "pry-nav"
37
37
  gem.add_development_dependency "pry"
38
38
  gem.add_development_dependency "rake"
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
- CompareXML lib/stimulus_reflex/compare_xml.rb /^module CompareXML$/;" m
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/channel.rb /^class StimulusReflex::Channel < ActionCable::Channel::Base$/;" c
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
- StimulusReflexGenerator lib/generators/stimulus_reflex_generator.rb /^class StimulusReflexGenerator < Rails::Generators::NamedBase$/;" c
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
- 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
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
- 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
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 lib/stimulus_reflex/channel.rb /^ def delegate_call_to_reflex(reflex, method_name, arguments = [])$/;" f class:StimulusReflex
56
- do_more_stuff test/tmp/app/reflexes/user_reflex.rb /^ def do_more_stuff$/;" f class:UserReflex
57
- 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
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
- function.success javascript/log.js /^function success (response, options = { halted: false }) {$/;" f
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/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
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 lib/stimulus_reflex/channel.rb /^ def object_with_indifferent_access(object)$/;" f class:StimulusReflex
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 lib/stimulus_reflex/channel.rb /^ def receive(data)$/;" f class:StimulusReflex
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
- 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
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
- 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
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
@@ -0,0 +1,10 @@
1
+ require_relative "broadcaster_test_case"
2
+
3
+ class StimulusReflex::BroadcasterTest < StimulusReflex::BroadcasterTestCase
4
+ test "raises a NotImplementedError if called directly" do
5
+ broadcaster = StimulusReflex::Broadcaster.new(@reflex)
6
+
7
+ assert_raises(NotImplementedError) { broadcaster.broadcast }
8
+ assert_raises(NotImplementedError) { broadcaster.broadcast_message(subject: "Test") }
9
+ end
10
+ end
@@ -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
@@ -0,0 +1,33 @@
1
+ require_relative "broadcaster_test_case"
2
+
3
+ class StimulusReflex::NothingBroadcasterTest < StimulusReflex::BroadcasterTestCase
4
+ test "broadcasts a server message when called" do
5
+ broadcaster = StimulusReflex::NothingBroadcaster.new(@reflex)
6
+
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
+ }
28
+
29
+ assert_broadcast_on @reflex.stream_name, expected do
30
+ broadcaster.broadcast nil, some: :data
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,73 @@
1
+ require_relative "broadcaster_test_case"
2
+
3
+ class StimulusReflex::PageBroadcasterTest < StimulusReflex::BroadcasterTestCase
4
+ test "returns if the response html is empty" do
5
+ broadcaster = StimulusReflex::PageBroadcaster.new(@reflex)
6
+ broadcaster.broadcast(["#foo"], {some: :data})
7
+ # TODO: figure out how to refute_broadcast_on
8
+ end
9
+
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
16
+
17
+ broadcaster = StimulusReflex::PageBroadcaster.new(@reflex)
18
+
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
+ }
36
+
37
+ assert_broadcast_on @reflex.stream_name, expected do
38
+ broadcaster.broadcast(["body"], {some: :data})
39
+ end
40
+ end
41
+
42
+ test "performs a page morph given an array of reflex root selectors" do
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
48
+
49
+ broadcaster = StimulusReflex::PageBroadcaster.new(@reflex)
50
+
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
+ }
64
+ }
65
+ ]
66
+ }
67
+ }
68
+
69
+ assert_broadcast_on @reflex.stream_name, expected do
70
+ broadcaster.broadcast(["#foo"], {some: :data})
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,55 @@
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