cable_ready 5.0.0.pre1 → 5.0.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1ea5fbe24e4f1b83076638efc0d58b4e988d7574bae4a87b118a082626a1c97b
4
- data.tar.gz: d4596c2299625e8982798a05fd49802328da88d19bb677f69173537b3cf0df93
3
+ metadata.gz: 8bb4eaf8d394d6148e9726fb043dcdd34e3ce9e893b8bfba84a5222481a1c951
4
+ data.tar.gz: f57b4d052d2fa2f3236f4d64528a8fd546c3983e567a813730f2480358805be1
5
5
  SHA512:
6
- metadata.gz: c283ad94d23983f2acdd5cdc008fa05d8ea89710b3022291378407664a3bb9a48423baa5b2bf3a29de0f96633f2591e854366520b180f80dabbe6d8ae021cf16
7
- data.tar.gz: ef3d75827a0e2774eb130dde7d56eea234f3dc515652e74800dc785e8327fad9d2619092a7fd5040dbe2095772e9b11d357fccde00eefa31cf40bfa27d8df5c1
6
+ metadata.gz: 180c342be129e4c747823f9697363e3d8ffe50a58da146a2c1ea85f216018a59e333c44dfb89037e2fa7d6ba5f1f95feee4c4c756da97460ebb7e060b9a8566e
7
+ data.tar.gz: 9e0f2341bef2045587c54c2a3edfd38224471c2be3582e4e4fb1e1dfa5587e0a29e8148c650f1e39e26bbe96eede3242921e4dcffbd20a8fc924d184cc04b31d
data/Gemfile.lock CHANGED
@@ -1,113 +1,121 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cable_ready (5.0.0.pre0)
4
+ cable_ready (5.0.0.pre2)
5
5
  rails (>= 5.2)
