cable_ready 4.4.6 → 4.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: be725ae91b18e01ba24fd9b42ca4eb2d824e90a7b25fab3cd3cab36af14740c6
4
- data.tar.gz: 9231b6d225221a866a52d9b19a412bfbcfea29e6f2a01eaa78d609642bb44670
3
+ metadata.gz: b7306ba066c9ee64f5a46290d6f24e29e0dd55ed26869101db08f4556cd9d05d
4
+ data.tar.gz: e072e9feec793f2a64f9c4134ebf5bf31f92ac4d5075d288237f4587895bec1c
5
5
  SHA512:
6
- metadata.gz: 684b2d9fb4d068f41620806b2b649d142acd9b7571b1ac0e5da71a50f90917431ef1d5bdbc6f3cf1d057930fc183da328fa5723cdc0a0231ab56c2fc6c99e802
7
- data.tar.gz: 0d29594d65f3e4ce1cd2044b13863c83297a829da0dca95fef2dc1f461fd39dfe06bd7a299f749fdd762e64d535a6318ad7f7e9b7875ec4a7ec8479a77916bb8
6
+ metadata.gz: e3264fdb6d50c9e1d3309c8a6ff82f283546f41f47df2b5e929ab7b9180d0c4f7d6b0d25e9a88512f0c8851ccabd2a35f2b96bc4bf004fd7122b106aff9c9343
7
+ data.tar.gz: 443016a6d1020a3aae79d161e3b0dcce298ed203e8ddede5692635b49685b2a74b9b843c67593a3200c2da4a3b4cc1e756cbc616e8a6bc71622adf533ae7a995
@@ -1,66 +1,67 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cable_ready (4.4.6)
4
+ cable_ready (4.5.0)
5
5
  rails (>= 5.2)
6
+ thread-local (>= 1.1.0)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
10
- actioncable (6.1.0)
11
- actionpack (= 6.1.0)
12
- activesupport (= 6.1.0)
11
+ actioncable (6.1.1)
12
+ actionpack (= 6.1.1)
13
+ activesupport (= 6.1.1)
13
14
  nio4r (~> 2.0)
14
15
  websocket-driver (>= 0.6.1)
15
- actionmailbox (6.1.0)
16
- actionpack (= 6.1.0)
17
- activejob (= 6.1.0)
18
- activerecord (= 6.1.0)
19
- activestorage (= 6.1.0)
20
- activesupport (= 6.1.0)
16
+ actionmailbox (6.1.1)
17
+ actionpack (= 6.1.1)
18
+ activejob (= 6.1.1)
19
+ activerecord (= 6.1.1)
20
+ activestorage (= 6.1.1)
21
+ activesupport (= 6.1.1)
21
22
  mail (>= 2.7.1)
22
- actionmailer (6.1.0)
23
- actionpack (= 6.1.0)
24
- actionview (= 6.1.0)
25
- activejob (= 6.1.0)
26
- activesupport (= 6.1.0)
23
+ actionmailer (6.1.1)
24
+ actionpack (= 6.1.1)
25
+ actionview (= 6.1.1)
26
+ activejob (= 6.1.1)
27
+ activesupport (= 6.1.1)
27
28
  mail (~> 2.5, >= 2.5.4)
28
29
  rails-dom-testing (~> 2.0)
29
- actionpack (6.1.0)
30
- actionview (= 6.1.0)
31
- activesupport (= 6.1.0)
30
+ actionpack (6.1.1)
31
+ actionview (= 6.1.1)
32
+ activesupport (= 6.1.1)
32
33
  rack (~> 2.0, >= 2.0.9)
33
34
  rack-test (>= 0.6.3)
34
35
  rails-dom-testing (~> 2.0)
35
36
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
36
- actiontext (6.1.0)
37
- actionpack (= 6.1.0)
38
- activerecord (= 6.1.0)
39
- activestorage (= 6.1.0)
40
- activesupport (= 6.1.0)
37
+ actiontext (6.1.1)
38
+ actionpack (= 6.1.1)
39
+ activerecord (= 6.1.1)
40
+ activestorage (= 6.1.1)
41
+ activesupport (= 6.1.1)
41
42
  nokogiri (>= 1.8.5)
