stimulus_reflex 3.4.0.pre1 → 3.4.0.pre6

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of stimulus_reflex might be problematic. Click here for more details.

Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +95 -2
  3. data/Gemfile.lock +15 -15
  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 +18 -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 +7 -2
  18. data/lib/stimulus_reflex/broadcasters/selector_broadcaster.rb +12 -2
  19. data/lib/stimulus_reflex/cable_ready_channels.rb +18 -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 -2
  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 +34 -0
  38. data/yarn.lock +248 -1798
  39. metadata +23 -10
  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.pre1"
4
+ VERSION = "3.4.0.pre6"
5
5
  end
@@ -8,7 +8,7 @@ namespace :stimulus_reflex do
8
8
  task install: :environment do
9
9
  system "bundle exec rails webpacker:install:stimulus"
10
10
  gem_version = StimulusReflex::VERSION.gsub(".pre", "-pre")
11
- system "yarn add cable_ready stimulus_reflex@#{gem_version}"
11
+ system "yarn add stimulus_reflex@#{gem_version}"
12
12
  main_folder = defined?(Webpacker) ? Webpacker.config.source_path.to_s.gsub("#{Rails.root}/", "") : "app/javascript"
13
13
 
14
14
  FileUtils.mkdir_p Rails.root.join("#{main_folder}/controllers"), verbose: true
@@ -60,11 +60,12 @@ namespace :stimulus_reflex do
60
60
  lines.delete_at 1
61
61
  lines.insert 1, " adapter: redis\n"
62
62
  lines.insert 2, " url: <%= ENV.fetch(\"REDIS_URL\") { \"redis://localhost:6379/1\" } %>\n"
63
- 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"
64
64
  File.open(filepath, "w") { |f| f.write lines.join }
65
65
  end
66
66
 
67
67
  system "bundle exec rails generate stimulus_reflex example"
68
+ puts "Generating default StimulusReflex configuration file into your application config/initializers directory"
68
69
  system "bundle exec rails generate stimulus_reflex:config"
69
70
  system "rails dev:cache" unless Rails.root.join("tmp", "caching-dev.txt").exist?
70
71
  end
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stimulus_reflex",
3
- "version": "3.3.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",
@@ -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"
@@ -29,8 +29,8 @@ Gem::Specification.new do |gem|
29
29
  gem.add_dependency "rack"
30
30
  gem.add_dependency "nokogiri"
31
31
  gem.add_dependency "rails", ">= 5.2"
32
- gem.add_dependency "cable_ready", ">= 4.3.0"
33
32
  gem.add_dependency "redis"
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
- 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