appium_lib_core 5.0.0.rc1 → 5.0.0.rc5

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: fc513ad9f9ba5689303763b09a884af18e1a9eb80e78a6e05cf838551905f732
4
- data.tar.gz: 59241d4d8626cf39eeb63a51291f18deca6759bdba95a8e2bb942173e0b5df9e
3
+ metadata.gz: 19a2c4c9f752e5f2e4287ce8b0d53bc428bafaa997b58c40bc0b796b878eadeb
4
+ data.tar.gz: 451e46bc56fa768879ab680520dff4ec137455ca020e1176f3022160d1a46009
5
5
  SHA512:
6
- metadata.gz: 867c6a7bfbdf95243fae3a6292f0349bf9bda1fbb83b44cb7d2e12e8f5e0ecb2f41fb6103aeebdcaaded1024cbb16cd2d758d73bef9bf00697325d75b5c2d027
7
- data.tar.gz: 345771f473fca33668d101f00be374ebb3b345b6795c5392b9955da73bb45588e5589b70ba8c983ce161e35c311b2f18adfd7bac3a8d816ba93863820b05b4f6
6
+ metadata.gz: e9e155e17e026514e12657489569b17b389d62cb9d7cd79e8a753e12b37571d4a9d3a3f28227b935b2d3d101747a7ce66d28ff7eb08f6c9cfb7c1c94ca7f3f03
7
+ data.tar.gz: 13e2620a48fe753b5647a0ffcb6bf370f54796aa3b87ca34522659c219474804dfa7843394307ad84b36dc377a10d2bd5bec782467354abb252e945c27cdd748
@@ -11,7 +11,7 @@ jobs:
11
11
  strategy:
12
12
  fail-fast: false
13
13
  matrix:
14
- ruby: [2.5, 2.6, 2.7, 3.0]
14
+ ruby: [2.6, 2.7, 3.0]
15
15
 
16
16
  runs-on: ubuntu-latest
17
17
 
@@ -37,8 +37,7 @@ jobs:
37
37
  strategy:
38
38
  fail-fast: false
39
39
  matrix:
40
- # Does not add 2.7 on Windows so far since a command fails only on Windows
41
- ruby: [2.5, 2.6]
40
+ ruby: [2.6, 2.7, 3.0]
42
41
 
43
42
  runs-on: windows-latest
44
43
 
data/CHANGELOG.md CHANGED
@@ -5,19 +5,32 @@ Read `release_notes.md` for commit level details.
5
5
  ## [Unreleased]
6
6
 
7
7
  ### Enhancements
8
- - Allow to override an existing method by `Appium::Core::Base::Driver#add_command` since Appium drivers/plugins allow to override them
9
8
 
10
9
  ### Bug fixes
11
10
 
12
11
  ### Deprecations
13
12
 
14
- ## [5.0.0.beta]
13
+ ## [5.0.0]
14
+
15
+ ### Enhancements
15
16
 
16
- - Update base selenium webdriver version to `4.0.0.beta2`
17
- - Support only W3C spec
18
- - Support Ruby 2.5+
17
+ - Update base selenium webdriver version to `4.0.0`
18
+ - Support only W3C spec as following Selenium v4 client
19
+ - Support Ruby 2.6+
20
+ - `element.id` returns the element id instead of `element.ref`. `element.ref` now returns an array.
21
+ - Removed `desired_capabilities` as capabilities for `Appium::Core#for`. Please use `capabilities` key name instead
22
+ - Removals that already had _duplication_ mark
23
+ - Removed `driver#screenshot`. Please use `driver#save_screenshot` instead
24
+ - Removed `driver#send_keys` to send keys to an active element. Please use `driver.action.send_keys('happy testing').perform` instead
25
+ - Removed `forceMjsonwp` to send only MJSONWP capabilities since Selenium cleint v4 no longer supports MJSONWP
26
+ - No longer set default `timeouts` as `0`. ruby_lib_core calls `/timeouts` endpoint only when `appium_lib: { wait: 5 }` is provided explicitly
19
27
  - Raises `::Appium::Core::Error::ArgumentError` instead of `ArgumentError` for this library specific argument errors