42
- actionview (6.1.0)
43
- activesupport (= 6.1.0)
43
+ actionview (6.1.1)
44
+ activesupport (= 6.1.1)
44
45
  builder (~> 3.1)
45
46
  erubi (~> 1.4)
46
47
  rails-dom-testing (~> 2.0)
47
48
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
48
- activejob (6.1.0)
49
- activesupport (= 6.1.0)
49
+ activejob (6.1.1)
50
+ activesupport (= 6.1.1)
50
51
  globalid (>= 0.3.6)
51
- activemodel (6.1.0)
52
- activesupport (= 6.1.0)
53
- activerecord (6.1.0)
54
- activemodel (= 6.1.0)
55
- activesupport (= 6.1.0)
56
- activestorage (6.1.0)
57
- actionpack (= 6.1.0)
58
- activejob (= 6.1.0)
59
- activerecord (= 6.1.0)
60
- activesupport (= 6.1.0)
52
+ activemodel (6.1.1)
53
+ activesupport (= 6.1.1)
54
+ activerecord (6.1.1)
55
+ activemodel (= 6.1.1)
56
+ activesupport (= 6.1.1)
57
+ activestorage (6.1.1)
58
+ actionpack (= 6.1.1)
59
+ activejob (= 6.1.1)
60
+ activerecord (= 6.1.1)
61
+ activesupport (= 6.1.1)
61
62
  marcel (~> 0.3.1)
62
63
  mimemagic (~> 0.3.2)
63
- activesupport (6.1.0)
64
+ activesupport (6.1.1)
64
65
  concurrent-ruby (~> 1.0, >= 1.0.2)
65
66
  i18n (>= 1.6, < 2)
66
67
  minitest (>= 5.1)
@@ -68,17 +69,19 @@ GEM
68
69
  zeitwerk (~> 2.3)
69
70
  addressable (2.7.0)
70
71
  public_suffix (>= 2.0.2, < 5.0)
71
- ast (2.4.1)
72
+ ast (2.4.2)
72
73
  builder (3.2.4)
73
74
  coderay (1.1.3)
74
- concurrent-ruby (1.1.7)
75
+ concurrent-ruby (1.1.8)
75
76
  crass (1.0.6)
76
77
  erubi (1.10.0)
77
- faraday (1.1.0)
78
+ faraday (1.3.0)
79
+ faraday-net_http (~> 1.0)
78
80
  multipart-post (>= 1.2, < 3)
79
81
  ruby2_keywords
80
82
  faraday-http-cache (2.2.0)
81
83
  faraday (>= 0.8)
84
+ faraday-net_http (1.0.1)
82
85
  github_changelog_generator (1.15.2)
83
86
  activesupport
84
87
  faraday-http-cache
@@ -89,9 +92,9 @@ GEM
89
92
  retriable (~> 3.0)
90
93
  globalid (0.4.2)
91
94
  activesupport (>= 4.2.0)
92
- i18n (1.8.5)
95
+ i18n (1.8.7)
93
96
  concurrent-ruby (~> 1.0)
94
- loofah (2.8.0)
97
+ loofah (2.9.0)
95
98
  crass (~> 1.0.2)
96
99
  nokogiri (>= 1.5.9)
97
100
  magic_frozen_string_literal (1.2.0)
@@ -102,18 +105,17 @@ GEM
102
105
  method_source (0.9.2)
103
106
  mimemagic (0.3.5)
104
107
  mini_mime (1.0.2)
105
- mini_portile2 (2.4.0)
106
- minitest (5.14.2)
108
+ minitest (5.14.3)
107
109
  multi_json (1.15.0)
108
110
  multipart-post (2.1.1)
109
111
  nio4r (2.5.4)
110
- nokogiri (1.10.10)
111
- mini_portile2 (~> 2.4.0)
112
- octokit (4.19.0)
112
+ nokogiri (1.11.1-x86_64-darwin)
113
+ racc (~> 1.4)
114
+ octokit (4.20.0)
113
115
  faraday (>= 0.9)
114
116
  sawyer (~> 0.8.0, >= 0.5.3)
115
117
  parallel (1.20.1)
