anycable-rails 1.0.0.preview1 → 1.0.0.rc4

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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +29 -121
  3. data/MIT-LICENSE +1 -1
  4. data/README.md +19 -34
  5. data/lib/anycable/rails.rb +36 -2
  6. data/lib/anycable/rails/actioncable/channel.rb +4 -0
  7. data/lib/anycable/rails/actioncable/connection.rb +26 -35
  8. data/lib/anycable/rails/actioncable/connection/persistent_session.rb +5 -1
  9. data/lib/anycable/rails/actioncable/connection/serializable_identification.rb +42 -0
  10. data/lib/anycable/rails/actioncable/remote_connections.rb +11 -0
  11. data/lib/anycable/rails/actioncable/testing.rb +35 -0
  12. data/lib/anycable/rails/channel_state.rb +46 -0
  13. data/lib/anycable/rails/compatibility.rb +4 -7
  14. data/lib/anycable/rails/compatibility/rubocop.rb +0 -1
  15. data/lib/anycable/rails/compatibility/rubocop/config/default.yml +3 -0
  16. data/lib/anycable/rails/compatibility/rubocop/cops/anycable/instance_vars.rb +1 -1
  17. data/lib/anycable/rails/compatibility/rubocop/cops/anycable/stream_from.rb +4 -4
  18. data/lib/anycable/rails/railtie.rb +26 -18
  19. data/lib/anycable/rails/refinements/subscriptions.rb +5 -0
  20. data/lib/anycable/rails/session_proxy.rb +19 -2
  21. data/lib/anycable/rails/version.rb +1 -1
  22. data/lib/generators/anycable/download/USAGE +14 -0
  23. data/lib/generators/anycable/download/download_generator.rb +83 -0
  24. data/lib/generators/anycable/setup/USAGE +2 -0
  25. data/lib/{rails/generators → generators}/anycable/setup/setup_generator.rb +89 -90
  26. data/lib/{rails/generators → generators}/anycable/setup/templates/Procfile.dev +0 -0
  27. data/lib/{rails/generators → generators}/anycable/setup/templates/config/anycable.yml.tt +14 -3
  28. data/lib/generators/anycable/setup/templates/config/cable.yml.tt +11 -0
  29. data/lib/{rails/generators/anycable/setup/templates/config/initializers/anycable.rb → generators/anycable/setup/templates/config/initializers/anycable.rb.tt} +1 -1
  30. data/lib/generators/anycable/with_os_helpers.rb +55 -0
  31. metadata +27 -50
  32. data/lib/anycable/rails/compatibility/rubocop/cops/anycable/remote_disconnect.rb +0 -31
  33. data/lib/rails/generators/anycable/setup/templates/Procfile +0 -2
  34. data/lib/rails/generators/anycable/setup/templates/bin/heroku-web +0 -7
  35. data/lib/rails/generators/anycable/setup/templates/config/cable.yml.tt +0 -11
@@ -0,0 +1,2 @@
1
+ Description:
2
+ Configures your application to work with AnyCable interactively.
@@ -1,33 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "generators/anycable/with_os_helpers"
4
+
3
5
  module AnyCableRailsGenerators
4
6
  # Entry point for interactive installation
5
7
  class SetupGenerator < ::Rails::Generators::Base
6
8
  namespace "anycable:setup"
7
9
  source_root File.expand_path("templates", __dir__)
8
10
 
9
- METHODS = %w[skip local docker].freeze
10
- SERVER_VERSION = "v0.6.4"
11
- OS_NAMES = %w[linux darwin freebsd win].freeze
12
- CPU_NAMES = %w[amd64 arm64 386 arm].freeze
11
+ DOCS_ROOT = "https://docs.anycable.io/v1/#"
12
+ DEVELOPMENT_METHODS = %w[skip local docker].freeze
13
13
  SERVER_SOURCES = %w[skip brew binary].freeze
14
- DEFAULT_BIN_PATH = "/usr/local/bin"
15
14
 
16
- class_option :method,
15
+ class_option :devenv,
17
16
  type: :string,
18
- desc: "Select your development environment (options: #{METHODS.join(", ")})"
17
+ desc: "Select your development environment (options: #{DEVELOPMENT_METHODS.join(", ")})"
19
18
  class_option :source,
20
19
  type: :string,
21
20
  desc: "Choose a way of installing AnyCable-Go server (options: #{SERVER_SOURCES.join(", ")})"
