unobtainium 0.6.0 → 0.7.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
  SHA1:
3
- metadata.gz: e3149f2511fbd2ecbbd5af9d19bb097251bdcac9
4
- data.tar.gz: 95e5ab479135ada464f851c6ebaaea775033d440
3
+ metadata.gz: d69617dc2a12c35e334b4d4e85b680237aef970c
4
+ data.tar.gz: fed5f537d65ca9dfe6c5282e6ed5eae2701414a9
5
5
  SHA512:
6
- metadata.gz: 3a8d32ef7e4162537270294802f1c57ad6a18e736b5c6d0a93dba3e586b8c54d18d184ae611a3892da14cb4c76b28cc4c10ee8d646f3bd4b2b4310000b973bca
7
- data.tar.gz: 19c21152cb0c4b0268695cdb577f230da3c42994f48b2b457d29df8a8e5e733c8f5d3b3abb81c7ae9d8e6496694ef7b17b3f5c42e51b0f5d7e653ec539b30f75
6
+ metadata.gz: 94ec3a3a6520ddfa7a24349c92c50ff603a34afe62a24e0b8bb7e82668e4181f2aaf1d23dc1d84dbfec66b9327628520d48055ed16e0a213cf3b682531d90496
7
+ data.tar.gz: 964c731c3fc82ff0c0357ed7f43b0aabbba5ec2d02425180ee0ee3672ff505763391ab8ad796bb5ee7d207d7a3c5008a4e5cf465b312c71bea24cf251f3aab55
data/Gemfile.lock CHANGED
@@ -1,9 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- unobtainium (0.6.0)
4
+ unobtainium (0.7.0)
5
+ collapsium (~> 0.3)
5
6
  collapsium-config (~> 0.1)
6
- sys-proctable (~> 1.0)
7
+ ptools (~> 1.3)
8
+ sys-proctable (~> 1.1)
7
9
 
8
10
  GEM
9
11
  remote: https://rubygems.org/
@@ -14,78 +16,87 @@ GEM
14
16
  nokogiri (~> 1.6.6)
15
17
  selenium-webdriver (~> 2.49)
16
18
  tomlrb (~> 1.1)
17
- ast (2.2.0)
18
- awesome_print (1.6.1)
19
+ archive-zip (0.7.0)
20
+ io-like (~> 0.3.0)
21
+ ast (2.3.0)
22
+ awesome_print (1.7.0)
19
23
  builder (3.2.2)
20
24
  childprocess (0.5.9)
21
25
  ffi (~> 1.0, >= 1.0.11)
22
- codeclimate-test-reporter (0.5.0)
26
+ chromedriver-helper (1.0.0)
27
+ archive-zip (~> 0.7.0)
28
+ nokogiri (~> 1.6)
29
+ codeclimate-test-reporter (0.6.0)
23
30
  simplecov (>= 0.7.1, < 1.0.0)
24
- collapsium (0.1.0)
31
+ collapsium (0.3.0)
25
32
  collapsium-config (0.1.1)
26
33
  collapsium (~> 0.1)
27
- cucumber (2.3.3)
34
+ cucumber (2.4.0)
28
35
  builder (>= 2.1.2)
29
- cucumber-core (~> 1.4.0)
36
+ cucumber-core (~> 1.5.0)
30
37
  cucumber-wire (~> 0.0.1)
31
38
  diff-lcs (>= 1.1.3)
32
- gherkin (~> 3.2.0)
39
+ gherkin (~> 4.0)
33
40
  multi_json (>= 1.7.5, < 2.0)
34
41
  multi_test (>= 0.1.2)
35
- cucumber-core (1.4.0)
36
- gherkin (~> 3.2.0)
42
+ cucumber-core (1.5.0)
43
+ gherkin (~> 4.0)
37
44
  cucumber-wire (0.0.1)
38
45
  diff-lcs (1.2.5)
39
46
  docile (1.1.5)
40
- ffi (1.9.10)
41
- gherkin (3.2.0)
47
+ ffi (1.9.14)
48
+ gherkin (4.0.0)
49
+ io-like (0.3.0)
42
50
  json (1.8.3)