116
- parser (2.7.2.0)
118
+ parser (3.0.0.0)
117
119
  ast (~> 2.4.1)
118
120
  pry (0.12.2)
119
121
  coderay (~> 1.1.0)
@@ -121,56 +123,57 @@ GEM
121
123
  pry-nav (0.3.0)
122
124
  pry (>= 0.9.10, < 0.13.0)
123
125
  public_suffix (4.0.6)
126
+ racc (1.5.2)
124
127
  rack (2.2.3)
125
128
  rack-test (1.1.0)
126
129
  rack (>= 1.0, < 3)
127
- rails (6.1.0)
128
- actioncable (= 6.1.0)
129
- actionmailbox (= 6.1.0)
130
- actionmailer (= 6.1.0)
131
- actionpack (= 6.1.0)
132
- actiontext (= 6.1.0)
133
- actionview (= 6.1.0)
134
- activejob (= 6.1.0)
135
- activemodel (= 6.1.0)
136
- activerecord (= 6.1.0)
137
- activestorage (= 6.1.0)
138
- activesupport (= 6.1.0)
130
+ rails (6.1.1)
131
+ actioncable (= 6.1.1)
132
+ actionmailbox (= 6.1.1)
133
+ actionmailer (= 6.1.1)
134
+ actionpack (= 6.1.1)
135
+ actiontext (= 6.1.1)
136
+ actionview (= 6.1.1)
137
+ activejob (= 6.1.1)
138
+ activemodel (= 6.1.1)
139
+ activerecord (= 6.1.1)
140
+ activestorage (= 6.1.1)
141
+ activesupport (= 6.1.1)
139
142
  bundler (>= 1.15.0)
140
- railties (= 6.1.0)
143
+ railties (= 6.1.1)
141
144
  sprockets-rails (>= 2.0.0)
142
145
  rails-dom-testing (2.0.3)
143
146
  activesupport (>= 4.2.0)
144
147
  nokogiri (>= 1.6)
145
148
  rails-html-sanitizer (1.3.0)
146
149
  loofah (~> 2.3)
147
- railties (6.1.0)
148
- actionpack (= 6.1.0)
149
- activesupport (= 6.1.0)
150
+ railties (6.1.1)
151
+ actionpack (= 6.1.1)
152
+ activesupport (= 6.1.1)
150
153
  method_source
151
154
  rake (>= 0.8.7)
152
155
  thor (~> 1.0)
153
156
  rainbow (3.0.0)
154
- rake (13.0.1)
155
- regexp_parser (2.0.0)
157
+ rake (13.0.3)
158
+ regexp_parser (2.0.3)
156
159
  retriable (3.1.2)
157
160
  rexml (3.2.4)
158
- rubocop (1.4.2)
161
+ rubocop (1.7.0)
159
162
  parallel (~> 1.10)
160
163
  parser (>= 2.7.1.5)
161
164
  rainbow (>= 2.2.2, < 4.0)
162
- regexp_parser (>= 1.8)
165
+ regexp_parser (>= 1.8, < 3.0)
163
166
  rexml
164
- rubocop-ast (>= 1.1.1)
167
+ rubocop-ast (>= 1.2.0, < 2.0)
165
168
  ruby-progressbar (~> 1.7)
166
169
  unicode-display_width (>= 1.4.0, < 2.0)
167
- rubocop-ast (1.3.0)
170
+ rubocop-ast (1.4.1)
168
171
  parser (>= 2.7.1.5)
169
- rubocop-performance (1.9.1)
172
+ rubocop-performance (1.9.2)
170
173
  rubocop (>= 0.90.0, < 2.0)
171
174
  rubocop-ast (>= 0.4.0)
172
- ruby-progressbar (1.10.1)
173
- ruby2_keywords (0.0.2)
175
+ ruby-progressbar (1.11.0)
176
+ ruby2_keywords (0.0.4)
174
177
  sawyer (0.8.2)
175
178
  addressable (>= 2.3.5)
176
179
  faraday (> 0.8, < 2.0)
@@ -181,12 +184,13 @@ GEM
181
184
  actionpack (>= 4.0)
182
185
  activesupport (>= 4.0)
183
186
  sprockets (>= 3.0.0)
