anycable-rails 1.0.0.preview1 → 1.0.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
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