43
- mini_portile2 (2.0.0)
44
- multi_json (1.12.0)
51
+ mini_portile2 (2.1.0)
52
+ multi_json (1.12.1)
45
53
  multi_test (0.1.2)
46
- nokogiri (1.6.7.2)
47
- mini_portile2 (~> 2.0.0.rc2)
48
- parser (2.3.1.0)
54
+ nokogiri (1.6.8)
55
+ mini_portile2 (~> 2.1.0)
56
+ pkg-config (~> 1.1.7)
57
+ parser (2.3.1.2)
49
58
  ast (~> 2.2)
50
59
  phantomjs (2.1.1.0)
60
+ pkg-config (1.1.7)
51
61
  powerpack (0.1.1)
62
+ ptools (1.3.3)
52
63
  rainbow (2.1.0)
53
- rake (11.1.2)
54
- rspec (3.4.0)
55
- rspec-core (~> 3.4.0)
56
- rspec-expectations (~> 3.4.0)
57
- rspec-mocks (~> 3.4.0)
58
- rspec-core (3.4.4)
59
- rspec-support (~> 3.4.0)
60
- rspec-expectations (3.4.0)
64
+ rake (11.2.2)
65
+ rspec (3.5.0)
66
+ rspec-core (~> 3.5.0)
67
+ rspec-expectations (~> 3.5.0)
68
+ rspec-mocks (~> 3.5.0)
69
+ rspec-core (3.5.1)
70
+ rspec-support (~> 3.5.0)
71
+ rspec-expectations (3.5.0)
61
72
  diff-lcs (>= 1.2.0, < 2.0)
62
- rspec-support (~> 3.4.0)
63
- rspec-mocks (3.4.1)
73
+ rspec-support (~> 3.5.0)
74
+ rspec-mocks (3.5.0)
64
75
  diff-lcs (>= 1.2.0, < 2.0)
65
- rspec-support (~> 3.4.0)
66
- rspec-support (3.4.1)
67
- rubocop (0.40.0)
68
- parser (>= 2.3.1.0, < 3.0)
76
+ rspec-support (~> 3.5.0)
77
+ rspec-support (3.5.0)
78
+ rubocop (0.41.2)
79
+ parser (>= 2.3.1.1, < 3.0)
69
80
  powerpack (~> 0.1)
70
81
  rainbow (>= 1.99.1, < 3.0)
71
82
  ruby-progressbar (~> 1.7)
72
83
  unicode-display_width (~> 1.0, >= 1.0.1)
73
- ruby-progressbar (1.8.0)
84
+ ruby-progressbar (1.8.1)
74
85
  rubyzip (1.2.0)
75
- selenium-webdriver (2.53.0)
86
+ selenium-webdriver (2.53.4)
76
87
  childprocess (~> 0.5)
77
88
  rubyzip (~> 1.0)
78
89
  websocket (~> 1.0)
79
- simplecov (0.11.2)
90
+ simplecov (0.12.0)
80
91
  docile (~> 1.1.0)
81
- json (~> 1.8)
92
+ json (>= 1.8, < 3)
82
93
  simplecov-html (~> 0.10.0)
83
94
  simplecov-html (0.10.0)
84
- sys-proctable (1.0.0)
85
- tomlrb (1.2.1)
86
- unicode-display_width (1.0.5)
95
+ sys-proctable (1.1.1)
96
+ tomlrb (1.2.2)
97
+ unicode-display_width (1.1.0)
87
98
  websocket (1.2.3)
88
- yard (0.8.7.6)
99
+ yard (0.9.0)
89
100
 
90
101
  PLATFORMS
91
102
  ruby
@@ -93,16 +104,17 @@ PLATFORMS
93
104
  DEPENDENCIES
94
105
  appium_lib
95
106
  bundler (~> 1.12)
107
+ chromedriver-helper
96
108
  codeclimate-test-reporter
97
109
  cucumber
98
110
  phantomjs
99
- rake (~> 11.1)
100
- rspec (~> 3.4)
101
- rubocop (~> 0.40)
111
+ rake (~> 11.2)
112
+ rspec (~> 3.5)
113
+ rubocop (~> 0.41)
102
114
  selenium-webdriver
103
- simplecov (~> 0.11)
115
+ simplecov (~> 0.12)
104
116
  unobtainium!