184
- standard (0.10.2)
185
- rubocop (= 1.4.2)
186
- rubocop-performance (= 1.9.1)
187
+ standard (0.11.0)
188
+ rubocop (= 1.7.0)
189
+ rubocop-performance (= 1.9.2)
187
190
  standardrb (1.0.0)
188
191
  standard
189
- thor (1.0.1)
192
+ thor (1.1.0)
193
+ thread-local (1.1.0)
190
194
  tzinfo (2.0.4)
191
195
  concurrent-ruby (~> 1.0)
192
196
  unicode-display_width (1.7.0)
data/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  <img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-brightgreen.svg" target="_blank" />
12
12
  </a>
13
13
  <a href="http://blog.codinghorror.com/the-best-code-is-no-code-at-all/" target="_blank">
14
- <img alt="Lines of Code" src="https://img.shields.io/badge/lines_of_code-483-brightgreen.svg?style=flat" />
14
+ <img alt="Lines of Code" src="https://img.shields.io/badge/lines_of_code-663-brightgreen.svg?style=flat" />
15
15
  </a>
16
16
  <a href="https://cableready.stimulusreflex.com" target="_blank">
17
17
  <img alt="Documentation" src="https://img.shields.io/badge/documentation-yes-brightgreen.svg" />
@@ -15,6 +15,7 @@ Gem::Specification.new do |gem|
15
15
  gem.test_files = Dir["test/**/*.rb"]
16
16
 
17
17
  gem.add_dependency "rails", ">= 5.2"
18
+ gem.add_dependency "thread-local", ">= 1.1.0"
18
19
 
19
20
  gem.add_development_dependency "github_changelog_generator"
20
21
  gem.add_development_dependency "magic_frozen_string_literal"
@@ -3,9 +3,18 @@
3
3
  require "rails/engine"
4
4
  require "active_support/all"
5
5
  require "cable_ready/version"
6
+ require "cable_ready/config"
6
7
  require "cable_ready/broadcaster"
7
8
 
8
9
  module CableReady
9
10
  class Engine < Rails::Engine
10
11
  end
12
+
13
+ def self.config
14
+ CableReady::Config.instance
15
+ end
16
+
17
+ def self.configure
18
+ yield config
19
+ end
11
20
  end
@@ -2,48 +2,46 @@
2
2
 
3
3
  module CableReady
4
4
  class Channel
5
- attr_reader :identifier, :operations, :available_operations
5
+ attr_reader :identifier, :enqueued_operations
6
6
 
7
- def initialize(identifier, available_operations)
7
+ def initialize(identifier)
8
8
  @identifier = identifier
9
- @available_operations = available_operations
10
9
  reset
11
- available_operations.each do |available_operation, implementation|
12
- define_singleton_method available_operation, &implementation
13
- end
14
- end
10
+ CableReady.config.operation_names.each { |name| add_operation_method name }
15
11
 
16
- def channel_broadcast(clear)
17
- operations.select! { |_, list| list.present? }
18
- operations.deep_transform_keys! { |key| key.to_s.camelize(:lower) }
19
- ActionCable.server.broadcast identifier, {"cableReady" => true, "operations" => operations}
20
- reset if clear
12
+ config_observer = self
13
+ CableReady.config.add_observer config_observer, :add_operation_method
14
+ ObjectSpace.define_finalizer self, -> { CableReady.config.delete_observer config_observer }
21
15
  end
22
16
 
23
- def channel_broadcast_to(model, clear)
24
- operations.select! { |_, list| list.present? }
25
- operations.deep_transform_keys! { |key| key.to_s.camelize(:lower) }
26
- identifier.broadcast_to model, {"cableReady" => true, "operations" => operations}
17
+ def broadcast(clear: true)
18
+ ActionCable.server.broadcast identifier, {"cableReady" => true, "operations" => broadcastable_operations}
27
19
  reset if clear
28
20
  end
29
21
 
30
- def broadcast(clear = true)
31
- CableReady::Channels.instance.broadcast(identifier, clear: clear)
22
+ def broadcast_to(model, clear: true)
23
+ identifier.broadcast_to model, {"cableReady" => true, "operations" => broadcastable_operations}
24
+ reset if clear
32
25
  end