22
- class_option :bin_path,
23
- type: :string,
24
- desc: "Where to download AnyCable-Go server binary (default: #{DEFAULT_BIN_PATH})"
25
- class_option :os,
26
- type: :string,
27
- desc: "Specify the OS for AnyCable-Go server binary (options: #{OS_NAMES.join(", ")})"
28
- class_option :cpu,
29
- type: :string,
30
- desc: "Specify the CPU architecturefor AnyCable-Go server binary (options: #{CPU_NAMES.join(", ")})"
31
21
  class_option :skip_heroku,
32
22
  type: :boolean,
33
23
  desc: "Do not copy Heroku configs"
@@ -35,6 +25,15 @@ module AnyCableRailsGenerators
35
25
  type: :boolean,
36
26
  desc: "Do not create Procfile.dev"
37
27
 
28
+ include WithOSHelpers
29
+
30
+ class_option :bin_path,
31
+ type: :string,
32
+ desc: "Where to download AnyCable-Go server binary (default: #{DEFAULT_BIN_PATH})"
33
+ class_option :version,
34
+ type: :string,
35
+ desc: "Specify the AnyCable-Go version (defaults to latest release)"
36
+
38
37
  def welcome
39
38
  say "👋 Welcome to AnyCable interactive installer."
40
39
  end
@@ -50,32 +49,36 @@ module AnyCableRailsGenerators
50
49
  environment(nil, env: :development) do
51
50
  <<~SNIPPET
52
51
  # Specify AnyCable WebSocket server URL to use by JS client
53
- config.action_cable.url = ENV.fetch("CABLE_URL", "ws://localhost:3334/cable").presence
52
+ config.after_initialize do
53
+ config.action_cable.url = ActionCable.server.config.url = ENV.fetch("CABLE_URL", "ws://localhost:8080/cable") if AnyCable::Rails.enabled?
54
+ end
54
55
  SNIPPET
55
56
  end
56
57
 
57
58
  environment(nil, env: :production) do
58
59
  <<~SNIPPET
59
60
  # Specify AnyCable WebSocket server URL to use by JS client
60
- config.action_cable.url = ENV["CABLE_URL"].presence
61
+ config.after_initialize do
62
+ config.action_cable.url = ActionCable.server.config.url = ENV.fetch("CABLE_URL") if AnyCable::Rails.enabled?
63
+ end
61
64
  SNIPPET
62
65
  end
63
66
 
64
67
  say_status :info, "✅ 'config.action_cable.url' has been configured"
65
- say_status :help, "⚠️ If you're using JS client make sure you have " \
68
+ say_status :help, "⚠️ If you're using JS client make sure you have " \
66
69
  "`action_cable_meta_tag` included before any <script> tag in your application.html"
67
70
  end
68
71
 
69
72
  def development_method
70
- answer = METHODS.index(options[:method]) || 99
73
+ answer = DEVELOPMENT_METHODS.index(options[:devenv]) || 99
71
74
 
72
- until METHODS[answer.to_i]
75
+ until DEVELOPMENT_METHODS[answer.to_i]
73
76
  answer = ask "Which environment do you use for development? (1) Local, (2) Docker, (0) Skip"
74
77
  end
75
78
 
76
- case env = METHODS[answer.to_i]
79
+ case env = DEVELOPMENT_METHODS[answer.to_i]
77
80
  when "skip"
78
- say_status :help, "⚠️ Please, read this guide on how to install AnyCable-Go server 👉 https://docs.anycable.io/#/anycable-go/getting_started", :yellow
81
+ say_status :help, "⚠️ Please, read this guide on how to install AnyCable-Go server 👉 #{DOCS_ROOT}/anycable-go/getting_started", :yellow
79
82
  else
80
83
  send "install_for_#{env}"
81
84
  end
@@ -83,15 +86,21 @@ module AnyCableRailsGenerators
83
86
 
84
87
  def heroku
85
88
  if options[:skip_heroku].nil?
86
- return unless yes? "Do you use Heroku for deployment?"
89
+ return unless yes? "Do you use Heroku for deployment? [Yn]"
87
90
  elsif options[:skip_heroku]
88
91
  return
89
92
  end
90
93
 
91
- template "Procfile"
92
- inside("bin") { template "heroku-web" }
94
+ in_root do
95
+ next unless File.file?("Procfile")
96
+
97
+ contents = File.read("Procfile")
98
+ contents.sub!(/^web: (.*)$/, %q(web: [[ "$ANYCABLE_DEPLOYMENT" == "true" ]] && bundle exec anycable --server-command="anycable-go" || \1))
99
+ File.write("Procfile", contents)
100
+ say_status :info, "✅ Procfile updated"
101
+ end
93
102
 