105
- yard (~> 0.8)
117
+ yard (~> 0.9)
106
118
 
107
119
  BUNDLED WITH
108
- 1.12.3
120
+ 1.12.5
data/README.md CHANGED
@@ -29,16 +29,6 @@ You can use unobtainium on its own, or use it as part of a
29
29
  Unobtainium's functionality is in standalone classes, but it's all combined in
30
30
  the `Unobtainium::World` module.
31
31
 
32
- - The `PathedHash` class extends `Hash` by allowing paths to nested values, e.g.:
33
-
34
- ```ruby
35
- h = PathedHash.new { "foo" => { "bar" => 42 }}
36
- h["foo.bar"] == 42 # true
37
- ```
38
-
39
- - The `Config` class is a `PathedHash`, but also reads JSON or YAML files to
40
- initialize itself with values. See the documentation on [configuration features](docs/CONFIGURATION.md)
41
- for details.
42
32
  - The `Runtime` class is a singleton and a `Hash`-like container (but simpler),
43
33
  that destroys all of its contents at the end of a script, calling custom
44
34
  destructors if required. That allows for clean teardown and avoids everything
@@ -53,6 +43,9 @@ the `Unobtainium::World` module.
53
43
  drv.navigate.to "..." # delegates to Selenium or Appium
54
44
  ```
55
45
 
46
+ See the documentation on [configuration features](docs/CONFIGURATION.md) for
47
+ details on configuration.
48
+
56
49
  ## World
57
50
 
58
51
  The World module combines all of the above by providing a simple entry point
@@ -7,6 +7,8 @@
7
7
  # All rights reserved.
8
8
  #
9
9
 
10
+ require 'collapsium'
11
+
10
12
  require_relative '../support/util'
11
13
 
12
14
  module Unobtainium
@@ -19,7 +21,6 @@ module Unobtainium
19
21
  class Appium
20
22
  # Recognized labels for matching the driver
21
23
  LABELS = {
22
- appium: [],
23
24
  ios: [:iphone, :ipad],
24
25
  android: [],
25
26
  }.freeze
@@ -57,18 +58,31 @@ module Unobtainium
57
58
  ##
58
59
  # Sanitize options, and expand the :browser key, if present.
59
60
  def resolve_options(label, options)
60
- # The label specifies the platform, if no other platform is given.
61
+ # Normalize label and options
61
62
  normalized = normalize_label(label)
63
+ options = ::Collapsium::UberHash.new(options || {})
62
64
 
63
- if not options.is_a? Hash
64
- options = {}
65
- end
66
- if not options['caps'].is_a? Hash
67
- options['caps'] = {}
65
+ # Merge 'caps' and 'desired_capabilities', letting the former win
66
+ options[:caps] =
67
+ ::Collapsium::UberHash.new(options[:desired_capabilities])
68
+ .recursive_merge(options[:caps])
69
+ options.delete(:desired_capabilities)
70
+ options.delete('desired_capabilities')
71
+
72
+ # The label specifies the platform, if no other platform is given.
73
+ if options['caps.platformName']
74
+ options['caps.platformName'] = normalized.to_s
68
75
  end
69
76
 
70
- if options['caps']['platformName'].nil?
71
- options['caps']['platformName'] = normalized.to_s
77
+ # Make the appium driver behave a little more like Selenium by using
78
+ # the :url key if the normalized label is remote, and setting
79
+ # appropriate options.
80
+ set_url = options['appium_lib.server_url']
81
+ if set_url and not set_url == options['url']
82
+ warn "You have the remote URL '#{set_url}' set in your options, "\
83
+ "so we're not replacing it with '#{options['url']}'!"
84
+ else
85
+ options['appium_lib.server_url'] = options['url']
72
86
  end
73
87
 
74
88
  # If no app is given, but a browser is requested, we can supplement
@@ -99,7 +113,7 @@ module Unobtainium
99
113
  browser = options['browser'].downcase.to_sym
100
114
 
101
115
  # Platform
102
- platform = options['caps']['platformName'].to_s.downcase.to_sym
116
+ platform = options['caps.platformName'].to_s.downcase.to_sym
103
117
 
104
118
  # If we have supplement data matching the platform and browser, great!
105
119
  data = BROWSER_MATCHES[platform][browser]
@@ -109,12 +123,9 @@ module Unobtainium
109
123
 
110
124
  # We do have to check that we're not overwriting any of the keys.
111
125
  data.each do |key, value|
112
- key_s = key.to_s
113
126
  option_value = nil
114
127
  if options['caps'].key?(key)
115
128
  option_value = options['caps'][key]
116
- elsif options['caps'].key?(key_s)
117
- option_value = options['caps'][key_s]
118
129
  end
119
130
 
120
131
  if option_value.nil? or option_value == value
@@ -7,6 +7,8 @@
7
7
  # All rights reserved.
8
8
  #
9
9
 
10
+ require 'collapsium'
11
+
10
12
  require_relative '../support/util'
11
13
 
12
14
  module Unobtainium
@@ -22,10 +24,17 @@ module Unobtainium
22
24
  firefox: [:ff,],
23
25
  internet_explorer: [:internetexplorer, :explorer, :ie,],
24
26
  safari: [],
25
- chrome: [:chromium],
26
- remote: [],
27
+ chrome: [],
28
+ chromium: [],
27
29
  }.freeze
28
30
 
31
+ # When :chromium is selected, search for these executables. The
32
+ # resulting label will be :chrome, but with an executable path
33
+ # set in the options.
34
+ CHROMIUM_EXECUTABLES = [
35
+ 'chromium-browser'
36
+ ].freeze
37
+
29
38
  class << self
30
39
  include ::Unobtainium::Support::Utility
31
40
 
@@ -49,15 +58,23 @@ module Unobtainium
49
58
  ##
50
59
  # Selenium really wants symbol keys for the options
51
60
  def resolve_options(label, options)
52
- new_opts = {}
61
+ # Normalize label and options
62
+ normalized = normalize_label(label)
63
+ options = ::Collapsium::UberHash.new(options || {})
53
64
 
54
- if not options.nil?
55
- options.each do |key, value|
56
- new_opts[key.to_sym] = value
57
- end
58
- end
65
+ # Merge 'caps' and 'desired_capabilities', letting the latter win
66
+ options[:desired_capabilities] =
67
+ ::Collapsium::UberHash.new(options[:caps])
68
+ .recursive_merge(options[:desired_capabilities])
69
+ options.delete(:caps)
70
+ options.delete('caps')
71
+
72
+ # Chromium is chrome, but with a different binary. Help with that.
73
+ label, options = supplement_chromium(normalized, options)
59
74
 
60
- options = new_opts
75
+ # Selenium expects the first level keys to be symbols *only*, so
76
+ # indifferent access from UberHash isn't good. We have to fix that.
77
+ options = fix_options(options)
61
78
 
62
79
  return label, options
63
80
  end
@@ -68,6 +85,61 @@ module Unobtainium
68
85
  driver = ::Selenium::WebDriver.for(normalize_label(label), options)
69
86
  return driver
70
87
  end
88
+
89
+ private
90
+
91
+ ##
92
+ # If the driver was :chromium, try to use the :chrome driver with
93
+ # options pointing to the chromium binary.
94
+ def supplement_chromium(label, options)
95
+ # Only applies to :chromium
96
+ if :chromium != label
97
+ return label, options
98
+ end
99
+
100
+ # Try to find a chromium binary
101
+ binary = nil
102
+ require 'ptools'
103
+ CHROMIUM_EXECUTABLES.each do |name|
104
+ location = File.which(name)
105
+ if not location.nil?
106
+ binary = location
107
+ break
108
+ end
109
+ end
110
+
111
+ # If we found a chromium binary, we can modify the options.
112
+ # Otherwise, we don't do a thing and let selenium fail.
113
+ if binary.nil?
114
+ return label, options
115
+ end
116
+
117
+ set_binary = options['desired_capabilities.chromeOptions.binary']
118
+ if set_binary and not set_binary == binary
119
+ # There's already a binary set. We should warn about this, but
120
+ # otherwise leave this choice.
121
+ warn "You have the chrome binary '#{set_binary}' set in your "\
122
+ "options, so we're not replacing it with '#{binary}'!"
123
+ else
124
+ options['desired_capabilities.chromeOptions.binary'] = binary
125
+ end
126
+
127
+ # Selenium doesn't recognize :chromium, but :chrome with the above
128
+ # options works.
129
+ return :chrome, options
130
+ end
131
+
132
+ # Selenium expects the first level keys to be symbols *only*, so
133
+ # indifferent access from UberHash isn't good. We have to fix that.
134
+ def fix_options(options)
135
+ result = {}
136
+
137
+ options.each do |key, value|
138
+ result[key.to_sym] = value
139
+ end
140
+
141
+ return result
142
+ end
71
143
  end # class << self
72
144
  end # class Selenium
73
145
 
@@ -8,5 +8,5 @@
8
8
  #
9
9
  module Unobtainium
10
10
  # The current release version
11
- VERSION = "0.6.0".freeze
11
+ VERSION = "0.7.0".freeze
12
12
  end
data/unobtainium.gemspec CHANGED
@@ -43,17 +43,20 @@ Gem::Specification.new do |spec|
43
43
  "'phantomjs'"
44
44
 
45
45
  spec.add_development_dependency "bundler", "~> 1.12"
46
- spec.add_development_dependency "rubocop", "~> 0.40"
47
- spec.add_development_dependency "rake", "~> 11.1"
48
- spec.add_development_dependency "rspec", "~> 3.4"
49
- spec.add_development_dependency "simplecov", "~> 0.11"
50
- spec.add_development_dependency "yard", "~> 0.8"
46
+ spec.add_development_dependency "rubocop", "~> 0.41"
47
+ spec.add_development_dependency "rake", "~> 11.2"
48
+ spec.add_development_dependency "rspec", "~> 3.5"
49
+ spec.add_development_dependency "simplecov", "~> 0.12"
50
+ spec.add_development_dependency "yard", "~> 0.9"
51
51
  spec.add_development_dependency "appium_lib"
52
52
  spec.add_development_dependency "selenium-webdriver"
53
+ spec.add_development_dependency "chromedriver-helper"
53
54
  spec.add_development_dependency "phantomjs"
54
55
  spec.add_development_dependency "cucumber"
55
56
 
56
- spec.add_dependency "sys-proctable", "~> 1.0"
57
+ spec.add_dependency "sys-proctable", "~> 1.1"
58
+ spec.add_dependency "ptools", "~> 1.3"
59
+ spec.add_dependency "collapsium", "~> 0.3"
57
60
  spec.add_dependency "collapsium-config", "~> 0.1"
58
61
  end
59
62
  # rubocop:enable Style/SpaceAroundOperators
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unobtainium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jens Finkhaeuser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-12 00:00:00.000000000 Z
11
+ date: 2016-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,70 +30,70 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.40'
33
+ version: '0.41'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.40'
40
+ version: '0.41'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '11.1'
47
+ version: '11.2'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '11.1'
54
+ version: '11.2'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.4'
61
+ version: '3.5'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '3.4'
68
+ version: '3.5'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: simplecov
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.11'
75
+ version: '0.12'
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: '0.11'
82
+ version: '0.12'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: yard
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.8'
89
+ version: '0.9'
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: '0.8'
96
+ version: '0.9'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: appium_lib
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: chromedriver-helper
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: phantomjs
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -156,14 +170,42 @@ dependencies:
156
170
  requirements:
157
171
  - - "~>"
158
172
  - !ruby/object:Gem::Version
159
- version: '1.0'
173
+ version: '1.1'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '1.1'
181
+ - !ruby/object:Gem::Dependency
182
+ name: ptools
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '1.3'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '1.3'
195
+ - !ruby/object:Gem::Dependency
196
+ name: collapsium
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '0.3'
160
202
  type: :runtime
161
203
  prerelease: false
162
204
  version_requirements: !ruby/object:Gem::Requirement
163
205
  requirements:
164
206
  - - "~>"
165
207
  - !ruby/object:Gem::Version
166
- version: '1.0'
208
+ version: '0.3'
167
209
  - !ruby/object:Gem::Dependency
168
210
  name: collapsium-config
169
211
  requirement: !ruby/object:Gem::Requirement