33
26
 
34
- def broadcast_to(model, clear = true)
35
- CableReady::Channels.instance.broadcast_to(model, identifier, clear: clear)
27
+ def add_operation_method(name)
28
+ return if respond_to?(name)
29
+ singleton_class.public_send :define_method, name, ->(options = {}) {
30
+ enqueued_operations[name.to_s] << options.stringify_keys
31
+ self # supports operation chaining
32
+ }
36
33
  end
37
34
 
38
35
  private
39
36
 
40
- def enqueue_operation(key, options)
41
- operations[key] << options
42
- self
37
+ def reset
38
+ @enqueued_operations = Hash.new { |hash, key| hash[key] = [] }
43
39
  end
44
40
 
45
- def reset
46
- @operations = Hash.new { |hash, operation| hash[operation] = [] }
41
+ def broadcastable_operations
42
+ enqueued_operations
43
+ .select { |_, list| list.present? }
44
+ .deep_transform_keys! { |key| key.to_s.camelize(:lower) }
47
45
  end
48
46
  end
49
47
  end
@@ -1,86 +1,43 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "thread/local"
3
4
  require_relative "channel"
4
5
 
5
6
  module CableReady
7
+ # This class is a thread local singleton: CableReady::Channels.instance
8
+ # SEE: https://github.com/socketry/thread-local/tree/master/guides/getting-started
6
9
  class Channels
7
- include Singleton
8
- attr_accessor :operations
10
+ extend Thread::Local
9
11
 
10
- def self.configure
11
- yield CableReady::Channels.instance if block_given?
12
- end
12
+ attr_accessor :operations
13
13
 
14
14
  def initialize
15
15
  @channels = {}
16
16
  @operations = {}
17
- %i[
18
- add_css_class
19
- clear_storage
20
- console_log
21
- dispatch_event
22
- inner_html
23
- insert_adjacent_html
24
- insert_adjacent_text
25
- morph
26
- notification
27
- outer_html
28
- push_state
29
- remove
30
- remove_attribute
31
- remove_css_class
32
- remove_storage_item
33
- set_attribute
34
- set_cookie
35
- set_dataset_property
36
- set_focus
37
- set_property
38
- set_storage_item
39
- set_style
40
- set_styles
41
- set_value
42
- text_content
43
- ].each do |operation|
44
- add_operation operation
45
- end
46
- end
47
-
48
- def add_operation(operation, &implementation)
49
- @operations[operation] = implementation || ->(options = {}) { enqueue_operation(operation, options) }
50
17
  end
51
18
 
52
19
  def [](identifier)
53
- @channels[identifier] ||= CableReady::Channel.new(identifier, operations)
20
+ @channels[identifier] ||= CableReady::Channel.new(identifier)
54
21
  end
55
22
 
56
23
  def broadcast(*identifiers, clear: true)
57
- mutex.synchronize do
58
- @channels.values
59
- .reject { |channel| identifiers.any? && identifiers.exclude?(channel.identifier) }
60
- .select { |channel| channel.identifier.is_a?(String) }
61
- .tap do |channels|
62
- channels.each { |channel| @channels[channel.identifier].channel_broadcast(clear) }
63
- channels.each { |channel| @channels.except!(channel.identifier) if clear }
64
- end
65
- end
24
+ @channels.values
25
+ .reject { |channel| identifiers.any? && identifiers.exclude?(channel.identifier) }
26
+ .select { |channel| channel.identifier.is_a?(String) }
27
+ .tap do |channels|
28
+ channels.each { |channel| @channels[channel.identifier].broadcast(clear: clear) }
29
+ channels.each { |channel| @channels.except!(channel.identifier) if clear }
30
+ end
66
31
  end
67
32
 
68
33
  def broadcast_to(model, *identifiers, clear: true)