94
- say_status :help, "️️⚠️ Please, read the required steps to configure Heroku applications 👉 https://docs.anycable.io/#/deployment/heroku", :yellow
103
+ say_status :help, "️️⚠️ Please, read the required steps to configure Heroku applications 👉 #{DOCS_ROOT}/deployment/heroku", :yellow
95
104
  end
96
105
 
97
106
  def devise
@@ -106,6 +115,20 @@ module AnyCableRailsGenerators
106
115
  say_status :info, "✅ config/initializers/anycable.rb with Devise configuration has been added"
107
116
  end
108
117
 
118
+ def stimulus_reflex
119
+ return unless stimulus_reflex?
120
+
121
+ say_status :help, "⚠️ Please, check out the documentation on using AnyCable with Stimulus Reflex: https://docs.anycable.io/v1/#/ruby/stimulus_reflex"
122
+ end
123
+
124
+ def rubocop_compatibility
125
+ return unless rubocop?
126
+
127
+ say_status :info, "🤖 Running static compatibility checks with RuboCop"
128
+ res = run "bundle exec rubocop -r 'anycable/rails/compatibility/rubocop' --only AnyCable/InstanceVars,AnyCable/PeriodicalTimers,AnyCable/InstanceVars"
129
+ say_status :help, "⚠️ Please, take a look at the icompatibilities above and fix them. See https://docs.anycable.io/v1/#/ruby/compatibility" unless res
130
+ end
131
+
109
132
  def finish
110
133
  say_status :info, "✅ AnyCable has been configured successfully!"
111
134
  end
@@ -113,7 +136,15 @@ module AnyCableRailsGenerators
113
136
  private
114
137
 
115
138
  def stimulus_reflex?
116
- !gemfile_lock&.match?(/^\s+stimulus_reflex\b/).nil?
139
+ !!gemfile_lock&.match?(/^\s+stimulus_reflex\b/)
140
+ end
141
+
142
+ def redis?
143
+ !!gemfile_lock&.match?(/^\s+redis\b/)
144
+ end
145
+
146
+ def rubocop?
147
+ !!gemfile_lock&.match?(/^\s+rubocop\b/)
117
148
  end
118
149
 
119
150
  def gemfile_lock
@@ -128,32 +159,41 @@ module AnyCableRailsGenerators
128
159
  end
129
160
 
130
161
  def install_for_docker
131
- say_status :help, "️️⚠️ Docker development configuration could vary", :yellow
162
+ # Remove localhost from configuraiton
163
+ gsub_file "config/anycable.yml", /^.*redis_url:.*localhost[^\n]+\n/, ""
164
+
165
+ say_status :help, "️️⚠️ Docker development configuration could vary", :yellow
132
166
 
133
167
  say "Here is an example snippet for docker-compose.yml:"
134
168
  say <<~YML
135
169
  ─────────────────────────────────────────
136
- anycable-ws:
137
- image: anycable/anycable-go:v0.6.4
170
+ ws:
171
+ image: anycable/anycable-go:1.0
138
172
  ports:
139
- - '3334:3334'
173
+ - '8080:8080'
140
174
  environment:
141
- PORT: 3334
175
+ ANYCABLE_HOST: "0.0.0.0"
142
176
  ANYCABLE_REDIS_URL: redis://redis:6379/0
143
- ANYCABLE_RPC_HOST: anycable-rpc:50051
177
+ ANYCABLE_RPC_HOST: anycable:50051
178
+ ANYCABLE_DEBUG: 1
144
179
  depends_on:
145
- - anycable-rpc
146
- - redis
180
+ redis:
181
+ condition: service_healthy
147
182
 
148
- anycable-rpc:
183
+ anycable:
149
184
  <<: *backend
150
185
  command: bundle exec anycable
151
186
  environment:
152
187
  <<: *backend_environment
153
188
  ANYCABLE_REDIS_URL: redis://redis:6379/0
154
189
  ANYCABLE_RPC_HOST: 0.0.0.0:50051
190
+ ANYCABLE_DEBUG: 1
155
191
  ports:
156
192
  - '50051'
193
+ depends_on:
194
+ <<: *backend_depends_on
195
+ ws:
196
+ condition: service_started
157
197
  ─────────────────────────────────────────