20
28
 
29
+ ## [4.7.1] - 2021-09-26
30
+
31
+ ### Enhancements
32
+ - Allow to override an existing method by `Appium::Core::Base::Driver#add_command` since Appium drivers/plugins allow to override them
33
+
21
34
  ## [4.7.0] - 2021-07-17
22
35
 
23
36
  ### Enhancements
data/README.md CHANGED
@@ -79,7 +79,7 @@ $ PARALLEL=1 bundle exec parallel_test test/functional/ios -n 2
79
79
 
80
80
  - Runs on CI environment (on Azure)
81
81
  - Non `IGNORE_VERSION_SKIP` or `IGNORE_VERSION_SKIP=true` runs all tests ignoring `skip` them by Appium versions
82
- - `IGNORE_VERSION_SKIP=false` skips the following tests if the Appium version is lower than the requirement
82
+ - `IGNORE_VERSION_SKIP=false` skips the following tests if the Appium version is lower than the requirement
83
83
 
84
84
  ```
85
85
  $ IGNORE_VERSION_SKIP=true CI=true bundle exec rake test:func:android
@@ -93,9 +93,9 @@ $ IGNORE_VERSION_SKIP=true CI=true bundle exec rake test:func:android
93
93
  ```ruby
94
94
  require 'rubygems'
95
95
  require 'appium_lib_core'