6
6
  thread-local (>= 1.1.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- actioncable (6.1.3.2)
12
- actionpack (= 6.1.3.2)
13
- activesupport (= 6.1.3.2)
11
+ actioncable (6.1.4)
12
+ actionpack (= 6.1.4)
13
+ activesupport (= 6.1.4)
14
14
  nio4r (~> 2.0)
15
15
  websocket-driver (>= 0.6.1)
16
- actionmailbox (6.1.3.2)
17
- actionpack (= 6.1.3.2)
18
- activejob (= 6.1.3.2)
19
- activerecord (= 6.1.3.2)
20
- activestorage (= 6.1.3.2)
21
- activesupport (= 6.1.3.2)
16
+ actionmailbox (6.1.4)
17
+ actionpack (= 6.1.4)
18
+ activejob (= 6.1.4)
19
+ activerecord (= 6.1.4)
20
+ activestorage (= 6.1.4)
21
+ activesupport (= 6.1.4)
22
22
  mail (>= 2.7.1)
23
- actionmailer (6.1.3.2)
24
- actionpack (= 6.1.3.2)
25
- actionview (= 6.1.3.2)
26
- activejob (= 6.1.3.2)
27
- activesupport (= 6.1.3.2)
23
+ actionmailer (6.1.4)
24
+ actionpack (= 6.1.4)
25
+ actionview (= 6.1.4)
26
+ activejob (= 6.1.4)
27
+ activesupport (= 6.1.4)
28
28
  mail (~> 2.5, >= 2.5.4)
29
29
  rails-dom-testing (~> 2.0)
30
- actionpack (6.1.3.2)
31
- actionview (= 6.1.3.2)
32
- activesupport (= 6.1.3.2)
30
+ actionpack (6.1.4)
31
+ actionview (= 6.1.4)
32
+ activesupport (= 6.1.4)
33
33
  rack (~> 2.0, >= 2.0.9)
34
34
  rack-test (>= 0.6.3)
35
35
  rails-dom-testing (~> 2.0)
36
36
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
37
- actiontext (6.1.3.2)
38
- actionpack (= 6.1.3.2)
39
- activerecord (= 6.1.3.2)
40
- activestorage (= 6.1.3.2)
41
- activesupport (= 6.1.3.2)
37
+ actiontext (6.1.4)
38
+ actionpack (= 6.1.4)
39
+ activerecord (= 6.1.4)
40
+ activestorage (= 6.1.4)
41
+ activesupport (= 6.1.4)
42
42
  nokogiri (>= 1.8.5)
43
- actionview (6.1.3.2)
44
- activesupport (= 6.1.3.2)
43
+ actionview (6.1.4)
44
+ activesupport (= 6.1.4)
45
45
  builder (~> 3.1)
46
46
  erubi (~> 1.4)
47
47
  rails-dom-testing (~> 2.0)
48
48
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
49
- activejob (6.1.3.2)
50
- activesupport (= 6.1.3.2)
49
+ activejob (6.1.4)
50
+ activesupport (= 6.1.4)
51
51
  globalid (>= 0.3.6)
52
- activemodel (6.1.3.2)
53
- activesupport (= 6.1.3.2)
54
- activerecord (6.1.3.2)
55
- activemodel (= 6.1.3.2)
56
- activesupport (= 6.1.3.2)
57
- activestorage (6.1.3.2)
58
- actionpack (= 6.1.3.2)
59
- activejob (= 6.1.3.2)
60
- activerecord (= 6.1.3.2)
61
- activesupport (= 6.1.3.2)
52
+ activemodel (6.1.4)
53
+ activesupport (= 6.1.4)
54
+ activerecord (6.1.4)
55
+ activemodel (= 6.1.4)
56
+ activesupport (= 6.1.4)
57
+ activestorage (6.1.4)
58
+ actionpack (= 6.1.4)
59
+ activejob (= 6.1.4)
60
+ activerecord (= 6.1.4)
61
+ activesupport (= 6.1.4)
62
62
  marcel (~> 1.0.0)
63
- mini_mime (~> 1.0.2)
64
- activesupport (6.1.3.2)
63
+ mini_mime (>= 1.1.0)
64
+ activesupport (6.1.4)
65
65
  concurrent-ruby (~> 1.0, >= 1.0.2)
66
66
  i18n (>= 1.6, < 2)
67
67
  minitest (>= 5.1)
68
68
  tzinfo (~> 2.0)
69
69
  zeitwerk (~> 2.3)
70
- addressable (2.7.0)
70
+ addressable (2.8.0)
71
71
  public_suffix (>= 2.0.2, < 5.0)
72
72
  ast (2.4.2)
73
- async (1.29.0)
73
+ async (1.30.0)
74
74
  console (~> 1.10)
75
75
  nio4r (~> 2.3)
76
76
  timers (~> 4.1)
77
- async-http (0.56.2)
78
- async (~> 1.25)
79
- async-io (~> 1.28)
80
- async-pool (~> 0.2)
77
+ async-http (0.56.5)
78
+ async (>= 1.25)
79
+ async-io (>= 1.28)
80
+ async-pool (>= 0.2)
81
81
  protocol-http (~> 0.22.0)
82
82
  protocol-http1 (~> 0.14.0)
83
83
  protocol-http2 (~> 0.14.0)
84
- async-http-faraday (0.9.0)
84
+ async-http-faraday (0.11.0)
85
85
  async-http (~> 0.42)
86
86
  faraday
87
- async-io (1.31.0)
88
- async (~> 1.14)
89
- async-pool (0.3.6)
90
- async (~> 1.25)
87
+ async-io (1.32.2)
88
+ async
89
+ async-pool (0.3.8)
90
+ async (>= 1.25)
91
91
  builder (3.2.4)
92
92
  coderay (1.1.3)
93
- concurrent-ruby (1.1.8)
94
- console (1.12.0)
93
+ concurrent-ruby (1.1.9)
94
+ console (1.13.1)
95
95
  fiber-local
96
96
  crass (1.0.6)
97
97
  erubi (1.10.0)
98
- faraday (1.4.1)
98
+ faraday (1.5.1)
99
+ faraday-em_http (~> 1.0)
100
+ faraday-em_synchrony (~> 1.0)
99
101
  faraday-excon (~> 1.1)
102
+ faraday-httpclient (~> 1.0.1)
100
103
  faraday-net_http (~> 1.0)
101
104
  faraday-net_http_persistent (~> 1.1)
105
+ faraday-patron (~> 1.0)
102
106
  multipart-post (>= 1.2, < 3)
103
107
  ruby2_keywords (>= 0.0.4)
108
+ faraday-em_http (1.0.0)
109
+ faraday-em_synchrony (1.0.0)
104
110
  faraday-excon (1.1.0)
105
111
  faraday-http-cache (2.2.0)
106
112
  faraday (>= 0.8)
113
+ faraday-httpclient (1.0.1)
107
114
  faraday-net_http (1.0.1)
108
- faraday-net_http_persistent (1.1.0)
115
+ faraday-net_http_persistent (1.2.0)
116
+ faraday-patron (1.0.0)
109
117
  fiber-local (1.0.0)
110
- github_changelog_generator (1.16.3)
118
+ github_changelog_generator (1.16.4)
111
119
  activesupport
112
120
  async (>= 1.25.0)
113
121
  async-http-faraday
@@ -116,12 +124,11 @@ GEM
116
124
  octokit (~> 4.6)
117
125
  rainbow (>= 2.2.1)
118
126
  rake (>= 10.0)
119
- retriable (~> 3.0)
120
127
  globalid (0.4.2)
121
128
  activesupport (>= 4.2.0)
122
129
  i18n (1.8.10)
123
130
  concurrent-ruby (~> 1.0)
124
- loofah (2.9.1)
131
+ loofah (2.10.0)
125
132
  crass (~> 1.0.2)
126
133
  nokogiri (>= 1.5.9)
127
134
  magic_frozen_string_literal (1.2.0)
@@ -129,24 +136,24 @@ GEM
129
136
  mini_mime (>= 0.1.1)
130
137
  marcel (1.0.1)
131
138
  method_source (0.9.2)
132
- mini_mime (1.0.3)
133
- mini_portile2 (2.5.1)
139
+ mini_mime (1.1.0)
140
+ mini_portile2 (2.5.3)
134
141
  minitest (5.14.4)
135
- mocha (1.12.0)
142
+ mocha (1.13.0)
136
143
  multi_json (1.15.0)
137
144
  multipart-post (2.1.1)
138
145
  nio4r (2.5.7)
139
- nokogiri (1.11.5)
146
+ nokogiri (1.11.7)
140
147
  mini_portile2 (~> 2.5.0)
141
148
  racc (~> 1.4)
142
149
  octokit (4.21.0)
143
150
  faraday (>= 0.9)
144
151
  sawyer (~> 0.8.0, >= 0.5.3)
145
152
  parallel (1.20.1)
146
- parser (3.0.1.1)
153
+ parser (3.0.2.0)
147
154
  ast (~> 2.4.1)
148
155
  protocol-hpack (1.4.2)
149
- protocol-http (0.22.0)
156
+ protocol-http (0.22.5)
150
157
  protocol-http1 (0.14.1)
151
158
  protocol-http (~> 0.22)
152
159
  protocol-http2 (0.14.2)
@@ -162,53 +169,52 @@ GEM
162
169
  rack (2.2.3)
163
170
  rack-test (1.1.0)
164
171
  rack (>= 1.0, < 3)
165
- rails (6.1.3.2)
166
- actioncable (= 6.1.3.2)
167
- actionmailbox (= 6.1.3.2)
168
- actionmailer (= 6.1.3.2)
169
- actionpack (= 6.1.3.2)
170
- actiontext (= 6.1.3.2)
171
- actionview (= 6.1.3.2)
172
- activejob (= 6.1.3.2)
173
- activemodel (= 6.1.3.2)
174
- activerecord (= 6.1.3.2)
175
- activestorage (= 6.1.3.2)
176
- activesupport (= 6.1.3.2)
172
+ rails (6.1.4)
173
+ actioncable (= 6.1.4)
174
+ actionmailbox (= 6.1.4)
175
+ actionmailer (= 6.1.4)
176
+ actionpack (= 6.1.4)
177
+ actiontext (= 6.1.4)
178
+ actionview (= 6.1.4)
179
+ activejob (= 6.1.4)
180
+ activemodel (= 6.1.4)
181
+ activerecord (= 6.1.4)
182
+ activestorage (= 6.1.4)
183
+ activesupport (= 6.1.4)
177
184
  bundler (>= 1.15.0)
178
- railties (= 6.1.3.2)
185
+ railties (= 6.1.4)
179
186
  sprockets-rails (>= 2.0.0)
180
187
  rails-dom-testing (2.0.3)
181
188
  activesupport (>= 4.2.0)
182
189
  nokogiri (>= 1.6)
183
190
  rails-html-sanitizer (1.3.0)
184
191
  loofah (~> 2.3)
185
- railties (6.1.3.2)
186
- actionpack (= 6.1.3.2)
187
- activesupport (= 6.1.3.2)
192
+ railties (6.1.4)
193
+ actionpack (= 6.1.4)
194
+ activesupport (= 6.1.4)
188
195
  method_source
189
- rake (>= 0.8.7)
196
+ rake (>= 0.13)
190
197
  thor (~> 1.0)
191
198
  rainbow (3.0.0)
192
- rake (13.0.3)
199
+ rake (13.0.6)
193
200
  regexp_parser (2.1.1)
194
- retriable (3.1.2)
195
201
  rexml (3.2.5)
196
- rubocop (1.14.0)
202
+ rubocop (1.18.3)
197
203
  parallel (~> 1.10)
198
204
  parser (>= 3.0.0.0)
199
205
  rainbow (>= 2.2.2, < 4.0)
200
206
  regexp_parser (>= 1.8, < 3.0)
201
207
  rexml
202
- rubocop-ast (>= 1.5.0, < 2.0)
208
+ rubocop-ast (>= 1.7.0, < 2.0)
203
209
  ruby-progressbar (~> 1.7)
204
210
  unicode-display_width (>= 1.4.0, < 3.0)
205
- rubocop-ast (1.5.0)
211
+ rubocop-ast (1.8.0)
206
212
  parser (>= 3.0.1.1)
207
- rubocop-performance (1.11.2)
213
+ rubocop-performance (1.11.4)
208
214
  rubocop (>= 1.7.0, < 2.0)
209
215
  rubocop-ast (>= 0.4.0)
210
216
  ruby-progressbar (1.11.0)
211
- ruby2_keywords (0.0.4)
217
+ ruby2_keywords (0.0.5)
212
218
  sawyer (0.8.2)
213
219
  addressable (>= 2.3.5)
214
220
  faraday (> 0.8, < 2.0)
@@ -219,9 +225,9 @@ GEM
219
225
  actionpack (>= 4.0)
220
226
  activesupport (>= 4.0)
221
227
  sprockets (>= 3.0.0)
222
- standard (1.1.1)
223
- rubocop (= 1.14.0)
224
- rubocop-performance (= 1.11.2)
228
+ standard (1.1.5)
229
+ rubocop (= 1.18.3)
230
+ rubocop-performance (= 1.11.4)
225
231
  standardrb (1.0.0)
226
232
  standard
227
233
  thor (1.1.0)
@@ -230,7 +236,7 @@ GEM
230
236
  tzinfo (2.0.4)
231
237
  concurrent-ruby (~> 1.0)
232
238
  unicode-display_width (2.0.0)
233
- websocket-driver (0.7.3)
239
+ websocket-driver (0.7.5)
234
240
  websocket-extensions (>= 0.1.0)
235
241
  websocket-extensions (0.1.5)
236
242
  zeitwerk (2.4.2)
@@ -249,4 +255,4 @@ DEPENDENCIES
249
255
  standardrb
250
256
 
251
257
  BUNDLED WITH
252
- 2.2.3
258
+ 2.2.19
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path("../lib/cable_ready/version", __FILE__)
4
+
5
+ Gem::Specification.new do |gem|
6
+ gem.name = "cable_ready"
7
+ gem.license = "MIT"
8
+ gem.version = CableReady::VERSION
9
+ gem.authors = ["Nathan Hopkins"]
10
+ gem.email = ["natehop@gmail.com"]
11
+ gem.homepage = "https://github.com/stimulusreflex/cable_ready"
12
+ gem.summary = "Out-of-Band Server Triggered DOM Operations"
13
+
14
+ gem.files = Dir["lib/**/*.rb", "app/**/*.rb", "bin/*", "[A-Z]*"]
15
+ gem.test_files = Dir["test/**/*.rb"]
16
+
17
+ gem.add_dependency "rails", ">= 5.2"
18
+ gem.add_dependency "thread-local", ">= 1.1.0"
19
+
20
+ gem.add_development_dependency "github_changelog_generator"
21
+ gem.add_development_dependency "magic_frozen_string_literal"
22
+ gem.add_development_dependency "pry"
23
+ gem.add_development_dependency "pry-nav"
24
+ gem.add_development_dependency "rake"
25
+ gem.add_development_dependency "standardrb"
26
+ gem.add_development_dependency "mocha"
27
+ end
data/lib/cable_ready.rb CHANGED
@@ -30,8 +30,11 @@ module CableReady
30
30
  initializer "renderer" do
31
31
  ActiveSupport.on_load(:action_controller) do
32
32
  ActionController::Renderers.add :operations do |operations, options|
33
+ response.content_type ||= Mime[:cable_ready]
33
34
  render json: operations.dispatch
34
35
  end
36
+
37
+ Mime::Type.register "application/vnd.cable-ready.json", :cable_ready
35
38
  end
36
39
  end
37
40
  end
@@ -3,9 +3,13 @@
3
3
  module CableReady
4
4
  module Identifiable
5
5
  def dom_id(record, prefix = nil)
6
+ return record.to_dom_selector if record.respond_to?(:to_dom_selector)
7
+
6
8
  prefix = prefix.to_s.strip if prefix
7
9
 
8
- id = if record.is_a?(ActiveRecord::Relation)
10
+ id = if record.respond_to?(:to_dom_id)
11
+ record.to_dom_id
12
+ elsif record.is_a?(ActiveRecord::Relation)
9
13
  [prefix, record.model_name.plural].compact.join("_")
10
14
  elsif record.is_a?(ActiveRecord::Base)
11
15
  ActionView::RecordIdentifier.dom_id(record, prefix)
@@ -13,7 +17,14 @@ module CableReady
13
17
  [prefix, record.to_s.strip].compact.join("_")
14
18
  end
15
19
 
16
- "##{id}".squeeze("#").strip
20
+ "##{id}".squeeze("#").strip.downcase
21
+ end
22
+
23
+ def identifiable?(obj)
24
+ obj.respond_to?(:to_dom_selector) ||
25
+ obj.respond_to?(:to_dom_id) ||
26
+ obj.is_a?(ActiveRecord::Relation) ||
27
+ obj.is_a?(ActiveRecord::Base)
17
28
  end
18
29
  end
19
30
  end
@@ -24,15 +24,29 @@ module CableReady
24
24
  def add_operation_method(name)
25
25
  return if respond_to?(name)
26
26
  singleton_class.public_send :define_method, name, ->(*args) {
27
- selector, options = nil, args.first || {} # 1 or 0 params
28
- selector, options = options, {} unless options.is_a?(Hash) # swap if only selector provided
29
- selector, options = args[0, 2] if args.many? # 2 or more params
30
- options.stringify_keys!
27
+ if args.one? && args.first.respond_to?(:to_operation_options) && [Array, Hash].include?(args.first.to_operation_options.class)
28
+ case args.first.to_operation_options
29
+ when Array
30
+ selector, options = nil, args.first.to_operation_options
31
+ .select { |e| e.is_a?(Symbol) && args.first.respond_to?("to_#{e}".to_sym) }
32
+ .each_with_object({}) { |option, memo| memo[option.to_s] = args.first.send("to_#{option}".to_sym) }
33
+ when Hash
34
+ selector, options = nil, args.first.to_operation_options
35
+ else
36
+ raise TypeError, ":to_operation_options returned an #{args.first.to_operation_options.class.name}. Must be an Array or Hash."
37
+ end
38
+ else
39
+ selector, options = nil, args.first || {} # 1 or 0 params
40
+ selector, options = options, {} unless options.is_a?(Hash) # swap if only selector provided
41
+ selector, options = args[0, 2] if args.many? # 2 or more params
42
+ options.stringify_keys!
43
+ options.each { |key, value| options[key] = value.send("to_#{key}".to_sym) if value.respond_to?("to_#{key}".to_sym) }
44
+ end
31
45
  options["selector"] = selector if selector && options.exclude?("selector")
32
46
  options["selector"] = previous_selector if previous_selector && options.exclude?("selector")
33
47
  if options.include?("selector")
34
48
  @previous_selector = options["selector"]
35
- options["selector"] = previous_selector.is_a?(ActiveRecord::Base) || previous_selector.is_a?(ActiveRecord::Relation) ? dom_id(previous_selector) : previous_selector
49
+ options["selector"] = identifiable?(previous_selector) ? dom_id(previous_selector) : previous_selector
36
50
  end
37
51
  @enqueued_operations[name.to_s] << options
38
52
  self
@@ -7,48 +7,59 @@ class CableReady::SanityChecker
7
7
 
8
8
  class << self
9
9
  def check!
10
+ return if ENV["SKIP_SANITY_CHECK"]
10
11
  return if CableReady.config.on_failed_sanity_checks == :ignore
11
12
  return if called_by_generate_config?
13
+ return if called_by_rake?
12
14
 
13
15
  instance = new
14
- instance.check_javascript_package_version
16
+ instance.check_package_versions_match
15
17
  instance.check_new_version_available
16
18
  end
17
19
 
18
20
  private
19
21
 
20
22
  def called_by_generate_config?
21
- ARGV.include? "cable_ready:initializer"
23
+ ARGV.include?("cable_ready:initializer")
24
+ end
25
+
26
+ def called_by_rake?
27
+ File.basename($PROGRAM_NAME) == "rake"
22
28
  end
23
29
  end
24
30
 
25
- def check_javascript_package_version
26
- if javascript_package_version.nil?
31
+ def check_package_versions_match
32
+ if npm_version.nil?
27
33
  warn_and_exit <<~WARN
28
- Can't locate the cable_ready npm package.
34
+ 👉 Can't locate the cable_ready npm package.
35
+
36
+ yarn add cable_ready@#{gem_version}
37
+
29
38
  Either add it to your package.json as a dependency or use "yarn link cable_ready" if you are doing development.
30
39
  WARN
31
40
  end
32
41
 
33
- unless javascript_version_matches?
42
+ if package_version_mismatch?
34
43
  warn_and_exit <<~WARN
35
- The cable_ready npm package version (#{javascript_package_version}) does not match the Rubygem version (#{gem_version}).
44
+ 👉 The cable_ready npm package version (#{npm_version}) does not match the Rubygem version (#{gem_version}).
45
+
36
46
  To update the cable_ready npm package:
47
+
37
48
  yarn upgrade cable_ready@#{gem_version}
38
49
  WARN
39
50
  end
40
51
  end
41
52
 
42
53
  def check_new_version_available
43
- return unless Rails.env.development?
44
54
  return if CableReady.config.on_new_version_available == :ignore
45
- return unless using_stable_release
55
+ return if Rails.env.development? == false
56
+ return if using_preview_release?
46
57
  begin
47
58
  latest_version = URI.open("https://raw.githubusercontent.com/stimulusreflex/cable_ready/master/LATEST", open_timeout: 1, read_timeout: 1).read.strip
48
59
  if latest_version != CableReady::VERSION
49
60
  puts <<~WARN
50
61
 
51
- There is a new version of CableReady available!
62
+ 👉 There is a new version of CableReady available!
52
63
  Current: #{CableReady::VERSION} Latest: #{latest_version}
53
64
 
54
65
  If you upgrade, it is very important that you update BOTH Gemfile and package.json
@@ -58,31 +69,31 @@ class CableReady::SanityChecker
58
69
  exit if CableReady.config.on_new_version_available == :exit
59
70
  end
60
71
  rescue
61
- puts "CableReady #{CableReady::VERSION} update check skipped: connection timeout"
72
+ puts "👉 CableReady #{CableReady::VERSION} update check skipped: connection timeout"
62
73
  end
63
74
  end
64
75
 
65
76
  private
66
77
 
67
- def javascript_version_matches?
68
- javascript_package_version == gem_version
78
+ def package_version_mismatch?
79
+ npm_version != gem_version
69
80
  end
70
81
 
71
- def using_stable_release
72
- stable = CableReady::VERSION.match?(LATEST_VERSION_FORMAT)
73
- puts "CableReady #{CableReady::VERSION} update check skipped: pre-release build" unless stable
74
- stable
82
+ def using_preview_release?
83
+ preview = CableReady::VERSION.match?(LATEST_VERSION_FORMAT) == false
84
+ puts "👉 CableReady #{CableReady::VERSION} update check skipped: pre-release build" if preview
85
+ preview
75
86
  end
76
87
 
77
88
  def gem_version
78
89
  @_gem_version ||= CableReady::VERSION.gsub(".pre", "-pre")
79
90
  end
80
91
 
81
- def javascript_package_version
82
- @_js_version ||= find_javascript_package_version
92
+ def npm_version
93
+ @_npm_version ||= find_npm_version
83
94
  end
84
95
 
85
- def find_javascript_package_version
96
+ def find_npm_version
86
97
  if (match = search_file(package_json_path, regex: /version/))
87
98
  match[JSON_VERSION_FORMAT, 1]
88
99
  elsif (match = search_file(yarn_lock_path, regex: /^cable_ready/))
@@ -91,7 +102,7 @@ class CableReady::SanityChecker
91
102
  end
92
103
 
93
104
  def search_file(path, regex:)
94
- return unless File.exist?(path)
105
+ return if File.exist?(path) == false
95
106
  File.foreach(path).grep(regex).first
96
107
  end
97
108
 
@@ -103,49 +114,38 @@ class CableReady::SanityChecker
103
114
  Rails.root.join("yarn.lock")
104
115
  end
105
116
 
106
- def initializer_path
107
- @_initializer_path ||= Rails.root.join("config", "initializers", "cable_ready.rb")
117
+ def initializer_missing?
118
+ File.exist?(Rails.root.join("config", "initializers", "cable_ready.rb")) == false
108
119
  end
109
120
 
110
121
  def warn_and_exit(text)
111
- puts "WARNING:"
122
+ puts
123
+ puts "Heads up! 🔥"
124
+ puts
112
125
  puts text
113
- exit_with_info if CableReady.config.on_failed_sanity_checks == :exit
114
- end
115
-
116
- def exit_with_info
117
126
  puts
118
-
119
- if File.exist?(initializer_path)
127
+ if CableReady.config.on_failed_sanity_checks == :exit
120
128
  puts <<~INFO
121
- If you know what you are doing and you want to start the application anyway,
122
- you can add the following directive to the CableReady initializer,
123
- which is located at #{initializer_path}
129
+ To ignore any warnings and start the application anyway, you can set the SKIP_SANITY_CHECK environment variable:
124
130
 
125
- CableReady.configure do |config|
126
- config.on_failed_sanity_checks = :warn
127
- end
128
-
129
- INFO
130
- else
131
- puts <<~INFO
132
- If you know what you are doing and you want to start the application anyway,
133
- you can create a CableReady initializer with the command:
134
-
135
- bundle exec rails generate cable_ready:config
131
+ SKIP_SANITY_CHECK=true rails
136
132
 
137
- Then open your initializer at
138
-
139
- #{initializer_path}
140
-
141
- and then add the following directive:
133
+ To do this permanently, add the following directive to the CableReady initializer:
142
134
 
143
135
  CableReady.configure do |config|
144
136
  config.on_failed_sanity_checks = :warn
145
137
  end
146
138
 
147
139
  INFO
140
+ if initializer_missing?
141
+ puts <<~INFO
142
+ You can create a CableReady initializer with the command:
143
+
144
+ bundle exec rails generate cable_ready:initializer
145
+
146
+ INFO
147
+ end
148
+ exit false if Rails.env.test? == false
148
149
  end
149
- exit false unless Rails.env.test?
150
150
  end
151
151
  end