158
198
  YML
159
199
  end
@@ -172,7 +212,7 @@ module AnyCableRailsGenerators
172
212
 
173
213
  case answer.to_i
174
214
  when 0
175
- say_status :help, "⚠️ Please, read this guide on how to install AnyCable-Go server 👉 https://docs.anycable.io/#/anycable-go/getting_started", :yellow
215
+ say_status :help, "⚠️ Please, read this guide on how to install AnyCable-Go server 👉 #{DOCS_ROOT}/anycable-go/getting_started", :yellow
176
216
  return
177
217
  else
178
218
  return unless send("install_from_#{SERVER_SOURCES[answer.to_i]}")
@@ -205,63 +245,22 @@ module AnyCableRailsGenerators
205
245
  end
206
246
 
207
247
  def install_from_binary
208
- out = options[:bin_path] if options[:bin_path]
209
- out ||= "/usr/local/bin" if options[:method] # User don't want interactive mode
210
- out ||= ask "Please, enter the path to download the AnyCable-Go binary to", default: DEFAULT_BIN_PATH, path: true
211
-
212
- os_name = options[:os] ||
213
- OS_NAMES.find(&Gem::Platform.local.os.method(:==)) ||
214
- ask("What is your OS name?", limited_to: OS_NAMES)
248
+ bin_path ||= DEFAULT_BIN_PATH if options[:devenv] # User don't want interactive mode
249
+ bin_path ||= ask "Please, enter the path to download the AnyCable-Go binary to", default: DEFAULT_BIN_PATH, path: true
215
250
 
216
- cpu_name = options[:cpu] ||
217
- CPU_NAMES.find(&current_cpu.method(:==)) ||
218
- ask("What is your CPU architecture?", limited_to: CPU_NAMES)
219
-
220
- download_exe(
221
- "https://github.com/anycable/anycable-go/releases/download/#{SERVER_VERSION}/" \
222
- "anycable-go-#{SERVER_VERSION}-#{os_name}-#{cpu_name}",
223
- to: out,
224
- file_name: "anycable-go"
225
- )
251
+ generate "anycable:download", download_options(bin_path: bin_path)
226
252
 
227
253
  true
228
254
  end
229
255
 
230
- def download_exe(url, to:, file_name:)
231
- file_path = File.join(to, file_name)
232
-
233
- run "#{sudo(to)}curl -L #{url} -o #{file_path}", abort_on_failure: true
234
- run "#{sudo(to)}chmod +x #{file_path}", abort_on_failure: true
235
- run "#{file_path} -v", abort_on_failure: true
236
- end
237
-
238
- def sudo!(path)
239
- sudo = ""
240
- unless File.writable?(path)
241
- if yes? "Path is not writable 😕. Do you have sudo privileges?"
242
- sudo = "sudo "
243
- else
244
- say_status :error, "❌ Failed to install AnyCable-Go WebSocket server", :red
245
- raise StandardError, "Path #{path} is not writable!"
246
- end
247
- end
248
-
249
- sudo
250
- end
251
-
252
- def current_cpu
253
- case Gem::Platform.local.cpu
254
- when "x86_64", "x64"
255
- "amd64"
256
- when "x86_32", "x86", "i386", "i486", "i686"
257
- "i386"
258
- when "aarch64", "aarch64_be", /armv8/
259
- "arm64"
260
- when "arm", /armv7/, /armv6/
261
- "arm"
262
- else
263
- "unknown"
264
- end
256
+ def download_options(**params)
257
+ opts = options.merge(params)
258
+ [].tap do |args|
259
+ args << "--os #{opts[:os]}" if opts[:os]
260
+ args << "--cpu #{opts[:cpu]}" if opts[:cpu]
261
+ args << "--bin-path=#{opts[:bin_path]}" if opts[:bin_path]
262
+ args << "--version #{opts[:version]}" if opts[:version]
263
+ end.join(" ")
265
264
  end
266
265
  end
267
266
  end
@@ -7,19 +7,26 @@
7
7
  # Note that AnyCable recognizes REDIS_URL env variable for Redis pub/sub adapter. If you want to
8
8
  # use another Redis instance for AnyCable, provide ANYCABLE_REDIS_URL variable.
9
9
  #
10
- # Read more about AnyCable configuration here: https://docs.anycable.io/#/ruby/configuration
10
+ # Read more about AnyCable configuration here: <%= DOCS_ROOT %>/ruby/configuration
11
11
  #