96
-
96
+
97
97
  opts = {
98
- desired_capabilities: { # or { caps: {....} }
98
+ capabilities: { # or { caps: {....} }
99
99
  platformName: :ios,
100
100
  platformVersion: '11.0',
101
101
  deviceName: 'iPhone Simulator',
@@ -108,7 +108,7 @@ $ IGNORE_VERSION_SKIP=true CI=true bundle exec rake test:func:android
108
108
  }
109
109
  @core = Appium::Core.for(opts) # create a core driver with `opts`
110
110
  @driver = @core.start_driver
111
-
111
+
112
112
  # Launch iPhone Simulator and `MyiOS.app`
113
113
  @driver.find_element(:accessibility_id, 'some accessibility') # find an element
114
114
  ```
@@ -116,7 +116,7 @@ $ IGNORE_VERSION_SKIP=true CI=true bundle exec rake test:func:android
116
116
  ```bash
117
117
  # shell 1
118
118
  $ appium --log-level warn:error # show only warning and error logs
119
-
119
+
120
120
  # shell 2
121
121
  $ ruby test.rb
122
122
  ```
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'appium_lib_core/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.required_ruby_version = '>= 2.5'
7
+ spec.required_ruby_version = '>= 2.6'
8
8
 
9
9
  spec.name = 'appium_lib_core'
10
10
  spec.version = Appium::Core::VERSION
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ['lib']
24
24
 
25
- spec.add_runtime_dependency 'selenium-webdriver', '4.0.0.rc1'
25
+ spec.add_runtime_dependency 'selenium-webdriver', '~> 4.0.0'
26
26
  spec.add_runtime_dependency 'faye-websocket', '~> 0.11.0'
27
27
 
28
28
  spec.add_development_dependency 'bundler', '>= 1.14'
@@ -28,8 +28,7 @@ To handle it, we would recommend you to handle the error based on the error mess
28
28
 
29
29
  ```ruby
30
30
  error = assert_raises ::Selenium::WebDriver::Error::UnknownError do
31
- _, element_id = el.ref
32
- @driver.execute_script 'mobile: scrollToPage', { element: element_id, scrollToPage: -100 }
31
+ @driver.execute_script 'mobile: scrollToPage', { element: el.id, scrollToPage: -100 }
33
32
  end
34
33
  assert error.message.include? 'be a non-negative integer'
35
34
  ```
@@ -53,7 +53,7 @@ module Appium
53
53
  # Override
54
54
  # Creates session handling both OSS and W3C dialects.
55
55
  #
56
- # @param [::Selenium::WebDriver::Remote::Capabilities, Hash] desired_capabilities A capability
56
+ # @param [::Selenium::WebDriver::Remote::Capabilities, Hash] capabilities A capability
57
57
  # @return [::Selenium::WebDriver::Remote::Capabilities]
58
58
  #
59
59
  # @example
@@ -78,7 +78,7 @@ module Appium
78
78
  @available_commands = ::Appium::Core::Commands::COMMANDS.dup
79
79
 
80
80
  caps = add_appium_prefix(capabilities)
81
- response = execute(:new_session, {}, { capabilities: { firstMatch: [caps] } })
81
+ response = execute(:new_session, {}, { capabilities: { alwaysMatch: caps, firstMatch: [] } })
82
82
 
83
83
  @session_id = response['sessionId']
84
84
  raise ::Selenium::WebDriver::Error::WebDriverError, 'no sessionId in returned payload' unless @session_id
@@ -207,8 +207,7 @@ module Appium
207
207
  # For W3C
208
208
  # https://github.com/SeleniumHQ/selenium/commit/b618499adcc3a9f667590652c5757c0caa703289
209
209
  # execute_atom :isDisplayed, element
210
- _, element_id = element.ref
211
- execute :is_element_displayed, id: element_id
210
+ execute :is_element_displayed, id: element.id
212
211
  end
213
212
 
214
213
  # For Appium
@@ -216,8 +215,7 @@ module Appium
216
215
  def element_attribute(element, name)
217
216
  # For W3C in Selenium Client
218
217
  # execute_atom :getAttribute, element, name
219
- _, element_id = element.ref
220
- execute :get_element_attribute, id: element_id, name: name
218
+ execute :get_element_attribute, id: element.id, name: name
221
219
  end
222
220
 
223
221
  # For Appium
@@ -22,6 +22,13 @@ module Appium
22
22
  # @return [::Selenium::WebDriver::Remote::Capabilities] Return instance of Appium::Core::Base::Capabilities
23
23
  # inherited ::Selenium::WebDriver::Remote::Capabilities
24
24
  def self.create_capabilities(opts_caps = {})
25
+ # TODO: Move to 'Options' way instead of 'Capabilities'.
26
+ # Selenium 5 will have Options instead of 'Capabilities'.
27
+ # https://github.com/SeleniumHQ/selenium/blob/trunk/rb/lib/selenium/webdriver/common/options.rb
28
+ # Then, Ruby client also shoud move to the Options way.
29
+ # Appium's capabilities could change by depending on Appium versions. So it does not have
30
+ # standard options like chrome and firefox etc. So, the implementation should differ from
31
+ # other browsers. But here should inherit `Options` to follow Selenium.
25
32
  ::Selenium::WebDriver::Remote::Capabilities.new(opts_caps)
26
33
  end
27
34
  end
@@ -57,23 +57,7 @@ module Appium
57
57
  # @return [::Appium::Core::Base::Bridge]
58
58
  #
59
59
  def create_bridge(**opts)
60
- caps = opts.delete(:capabilities)
61
- # NOTE: This is deprecated
62
- cap_array = caps.is_a?(Hash) ? [caps] : Array(caps)
63
-
64
- desired_capabilities = opts.delete(:desired_capabilities)
65
- if desired_capabilities
66
- if desired_capabilities.is_a?(Hash)
67
- desired_capabilities = ::Selenium::WebDriver::Remote::Capabilities(desired_capabilities)
68
- end
69
- cap_array << desired_capabilities
70
- end
71
-
72
- options = opts.delete(:options)
73
- cap_array << options if options
74
-
75
- capabilities = generate_capabilities(cap_array)
76
-
60
+ capabilities = opts.delete(:capabilities)
77
61
  bridge_opts = { http_client: opts.delete(:http_client), url: opts.delete(:url) }
78
62
  raise ::Appium::Core::Error::ArgumentError, "Unable to create a driver with parameters: #{opts}" unless opts.empty?
79
63
 
@@ -175,8 +159,7 @@ module Appium
175
159
  # # ':session_id' in the given url is replaced with current 'session id'.
176
160
  # # ':id' in the given url is replaced with the given 'element_id'.
177
161
  # e = @driver.find_element :accessibility_id, 'an element'
178
- # _, element_id = e.ref
179
- # @driver.test_action_command(element_id, 'action')
162
+ # @driver.test_action_command(e.id, 'action')
180
163
  #
181
164
  def add_command(method:, url:, name:, &block)
182
165
  unless AVAILABLE_METHODS.include? method
@@ -255,22 +238,6 @@ module Appium
255
238
  end
256
239
  alias is_keyboard_shown keyboard_shown?
257
240
 
258
- # [DEPRECATION]
259
- # Send keys for a current active element
260
- # @param [String] key Input text
261
- #
262
- # @example
263
- #
264
- # @driver.send_keys 'happy testing!'
265
- #
266
- def send_keys(*key)
267
- ::Appium::Logger.warn(
268
- '[DEPRECATION] Driver#send_keys is deprecated in W3C spec. Use driver.action.<command>.perform instead'
269
- )
270
- @bridge.send_keys_to_active_element(key)
271
- end
272
- alias type send_keys
273
-
274
241
  # Returns an instance of DriverSettings to call get/update.
275
242
  #
276
243
  # @example
@@ -82,12 +82,11 @@ module Appium
82
82
  # @@driver.element_screenshot_as element, :base64 #=> "iVBORw0KGgoAAAANSUhEUgAABDgAAAB+CAIAAABOPDa6AAAAAX"
83
83
  #
84
84
  def element_screenshot_as(element, format)
85
- _, element_id = element.ref
86
85
  case format
87
86
  when :base64
88
- bridge.element_screenshot element_id
87
+ bridge.element_screenshot element.id
89
88
  when :png
90
- bridge.element_screenshot(element_id).unpack('m')[0]
89
+ bridge.element_screenshot(element.id).unpack('m')[0]
91
90
  else
92
91
  raise Core::Error::UnsupportedOperationError, "unsupported format: #{format.inspect}"
93
92
  end
@@ -195,10 +195,7 @@ module Appium
195
195
  end
196
196
 
197
197
  def args_with_ele_ref(args)
198
- if args.key? :element
199
- _, element_id = args[:element].ref
200
- args[:element] = element_id
201
- end
198
+ args[:element] = args[:element].id if args.key? :element
202
199
  args
203
200
  end
204
201
  end # class TouchAction
@@ -40,7 +40,7 @@ module Appium
40
40
 
41
41
  def initialize(appium_lib_opts)
42
42
  @custom_url = appium_lib_opts.fetch :server_url, nil
43
- @default_wait = appium_lib_opts.fetch :wait, Driver::DEFAULT_IMPLICIT_WAIT
43
+ @default_wait = appium_lib_opts.fetch :wait, nil
44
44
  @enable_idempotency_header = appium_lib_opts.fetch :enable_idempotency_header, true
45
45
 
46
46
  # bump current session id into a particular file
@@ -135,11 +135,9 @@ module Appium
135
135
  attr_reader :export_session_path
136
136
 
137
137
  # Default wait time for elements to appear in Appium server side.
138
- # Defaults to {::Appium::Core::Driver::DEFAULT_IMPLICIT_WAIT}.<br>
139
138
  # Provide <code>{ appium_lib: { wait: 30 } }</code> to {::Appium::Core.for}
140
139
  # @return [Integer]
141
140
  attr_reader :default_wait
142
- DEFAULT_IMPLICIT_WAIT = 0
143
141
 
144
142
  # Appium's server port. 4723 is by default. Defaults to {::Appium::Core::Driver::DEFAULT_APPIUM_PORT}.<br>
145
143
  # Provide <code>{ appium_lib: { port: 8080 } }</code> to {::Appium::Core.for}.
@@ -187,8 +185,6 @@ module Appium
187
185
  # @option opts [Hash] :caps Appium capabilities.
188
186
  # @option opts [Hash] :capabilities The same as :caps.
189
187
  # This param is for compatibility with Selenium WebDriver format
190
- # @option opts [Hash] :desired_capabilities The same as :caps.
191
- # This param is for compatibility with Selenium WebDriver format
192
188
  # @option opts [Appium::Core::Options] :appium_lib Capabilities affect only ruby client
193
189
  # @option opts [String] :url The same as :custom_url in :appium_lib.
194
190
  # This param is for compatibility with Selenium WebDriver format
@@ -199,10 +195,8 @@ module Appium
199
195
  #
200
196
  # # format 1
201
197
  # @core = Appium::Core.for caps: {...}, appium_lib: {...}
202
- # # format 2. 'capabilities:' or 'desired_capabilities:' is also available instead of 'caps:'.
198
+ # # format 2. 'capabilities:' is also available instead of 'caps:'.
203
199
  # @core = Appium::Core.for url: "http://127.0.0.1:8080/wd/hub", capabilities: {...}, appium_lib: {...}
204
- # # format 3. 'appium_lib: {...}' can be blank
205
- # @core = Appium::Core.for url: "http://127.0.0.1:8080/wd/hub", desired_capabilities: {...}
206
200
  #
207
201
  #
208
202
  # require 'rubygems'
@@ -230,7 +224,7 @@ module Appium
230
224
  # @core.start_driver # Connect to 'http://127.0.0.1:8080/wd/hub' because of 'port: 8080'
231
225
  #
232
226
  # # Start iOS driver with .zip file over HTTP
233
- # # 'desired_capabilities:' or 'capabilities:' is also available instead of 'caps:'. Either is fine.
227
+ # # 'capabilities:' is also available instead of 'caps:'. Either is fine.
234
228
  # opts = {
235
229
  # capabilities: {
236
230
  # platformName: :ios,
@@ -254,7 +248,7 @@ module Appium
254
248
  # # Start iOS driver as another format. 'url' is available like below
255
249
  # opts = {
256
250
  # url: "http://custom-host:8080/wd/hub.com",
257
- # desired_capabilities: {
251
+ # capabilities: {
258
252
  # platformName: :ios,
259
253
  # platformVersion: '11.0',
260
254
  # deviceName: 'iPhone Simulator',
@@ -368,8 +362,8 @@ module Appium
368
362
 
369
363
  begin
370
364
  @driver = ::Appium::Core::Base::Driver.new(listener: @listener,
371
- http_client: @http_client,
372
- desired_capabilities: @caps,
365
+ http_client: @http_client,
366
+ capabilities: @caps, # ::Selenium::WebDriver::Remote::Capabilities
373
367
  url: @custom_url)
374
368
 
375
369
  if @direct_connect
@@ -411,6 +405,8 @@ module Appium
411
405
 
412
406
  # Ignore setting default wait if the target driver has no implementation
413
407
  def set_implicit_wait_by_default(wait)
408
+ return if @default_wait.nil?
409
+
414
410
  @driver.manage.timeouts.implicit_wait = wait
415
411
  rescue ::Selenium::WebDriver::Error::UnknownError => e
416
412
  unless e.message.include?('The operation requested is not yet implemented')
@@ -480,21 +476,6 @@ module Appium
480
476
  p_version.split('.').map(&:to_i)
481
477
  end
482
478
 
483
- # Takes a png screenshot and saves to the target path.
484
- #
485
- # @param png_save_path [String] the full path to save the png
486
- # @return [File]
487
- #
488
- # @example
489
- #
490
- # @core.screenshot '/tmp/hi.png' #=> nil
491
- # # same as '@driver.save_screenshot png_save_path'
492
- #
493
- def screenshot(png_save_path)
494
- ::Appium::Logger.warn '[DEPRECATION] screenshot will be removed. Please use driver.save_screenshot instead.'
495
- @driver.save_screenshot png_save_path
496
- end
497
-
498
479
  private
499
480
 
500
481
  # @private
@@ -567,10 +548,7 @@ module Appium
567
548
  def validate_keys(opts)
568
549
  flatten_ops = flatten_hash_keys(opts)
569
550
 
570
- # FIXME: Remove 'desired_capabilities' in the next major Selenium update
571
- unless opts.member?(:caps) || opts.member?(:capabilities) || opts.member?(:desired_capabilities)
572
- raise Error::NoCapabilityError
573
- end
551
+ raise Error::NoCapabilityError unless opts.member?(:caps) || opts.member?(:capabilities)
574
552
 
575
553
  if !opts.member?(:appium_lib) && flatten_ops.member?(:appium_lib)
576
554
  raise Error::CapabilityStructureError, 'Please check the value of appium_lib in the capability'
@@ -591,8 +569,7 @@ module Appium
591
569
 
592
570
  # @private
593
571
  def get_caps(opts)
594
- # FIXME: Remove 'desired_capabilities' in the next major Selenium update
595
- Core::Base::Capabilities.create_capabilities(opts[:caps] || opts[:capabilities] || opts[:desired_capabilities] || {})
572
+ Core::Base::Capabilities.create_capabilities(opts[:caps] || opts[:capabilities] || {})
596
573
  end
597
574
 
598
575
  # @private
@@ -20,6 +20,15 @@ module Appium
20
20
  include ::Appium::Core::Base::SearchContext
21
21
  include ::Appium::Core::Base::TakesScreenshot
22
22
 
23
+ # Retuns the element id.
24
+ #
25
+ # @return [String]
26
+ # @example
27
+ # e = @driver.find_element :accessibility_id, 'something'
28
+ # e.id
29
+ #
30
+ attr_reader :id
31
+
23
32
  # Returns the value of attributes like below. Read each platform to know more details.
24
33
  #
25
34
  # uiautomator2: https://github.com/appium/appium-uiautomator2-server/blob/203cc7e57ce477f3cff5d95b135d1b3450a6033a/app/src/main/java/io/appium/uiautomator2/utils/Attribute.java#L19
@@ -14,7 +14,7 @@
14
14
 
15
15
  module Appium
16
16
  module Core
17
- VERSION = '5.0.0.rc1' unless defined? ::Appium::Core::VERSION
18
- DATE = '2021-09-09' unless defined? ::Appium::Core::DATE
17
+ VERSION = '5.0.0.rc5' unless defined? ::Appium::Core::VERSION
18
+ DATE = '2021-10-15' unless defined? ::Appium::Core::DATE
19
19
  end
20
20
  end
data/release_notes.md CHANGED
@@ -1,3 +1,13 @@
1
+ #### v4.7.1 2021-09-26
2
+
3
+ - [cdd8906](https://github.com/appium/ruby_lib_core/commit/cdd890662585aa5051912d20d90ec3c3866ad8b1) Release 4.7.1
4
+ - [059b092](https://github.com/appium/ruby_lib_core/commit/059b0920becd60d691b0b4fac05cc0d96bcc59c7) ci: tweak brew install
5
+ - [fb32697](https://github.com/appium/ruby_lib_core/commit/fb32697d5ee7cf4ea4367aa9f9bf4458723d6fce) feat: allow to override an existing method by add_command (#330)
6
+ - [cbf7f1f](https://github.com/appium/ruby_lib_core/commit/cbf7f1fc2ce6bb8833e2a7324446d79cbc848834) chore(deps-dev): update webmock requirement from ~> 3.13.0 to ~> 3.14.0 (#329)
7
+ - [beefb17](https://github.com/appium/ruby_lib_core/commit/beefb179ac25e9337bf2badaf4eb0c4cfc5b1e45) chore(deps-dev): update rubocop requirement from = 1.12.0 to = 1.12.1 (#322)
8
+ - [3438b48](https://github.com/appium/ruby_lib_core/commit/3438b481523ec978d06bc243cd42eee8dc00356f) docs: tweak docstring
9
+
10
+
1
11
  #### v4.7.0 2021-07-17
2
12
 
3
13
  - [0059974](https://github.com/appium/ruby_lib_core/commit/0059974b0b1d79a822db84d8b0169e8393e00ef9) Release 4.7.0
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appium_lib_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.0.rc1
4
+ version: 5.0.0.rc5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kazuaki MATSUO
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-09 00:00:00.000000000 Z
11
+ date: 2021-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: selenium-webdriver
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 4.0.0.rc1
19
+ version: 4.0.0
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: 4.0.0.rc1
26
+ version: 4.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: faye-websocket
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -333,7 +333,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
333
333
  requirements:
334
334
  - - ">="
335
335
  - !ruby/object:Gem::Version
336
- version: '2.5'
336
+ version: '2.6'
337
337
  required_rubygems_version: !ruby/object:Gem::Requirement
338
338
  requirements:
339
339
  - - ">"