unobtainium 0.6.0 → 0.7.0

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
  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