12
12
  default: &default
13
13
  # Turn on/off access logs ("Started..." and "Finished...")
14
14
  access_logs_disabled: false
15
- # Persist "dirty" session between RPC calls (might be required for StimulusReflex apps)
16
- persistent_session_enabled: <%= stimulus_reflex? %>
15
+ # Persist "dirty" session between RPC calls (might be required for apps using stimulus_reflex <3.0)
16
+ # persistent_session_enabled: true
17
17
  # This is the host and the port to run AnyCable RPC server on.
18
18
  # You must configure your WebSocket server to connect to it, e.g.:
19
19
  # $ anycable-go --rpc-host="<rpc hostname>:50051"
20
20
  rpc_host: "127.0.0.1:50051"
21
21
  # Whether to enable gRPC level logging or not
22
22
  log_grpc: false
23
+ <%- if redis? -%>
24
+ # Use Redis to broadcast messages to AnyCable server
25
+ broadcast_adapter: redis
26
+ <%- else -%>
27
+ # Use HTTP adapter for a quick start (since redis gem is not present in the project)
28
+ broadcast_adapter: http
29
+ <%- end -%>
23
30
  # Use the same channel name for WebSocket server, e.g.:
24
31
  # $ anycable-go --redis-channel="__anycable__"
25
32
  redis_channel: "__anycable__"
@@ -30,3 +37,7 @@ development:
30
37
 
31
38
  production:
32
39
  <<: *default
40
+ <%- if !redis? -%>
41
+ # Use Redis in production
42
+ broadcast_adapter: redis
43
+ <%- end -%>
@@ -0,0 +1,11 @@
1
+ # Make it possible to switch adapters by passing the ACTION_CABLE_ADAPTER env variable.
2
+ # For example, you can use it fallback to the standard Action Cable in staging/review
3
+ # environments (by setting `ACTION_CABLE_ADAPTER=redis`).
4
+ development:
5
+ adapter: <%%= ENV.fetch("ACTION_CABLE_ADAPTER", "any_cable") %>
6
+
7
+ test:
8
+ adapter: test
9
+
10
+ production:
11
+ adapter: <%%= ENV.fetch("ACTION_CABLE_ADAPTER", "any_cable") %>
@@ -3,7 +3,7 @@
3
3
  # Add Warden middkeware to AnyCable stack to allow accessing
4
4
  # Devise current user via `env["warden"].user`.
5
5
  #
6
- # See http://docs.anycable.io/#/ruby/authentication
6
+ # See <%= DOCS_ROOT %>/ruby/authentication
7
7
  AnyCable::Rails::Rack.middleware.use Warden::Manager do |config|
8
8
  Devise.warden_config = config
9
9
  end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AnyCableRailsGenerators
4
+ module WithOSHelpers
5
+ OS_NAMES = %w[linux darwin freebsd win].freeze
6
+ CPU_NAMES = %w[amd64 arm64 386 arm].freeze
7
+ DEFAULT_BIN_PATH = "/usr/local/bin"
8
+
9
+ def self.included(base)
10
+ base.class_option :os,
11
+ type: :string,
12
+ desc: "Specify the OS for AnyCable-Go server binary (options: #{OS_NAMES.join(", ")})"
13
+ base.class_option :cpu,
14
+ type: :string,
15
+ desc: "Specify the CPU architecturefor AnyCable-Go server binary (options: #{CPU_NAMES.join(", ")})"
16
+
17
+ private :current_cpu, :supported_current_cpu, :supported_current_os
18
+ end
19
+
20
+ def current_cpu
21
+ case Gem::Platform.local.cpu
22
+ when "x86_64", "x64"
23
+ "amd64"
24
+ when "x86_32", "x86", "i386", "i486", "i686"
25
+ "i386"
26
+ when "aarch64", "aarch64_be", /armv8/
27
+ "arm64"
28
+ when "arm", /armv7/, /armv6/
29
+ "arm"
30
+ else
31
+ "unknown"
32
+ end
33
+ end
34
+
35
+ def os_name
36
+ options[:os] ||
37
+ supported_current_os ||
38
+ ask("What is your OS name?", limited_to: OS_NAMES)
39
+ end
40
+
41
+ def cpu_name
42
+ options[:cpu] ||
43
+ supported_current_cpu ||
44
+ ask("What is your CPU architecture?", limited_to: CPU_NAMES)
45
+ end
46
+
47
+ def supported_current_cpu
48
+ CPU_NAMES.find(&current_cpu.method(:==))
49
+ end
50
+
51
+ def supported_current_os
52
+ OS_NAMES.find(&Gem::Platform.local.os.method(:==))
53
+ end
54
+ end
55
+ end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anycable-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.preview1
4
+ version: 1.0.0.rc4
5
5
  platform: ruby