69
- mutex.synchronize do
70
- @channels.values
71
- .reject { |channel| identifiers.any? && identifiers.exclude?(channel.identifier) }
72
- .reject { |channel| channel.identifier.is_a?(String) }
73
- .tap do |channels|
74
- channels.each { |channel| @channels[channel.identifier].channel_broadcast_to(model, clear) }
75
- channels.each { |channel| @channels.except!(channel.identifier) if clear }
76
- end
77
- end
78
- end
79
-
80
- private
81
-
82
- def mutex
83
- @mutex ||= Mutex.new
34
+ @channels.values
35
+ .reject { |channel| identifiers.any? && identifiers.exclude?(channel.identifier) }
36
+ .reject { |channel| channel.identifier.is_a?(String) }
37
+ .tap do |channels|
38
+ channels.each { |channel| @channels[channel.identifier].broadcast_to(model, clear: clear) }
39
+ channels.each { |channel| @channels.except!(channel.identifier) if clear }
40
+ end
84
41
  end
85
42
  end
86
43
  end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "monitor"
4
+ require "observer"
5
+ require "singleton"
6
+
7
+ module CableReady
8
+ # This class is a process level singleton shared by all threads: CableReady::Config.instance
9
+ class Config
10
+ include MonitorMixin
11
+ include Observable
12
+ include Singleton
13
+
14
+ def initialize
15
+ super
16
+ @operation_names = Set.new(default_operation_names)
17
+ end
18
+
19
+ def operation_names
20
+ @operation_names.to_a
21
+ end
22
+
23
+ def add_operation_name(name)
24
+ synchronize do
25
+ @operation_names << name.to_sym
26
+ notify_observers name.to_sym
27
+ end
28
+ end
29
+
30
+ def default_operation_names
31
+ Set.new(%i[
32
+ add_css_class
33
+ append
34
+ clear_storage
35
+ console_log
36
+ dispatch_event
37
+ go
38
+ graft
39
+ inner_html
40
+ insert_adjacent_html
41
+ insert_adjacent_text
42
+ morph
43
+ notification
44
+ outer_html
45
+ play_sound
46
+ prepend
47
+ push_state
48
+ remove
49
+ remove_attribute
50
+ remove_css_class
51
+ remove_storage_item
52
+ replace
53
+ replace_state
54
+ scroll_into_view
55
+ set_attribute
56
+ set_cookie
57
+ set_dataset_property
58
+ set_focus
59
+ set_property
60
+ set_storage_item
61
+ set_style
62
+ set_styles
63
+ set_value
64
+ text_content
65
+ ]).freeze
66
+ end
67
+ end
68
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CableReady
4
- VERSION = "4.4.6"
4
+ VERSION = "4.5.0"
5
5
  end
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cable_ready",
3
- "version": "4.4.5",
3
+ "version": "4.4.6",
4
4
  "description": "CableReady helps you create great real-time user experiences by making it simple to trigger client-side DOM changes from server-side Ruby.",
5
5
  "keywords": [
6
6
  "ruby",
data/tags CHANGED
@@ -9,49 +9,54 @@ CableReady lib/cable_ready.rb /^module CableReady$/;" m
9
9
  CableReady lib/cable_ready/broadcaster.rb /^module CableReady$/;" m
10
10
  CableReady lib/cable_ready/channel.rb /^module CableReady$/;" m
11
11
  CableReady lib/cable_ready/channels.rb /^module CableReady$/;" m
12
+ CableReady lib/cable_ready/config.rb /^module CableReady$/;" m
12
13
  CableReady lib/cable_ready/version.rb /^module CableReady$/;" m
13
14
  Channel lib/cable_ready/channel.rb /^ class Channel$/;" c class:CableReady
14
15
  Channels lib/cable_ready/channels.rb /^ class Channels$/;" c class:CableReady
16
+ Config lib/cable_ready/config.rb /^ class Config$/;" c class:CableReady
15
17
  Engine lib/cable_ready.rb /^ class Engine < Rails::Engine$/;" c class:CableReady
16
18
  [] lib/cable_ready/channels.rb /^ def [](identifier)$/;" f class:CableReady.Channels
17
- add_operation lib/cable_ready/channels.rb /^ def add_operation(operation, &implementation)$/;" f class:CableReady.Channels
18
- broadcast lib/cable_ready/channel.rb /^ def broadcast(clear = true)$/;" f class:CableReady.Channel
19
+ add_operation_definition lib/cable_ready/config.rb /^ def add_operation_definition(name)$/;" f class:CableReady.Config
20
+ add_operation_method lib/cable_ready/channel.rb /^ def add_operation_method(name)$/;" f class:CableReady.Channel
21
+ broadcast lib/cable_ready/channel.rb /^ def broadcast(clear: true)$/;" f class:CableReady.Channel
19
22
  broadcast lib/cable_ready/channels.rb /^ def broadcast(*identifiers, clear: true)$/;" f class:CableReady.Channels
20
- broadcast_to lib/cable_ready/channel.rb /^ def broadcast_to(model, clear = true)$/;" f class:CableReady.Channel
23
+ broadcast_to lib/cable_ready/channel.rb /^ def broadcast_to(model, clear: true)$/;" f class:CableReady.Channel
21
24
  broadcast_to lib/cable_ready/channels.rb /^ def broadcast_to(model, *identifiers, clear: true)$/;" f class:CableReady.Channels
25
+ broadcastable_operations lib/cable_ready/channel.rb /^ def broadcastable_operations$/;" f class:CableReady.Channel
22
26
  cable_ready lib/cable_ready/broadcaster.rb /^ def cable_ready$/;" f class:CableReady.Broadcaster
23
- channel_broadcast lib/cable_ready/channel.rb /^ def channel_broadcast(clear)$/;" f class:CableReady.Channel
24
- channel_broadcast_to lib/cable_ready/channel.rb /^ def channel_broadcast_to(model, clear)$/;" f class:CableReady.Channel
25
- configure lib/cable_ready/channels.rb /^ def self.configure$/;" F class:CableReady.Channels
26
- const.bubbles javascript/cable_ready.js /^ const init = { bubbles: true, cancelable: true, detail: detail }$/;" p
27
- const.cancelable javascript/cable_ready.js /^ const init = { bubbles: true, cancelable: true, detail: detail }$/;" p
28
- const.color javascript/cable_ready.js /^ color: true,$/;" p
29
- const.date javascript/cable_ready.js /^ date: true,$/;" p
30
- const.datetime javascript/cable_ready.js /^ datetime: true,$/;" p
31
- const.datetime-local javascript/cable_ready.js /^ 'datetime-local': true,$/;" p
32
- const.detail javascript/cable_ready.js /^ const init = { bubbles: true, cancelable: true, detail: detail }$/;" p
33
- const.email javascript/cable_ready.js /^ email: true,$/;" p
34
- const.month javascript/cable_ready.js /^ month: true,$/;" p
35
- const.number javascript/cable_ready.js /^ number: true,$/;" p
36
- const.password javascript/cable_ready.js /^ password: true,$/;" p
27
+ config lib/cable_ready.rb /^ def self.config$/;" F class:CableReady
28
+ configure lib/cable_ready.rb /^ def self.configure$/;" F class:CableReady
29
+ const.bubbles javascript/utils.js /^ const init = { bubbles: true, cancelable: true, detail: detail }$/;" p
30
+ const.cancelable javascript/utils.js /^ const init = { bubbles: true, cancelable: true, detail: detail }$/;" p
31
+ const.detail javascript/utils.js /^ const init = { bubbles: true, cancelable: true, detail: detail }$/;" p
37
32
  const.pushState javascript/cable_ready.js /^ pushState: config => {$/;" p
38
- const.range javascript/cable_ready.js /^ range: true,$/;" p
39
- const.search javascript/cable_ready.js /^ search: true,$/;" p
40
- const.select-multiple javascript/cable_ready.js /^ 'select-multiple': true,$/;" p
41
- const.select-one javascript/cable_ready.js /^ 'select-one': true,$/;" p
42
- const.tel javascript/cable_ready.js /^ tel: true,$/;" p
43
- const.text javascript/cable_ready.js /^ text: true,$/;" p
44
- const.textarea javascript/cable_ready.js /^ textarea: true,$/;" p
45
- const.time javascript/cable_ready.js /^ time: true,$/;" p
46
- const.url javascript/cable_ready.js /^ url: true,$/;" p
47
- const.value javascript/cable_ready.js /^ const ignore = { value: true }$/;" p
48
- const.week javascript/cable_ready.js /^ week: true$/;" p
33
+ const.value javascript/callbacks.js /^ const ignore = { value: true }$/;" p
34
+ default_operation_names lib/cable_ready/config.rb /^ def default_operation_names$/;" f class:CableReady.Config
49
35
  dom_id lib/cable_ready/broadcaster.rb /^ def dom_id(record, prefix = nil)$/;" f class:CableReady.Broadcaster
50
- enqueue_operation lib/cable_ready/channel.rb /^ def enqueue_operation(key, options)$/;" f class:CableReady.Channel
51
- import.INPUT javascript/cable_ready.js /^ INPUT: true,$/;" p
52
- import.SELECT javascript/cable_ready.js /^ SELECT: true$/;" p
53
- import.TEXTAREA javascript/cable_ready.js /^ TEXTAREA: true,$/;" p
54
- initialize lib/cable_ready/channel.rb /^ def initialize(identifier, available_operations)$/;" f class:CableReady.Channel
36
+ export.INPUT javascript/enums.js /^ INPUT: true,$/;" p
37
+ export.OPTION javascript/enums.js /^ OPTION: true$/;" p
38
+ export.SELECT javascript/enums.js /^ SELECT: true$/;" p
39
+ export.TEXTAREA javascript/enums.js /^ TEXTAREA: true,$/;" p
40
+ export.color javascript/enums.js /^ color: true,$/;" p
41
+ export.date javascript/enums.js /^ date: true,$/;" p
42
+ export.datetime javascript/enums.js /^ datetime: true,$/;" p
43
+ export.datetime-local javascript/enums.js /^ 'datetime-local': true,$/;" p
44
+ export.email javascript/enums.js /^ email: true,$/;" p
45
+ export.month javascript/enums.js /^ month: true,$/;" p
46
+ export.number javascript/enums.js /^ number: true,$/;" p
47
+ export.password javascript/enums.js /^ password: true,$/;" p
48
+ export.range javascript/enums.js /^ range: true,$/;" p
49
+ export.search javascript/enums.js /^ search: true,$/;" p
50
+ export.select-multiple javascript/enums.js /^ 'select-multiple': true,$/;" p
51
+ export.select-one javascript/enums.js /^ 'select-one': true,$/;" p
52
+ export.tel javascript/enums.js /^ tel: true,$/;" p
53
+ export.text javascript/enums.js /^ text: true,$/;" p
54
+ export.textarea javascript/enums.js /^ textarea: true,$/;" p
55
+ export.time javascript/enums.js /^ time: true,$/;" p
56
+ export.url javascript/enums.js /^ url: true,$/;" p
57
+ export.week javascript/enums.js /^ week: true$/;" p
58
+ initialize lib/cable_ready/channel.rb /^ def initialize(identifier)$/;" f class:CableReady.Channel
55
59
  initialize lib/cable_ready/channels.rb /^ def initialize$/;" f class:CableReady.Channels
56
- mutex lib/cable_ready/channels.rb /^ def mutex$/;" f class:CableReady.Channels
60
+ initialize lib/cable_ready/config.rb /^ def initialize$/;" f class:CableReady.Config
61
+ operation_names lib/cable_ready/config.rb /^ def operation_names$/;" f class:CableReady.Config
57
62
  reset lib/cable_ready/channel.rb /^ def reset$/;" f class:CableReady.Channel
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cable_ready
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.4.6
4
+ version: 4.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Hopkins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-18 00:00:00.000000000 Z
11
+ date: 2021-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '5.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: thread-local
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.1.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: github_changelog_generator
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -131,6 +145,7 @@ files:
131
145
  - lib/cable_ready/broadcaster.rb
132
146
  - lib/cable_ready/channel.rb
133
147
  - lib/cable_ready/channels.rb
148
+ - lib/cable_ready/config.rb
134
149
  - lib/cable_ready/version.rb
135
150
  - package.json
136
151
  - tags
@@ -154,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
169
  - !ruby/object:Gem::Version
155
170
  version: '0'
156
171
  requirements: []
157
- rubygems_version: 3.1.2
172
+ rubygems_version: 3.1.4
158
173
  signing_key:
159
174
  specification_version: 4
160
175
  summary: Out-of-Band Server Triggered DOM Operations