6
6
  authors:
7
7
  - palkan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-20 00:00:00.000000000 Z
11
+ date: 2020-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: anycable
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.0.preview1
19
+ version: 1.0.0.rc2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 1.0.0.preview1
26
+ version: 1.0.0.rc2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rails
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -72,70 +72,42 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '10.0'
75
+ version: '13.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '10.0'
82
+ version: '13.0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rspec
84
+ name: rspec-rails
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '3.4'
89
+ version: 4.0.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: '3.4'
97
- - !ruby/object:Gem::Dependency
98
- name: rubocop-md
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '0.3'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '0.3'
96
+ version: 4.0.0
111
97
  - !ruby/object:Gem::Dependency
112
- name: simplecov
98
+ name: rubocop
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
101
  - - ">="
116
102
  - !ruby/object:Gem::Version
117
- version: 0.3.8
103
+ version: '0.80'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
108
  - - ">="
123
109
  - !ruby/object:Gem::Version
124
- version: 0.3.8
125
- - !ruby/object:Gem::Dependency
126
- name: standard
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: 0.1.7
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: 0.1.7
110
+ version: '0.80'
139
111
  - !ruby/object:Gem::Dependency
140
112
  name: warden
141
113
  requirement: !ruby/object:Gem::Requirement
@@ -167,12 +139,15 @@ files:
167
139
  - lib/anycable/rails/actioncable/channel.rb
168
140
  - lib/anycable/rails/actioncable/connection.rb
169
141
  - lib/anycable/rails/actioncable/connection/persistent_session.rb
142
+ - lib/anycable/rails/actioncable/connection/serializable_identification.rb
143
+ - lib/anycable/rails/actioncable/remote_connections.rb
144
+ - lib/anycable/rails/actioncable/testing.rb
145
+ - lib/anycable/rails/channel_state.rb
170
146
  - lib/anycable/rails/compatibility.rb
171
147
  - lib/anycable/rails/compatibility/rubocop.rb
172
148
  - lib/anycable/rails/compatibility/rubocop/config/default.yml
173
149
  - lib/anycable/rails/compatibility/rubocop/cops/anycable/instance_vars.rb
174
150
  - lib/anycable/rails/compatibility/rubocop/cops/anycable/periodical_timers.rb
175
- - lib/anycable/rails/compatibility/rubocop/cops/anycable/remote_disconnect.rb
176
151
  - lib/anycable/rails/compatibility/rubocop/cops/anycable/stream_from.rb
177
152
  - lib/anycable/rails/config.rb
178
153
  - lib/anycable/rails/middlewares/executor.rb
@@ -182,13 +157,15 @@ files:
182
157
  - lib/anycable/rails/refinements/subscriptions.rb
183
158
  - lib/anycable/rails/session_proxy.rb
184
159
  - lib/anycable/rails/version.rb
185
- - lib/rails/generators/anycable/setup/setup_generator.rb
186
- - lib/rails/generators/anycable/setup/templates/Procfile
187
- - lib/rails/generators/anycable/setup/templates/Procfile.dev
188
- - lib/rails/generators/anycable/setup/templates/bin/heroku-web
189
- - lib/rails/generators/anycable/setup/templates/config/anycable.yml.tt
190
- - lib/rails/generators/anycable/setup/templates/config/cable.yml.tt
191
- - lib/rails/generators/anycable/setup/templates/config/initializers/anycable.rb
160
+ - lib/generators/anycable/download/USAGE
161
+ - lib/generators/anycable/download/download_generator.rb
162
+ - lib/generators/anycable/setup/USAGE
163
+ - lib/generators/anycable/setup/setup_generator.rb
164
+ - lib/generators/anycable/setup/templates/Procfile.dev
165
+ - lib/generators/anycable/setup/templates/config/anycable.yml.tt
166
+ - lib/generators/anycable/setup/templates/config/cable.yml.tt
167
+ - lib/generators/anycable/setup/templates/config/initializers/anycable.rb.tt
168
+ - lib/generators/anycable/with_os_helpers.rb
192
169
  homepage: http://github.com/anycable/anycable-rails
193
170
  licenses:
194
171
  - MIT