conferrable 1.0.4 → 1.1.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 +4 -4
- data/.gitignore +1 -0
- data/.ruby-version +1 -1
- data/.travis.yml +8 -3
- data/CHANGELOG.md +4 -0
- data/README.md +21 -12
- data/Rakefile +12 -0
- data/conferrable.gemspec +3 -2
- data/lib/conferrable/file_utilities.rb +12 -3
- data/lib/conferrable/version.rb +1 -1
- data/spec/{conferrable_spec.rb → conferrable/conferrable_spec.rb} +0 -0
- data/spec/{configuration_spec.rb → conferrable/configuration_spec.rb} +0 -0
- data/spec/{entry_spec.rb → conferrable/entry_spec.rb} +0 -0
- data/spec/{file_based_configuration_spec.rb → conferrable/file_based_configuration_spec.rb} +0 -0
- data/spec/conferrable/file_utilities_spec.rb +52 -0
- data/spec/config_examples/UPPER.YML +0 -0
- data/spec/config_examples/UPPER.YML.ERB +1 -0
- data/spec/config_examples/directory.yml/.gitkeep +0 -0
- data/spec/config_examples/full.yaml +0 -0
- data/spec/config_examples/full.yaml.erb +0 -0
- data/spec/config_examples/not-yaml.txt +0 -0
- data/spec/config_examples/simple.yml +3 -0
- data/spec/config_examples/simple.yml.erb +1 -0
- data/spec/spec_helper.rb +2 -2
- metadata +46 -12
- data/Gemfile.lock +0 -102
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00f6b4e7506689f8ba9637674566b37e2013753f852bded56f5997c0349dfebc
|
4
|
+
data.tar.gz: 3bfe518753fca7d4cec7bcd6ef1d27c9f419c9305c07a2529eae7231b9a356db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 30d06435baeb16ebc3e00558ca9cff70b8c7e2a55f86750cd06233624557091eda29d5e70e4336b72b77f2c5da9011a5acf23c60c1935e324226c42600ea0a9f
|
7
|
+
data.tar.gz: baa56734cc264d44d6d698650e6d00953dec8978d7d453567b07685c071aeb3ccd7022df38d72cfb818e546fdd5e253de44b81ea73a051026b97743993618ef9
|
data/.gitignore
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.6.
|
1
|
+
2.6.3
|
data/.travis.yml
CHANGED
@@ -5,9 +5,9 @@ language: ruby
|
|
5
5
|
rvm:
|
6
6
|
# Build on the latest stable of all supported Rubies (https://www.ruby-lang.org/en/downloads/):
|
7
7
|
- 2.3.8
|
8
|
-
- 2.4.
|
9
|
-
- 2.5.
|
10
|
-
- 2.6.
|
8
|
+
- 2.4.6
|
9
|
+
- 2.5.5
|
10
|
+
- 2.6.3
|
11
11
|
cache: bundler
|
12
12
|
before_script:
|
13
13
|
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
@@ -18,3 +18,8 @@ script:
|
|
18
18
|
- bundle exec rspec
|
19
19
|
after_script:
|
20
20
|
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
21
|
+
addons:
|
22
|
+
# https://docs.travis-ci.com/user/uploading-artifacts/
|
23
|
+
artifacts:
|
24
|
+
paths:
|
25
|
+
- Gemfile.lock
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -29,7 +29,7 @@ bundle add conferrable
|
|
29
29
|
Lets say we have a configuration file located at:
|
30
30
|
|
31
31
|
````
|
32
|
-
<app root>/config/config.
|
32
|
+
<app root>/config/config.yaml
|
33
33
|
````
|
34
34
|
|
35
35
|
We can access this by:
|
@@ -38,21 +38,23 @@ We can access this by:
|
|
38
38
|
config = Conferrable.get_config # config will be a hash
|
39
39
|
````
|
40
40
|
|
41
|
+
Note that the configuration file can also be called config.yml (three character extension).
|
42
|
+
|
41
43
|
### Multiple File Example
|
42
44
|
|
43
45
|
Building on the simple example, say we have two configuration files:
|
44
46
|
|
45
47
|
````
|
46
|
-
<app root>/config/config1.
|
47
|
-
<app root>/config/config2.
|
48
|
+
<app root>/config/config1.yaml
|
49
|
+
<app root>/config/config2.yaml
|
48
50
|
````
|
49
51
|
|
50
52
|
We can now explicitly set the files:
|
51
53
|
|
52
54
|
````
|
53
55
|
files = [
|
54
|
-
'./config/config1.
|
55
|
-
'./config/config2.
|
56
|
+
'./config/config1.yaml',
|
57
|
+
'./config/config2.yaml',
|
56
58
|
]
|
57
59
|
|
58
60
|
Conferrable.set_filenames(:config, files)
|
@@ -70,6 +72,10 @@ config = Conferrable.get_config # config will be a hash
|
|
70
72
|
|
71
73
|
Note that the files will be loaded in alphabetical order.
|
72
74
|
|
75
|
+
### ERB Support ###
|
76
|
+
|
77
|
+
If a configuration file ends in '.erb', then it will be pre-processed by the ERB templating system. For example, a file named config.yaml.erb would first be processed by ERB and then parsed as a YAML file. This is helpful when dealing with more complex YAML files.
|
78
|
+
|
73
79
|
## Contributing
|
74
80
|
|
75
81
|
### Development Environment Configuration
|
@@ -102,6 +108,12 @@ Also, do not forget to run Rubocop:
|
|
102
108
|
bundle exec rubocop
|
103
109
|
````
|
104
110
|
|
111
|
+
For convenience, the default rake task will run Rspec and Rubocop:
|
112
|
+
|
113
|
+
```
|
114
|
+
bundle exec rake
|
115
|
+
```
|
116
|
+
|
105
117
|
### Publishing
|
106
118
|
|
107
119
|
Note: ensure you have proper authorization before trying to publish new versions.
|
@@ -109,14 +121,11 @@ Note: ensure you have proper authorization before trying to publish new versions
|
|
109
121
|
After code changes have successfully gone through the Pull Request review process then the following steps should be followed for publishing new versions:
|
110
122
|
|
111
123
|
1. Merge Pull Request into master
|
112
|
-
2. Update
|
113
|
-
3. Install dependencies:
|
114
|
-
4. Update
|
124
|
+
2. Update `lib/conferrable/version.rb` using [semantic versioning](https://semver.org/)
|
125
|
+
3. Install dependencies: `bundle`
|
126
|
+
4. Update `CHANGELOG.md` with release notes
|
115
127
|
5. Commit & push master to remote and ensure CI builds master successfully
|
116
|
-
6.
|
117
|
-
7. Publish package to RubyGems: `gem push conferrable-X.gem` where X is the version to push
|
118
|
-
8. Tag master with new version: `git tag <version>`
|
119
|
-
9. Push tags remotely: `git push origin --tags`
|
128
|
+
6. Run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
120
129
|
|
121
130
|
## License
|
122
131
|
|
data/Rakefile
ADDED
data/conferrable.gemspec
CHANGED
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
|
|
13
13
|
Conferrable standardizes how we interact with these static YAML configuration files.
|
14
14
|
DESCRIPTION
|
15
15
|
|
16
|
-
s.authors = ['Matthew Ruggio']
|
17
|
-
s.email = ['mruggio@bluemarblepayroll.com']
|
16
|
+
s.authors = ['Matthew Ruggio', 'Ryan Gerry']
|
17
|
+
s.email = ['mruggio@bluemarblepayroll.com', 'rgerry@bluemarblepayroll.com']
|
18
18
|
s.files = `git ls-files`.split("\n")
|
19
19
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
20
|
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
|
|
24
24
|
s.required_ruby_version = '>= 2.3.8'
|
25
25
|
|
26
26
|
s.add_development_dependency('guard-rspec', '~>4.7')
|
27
|
+
s.add_development_dependency('rake', '~> 12')
|
27
28
|
s.add_development_dependency('rspec')
|
28
29
|
s.add_development_dependency('rubocop', '~>0.63.1')
|
29
30
|
s.add_development_dependency('simplecov', '~>0.16.1')
|
@@ -20,11 +20,20 @@ module Conferrable
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def read(filename)
|
23
|
-
|
23
|
+
file_content = IO.read(filename)
|
24
|
+
|
25
|
+
pre_processed_content =
|
26
|
+
filename.downcase.end_with?(ERB_EXTENSION) ? ERB.new(file_content).result : file_content
|
27
|
+
|
28
|
+
YAML.safe_load(pre_processed_content)
|
24
29
|
end
|
25
30
|
|
26
31
|
private
|
27
32
|
|
33
|
+
ERB_EXTENSION = '.erb'
|
34
|
+
FILE_MATCHER = /.+\.(ya?ml|ya?ml.erb)\Z/i.freeze
|
35
|
+
private_constant :ERB_EXTENSION, :FILE_MATCHER
|
36
|
+
|
28
37
|
def list(filename)
|
29
38
|
if File.exist?(filename) && File.directory?(filename)
|
30
39
|
glob_files_only(filename)
|
@@ -36,8 +45,8 @@ module Conferrable
|
|
36
45
|
end
|
37
46
|
|
38
47
|
def glob_files_only(filename)
|
39
|
-
|
40
|
-
Dir.glob(
|
48
|
+
dir_glob = File.join(filename, '**/*')
|
49
|
+
Dir.glob(dir_glob).grep(FILE_MATCHER).reject { |f| File.directory?(f) }
|
41
50
|
end
|
42
51
|
end
|
43
52
|
end
|
data/lib/conferrable/version.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2018-present, Blue Marble Payroll, LLC
|
5
|
+
#
|
6
|
+
# This source code is licensed under the MIT license found in the
|
7
|
+
# LICENSE file in the root directory of this source tree.
|
8
|
+
#
|
9
|
+
|
10
|
+
require './spec/spec_helper'
|
11
|
+
|
12
|
+
describe Conferrable::FileUtilities do
|
13
|
+
let(:config_examples_path) { File.expand_path('../config_examples/', __dir__) }
|
14
|
+
|
15
|
+
describe 'resolving file names' do
|
16
|
+
it 'finds all YAML and YAML + ERB files with upper or lower case extensions' do
|
17
|
+
expected_files = Set.new([
|
18
|
+
File.join(config_examples_path, 'full.yaml.erb'),
|
19
|
+
File.join(config_examples_path, 'full.yaml'),
|
20
|
+
File.join(config_examples_path, 'simple.yml.erb'),
|
21
|
+
File.join(config_examples_path, 'simple.yml'),
|
22
|
+
File.join(config_examples_path, 'UPPER.YML.ERB'),
|
23
|
+
File.join(config_examples_path, 'UPPER.YML')
|
24
|
+
])
|
25
|
+
|
26
|
+
expect(Set.new(described_class.resolve(config_examples_path))).to eq expected_files
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe 'reading/parsing YAML files' do
|
31
|
+
it 'returns a parsed YAML evaluated result for a *.yml file' do
|
32
|
+
file_path = File.join(config_examples_path, 'simple.yml')
|
33
|
+
expected_result = { 'key1' => ['element1', '<%= "ERB which will not evaluate" =>'] }
|
34
|
+
|
35
|
+
expect(described_class.read(file_path)).to eq(expected_result)
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'returns a parsed YAML and ERB evaluated result for a *.yml.erb file' do
|
39
|
+
file_path = File.join(config_examples_path, 'simple.yml.erb')
|
40
|
+
expected_result = { 'key1' => %w[static_element dynamic_element] }
|
41
|
+
|
42
|
+
expect(described_class.read(file_path)).to eq(expected_result)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'returns a parsed YAML and ERB evaluated result for an upper case *.YML.ERB file' do
|
46
|
+
file_path = File.join(config_examples_path, 'UPPER.YML.ERB')
|
47
|
+
expected_result = { 'key1' => %w[static_element dynamic_element] }
|
48
|
+
|
49
|
+
expect(described_class.read(file_path)).to eq(expected_result)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
key1: [static_element, <%= 'dynamic' + '_' + 'element' %>]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
key1: [static_element, <%= 'dynamic' + '_' + 'element' %>]
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: conferrable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Ruggio
|
8
|
+
- Ryan Gerry
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2019-
|
12
|
+
date: 2019-08-07 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: guard-rspec
|
@@ -24,6 +25,20 @@ dependencies:
|
|
24
25
|
- - "~>"
|
25
26
|
- !ruby/object:Gem::Version
|
26
27
|
version: '4.7'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rake
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '12'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '12'
|
27
42
|
- !ruby/object:Gem::Dependency
|
28
43
|
name: rspec
|
29
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,6 +101,7 @@ description: |2
|
|
86
101
|
Conferrable standardizes how we interact with these static YAML configuration files.
|
87
102
|
email:
|
88
103
|
- mruggio@bluemarblepayroll.com
|
104
|
+
- rgerry@bluemarblepayroll.com
|
89
105
|
executables:
|
90
106
|
- console
|
91
107
|
extensions: []
|
@@ -98,10 +114,10 @@ files:
|
|
98
114
|
- ".travis.yml"
|
99
115
|
- CHANGELOG.md
|
100
116
|
- Gemfile
|
101
|
-
- Gemfile.lock
|
102
117
|
- Guardfile
|
103
118
|
- LICENSE
|
104
119
|
- README.md
|
120
|
+
- Rakefile
|
105
121
|
- bin/console
|
106
122
|
- conferrable.gemspec
|
107
123
|
- lib/conferrable.rb
|
@@ -111,10 +127,19 @@ files:
|
|
111
127
|
- lib/conferrable/file_based_configuration.rb
|
112
128
|
- lib/conferrable/file_utilities.rb
|
113
129
|
- lib/conferrable/version.rb
|
114
|
-
- spec/conferrable_spec.rb
|
115
|
-
- spec/configuration_spec.rb
|
116
|
-
- spec/entry_spec.rb
|
117
|
-
- spec/file_based_configuration_spec.rb
|
130
|
+
- spec/conferrable/conferrable_spec.rb
|
131
|
+
- spec/conferrable/configuration_spec.rb
|
132
|
+
- spec/conferrable/entry_spec.rb
|
133
|
+
- spec/conferrable/file_based_configuration_spec.rb
|
134
|
+
- spec/conferrable/file_utilities_spec.rb
|
135
|
+
- spec/config_examples/UPPER.YML
|
136
|
+
- spec/config_examples/UPPER.YML.ERB
|
137
|
+
- spec/config_examples/directory.yml/.gitkeep
|
138
|
+
- spec/config_examples/full.yaml
|
139
|
+
- spec/config_examples/full.yaml.erb
|
140
|
+
- spec/config_examples/not-yaml.txt
|
141
|
+
- spec/config_examples/simple.yml
|
142
|
+
- spec/config_examples/simple.yml.erb
|
118
143
|
- spec/spec_helper.rb
|
119
144
|
homepage: https://github.com/bluemarblepayroll/conferrable
|
120
145
|
licenses:
|
@@ -135,13 +160,22 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
160
|
- !ruby/object:Gem::Version
|
136
161
|
version: '0'
|
137
162
|
requirements: []
|
138
|
-
rubygems_version: 3.0.
|
163
|
+
rubygems_version: 3.0.3
|
139
164
|
signing_key:
|
140
165
|
specification_version: 4
|
141
166
|
summary: Simple YAML file-based configuration management
|
142
167
|
test_files:
|
143
|
-
- spec/conferrable_spec.rb
|
144
|
-
- spec/configuration_spec.rb
|
145
|
-
- spec/entry_spec.rb
|
146
|
-
- spec/file_based_configuration_spec.rb
|
168
|
+
- spec/conferrable/conferrable_spec.rb
|
169
|
+
- spec/conferrable/configuration_spec.rb
|
170
|
+
- spec/conferrable/entry_spec.rb
|
171
|
+
- spec/conferrable/file_based_configuration_spec.rb
|
172
|
+
- spec/conferrable/file_utilities_spec.rb
|
173
|
+
- spec/config_examples/UPPER.YML
|
174
|
+
- spec/config_examples/UPPER.YML.ERB
|
175
|
+
- spec/config_examples/directory.yml/.gitkeep
|
176
|
+
- spec/config_examples/full.yaml
|
177
|
+
- spec/config_examples/full.yaml.erb
|
178
|
+
- spec/config_examples/not-yaml.txt
|
179
|
+
- spec/config_examples/simple.yml
|
180
|
+
- spec/config_examples/simple.yml.erb
|
147
181
|
- spec/spec_helper.rb
|
data/Gemfile.lock
DELETED
@@ -1,102 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
conferrable (1.0.4)
|
5
|
-
|
6
|
-
GEM
|
7
|
-
remote: https://rubygems.org/
|
8
|
-
specs:
|
9
|
-
ansi (1.5.0)
|
10
|
-
ast (2.4.0)
|
11
|
-
coderay (1.1.2)
|
12
|
-
diff-lcs (1.3)
|
13
|
-
docile (1.3.1)
|
14
|
-
ffi (1.10.0)
|
15
|
-
formatador (0.2.5)
|
16
|
-
guard (2.15.0)
|
17
|
-
formatador (>= 0.2.4)
|
18
|
-
listen (>= 2.7, < 4.0)
|
19
|
-
lumberjack (>= 1.0.12, < 2.0)
|
20
|
-
nenv (~> 0.1)
|
21
|
-
notiffany (~> 0.0)
|
22
|
-
pry (>= 0.9.12)
|
23
|
-
shellany (~> 0.0)
|
24
|
-
thor (>= 0.18.1)
|
25
|
-
guard-compat (1.2.1)
|
26
|
-
guard-rspec (4.7.3)
|
27
|
-
guard (~> 2.1)
|
28
|
-
guard-compat (~> 1.1)
|
29
|
-
rspec (>= 2.99.0, < 4.0)
|
30
|
-
hirb (0.7.3)
|
31
|
-
jaro_winkler (1.5.2)
|
32
|
-
json (2.1.0)
|
33
|
-
listen (3.1.5)
|
34
|
-
rb-fsevent (~> 0.9, >= 0.9.4)
|
35
|
-
rb-inotify (~> 0.9, >= 0.9.7)
|
36
|
-
ruby_dep (~> 1.2)
|
37
|
-
lumberjack (1.0.13)
|
38
|
-
method_source (0.9.2)
|
39
|
-
nenv (0.3.0)
|
40
|
-
notiffany (0.1.1)
|
41
|
-
nenv (~> 0.1)
|
42
|
-
shellany (~> 0.0)
|
43
|
-
parallel (1.13.0)
|
44
|
-
parser (2.6.0.0)
|
45
|
-
ast (~> 2.4.0)
|
46
|
-
powerpack (0.1.2)
|
47
|
-
pry (0.12.2)
|
48
|
-
coderay (~> 1.1.0)
|
49
|
-
method_source (~> 0.9.0)
|
50
|
-
rainbow (3.0.0)
|
51
|
-
rb-fsevent (0.10.3)
|
52
|
-
rb-inotify (0.10.0)
|
53
|
-
ffi (~> 1.0)
|
54
|
-
rspec (3.8.0)
|
55
|
-
rspec-core (~> 3.8.0)
|
56
|
-
rspec-expectations (~> 3.8.0)
|
57
|
-
rspec-mocks (~> 3.8.0)
|
58
|
-
rspec-core (3.8.0)
|
59
|
-
rspec-support (~> 3.8.0)
|
60
|
-
rspec-expectations (3.8.1)
|
61
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
62
|
-
rspec-support (~> 3.8.0)
|
63
|
-
rspec-mocks (3.8.0)
|
64
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
65
|
-
rspec-support (~> 3.8.0)
|
66
|
-
rspec-support (3.8.0)
|
67
|
-
rubocop (0.63.1)
|
68
|
-
jaro_winkler (~> 1.5.1)
|
69
|
-
parallel (~> 1.10)
|
70
|
-
parser (>= 2.5, != 2.5.1.1)
|
71
|
-
powerpack (~> 0.1)
|
72
|
-
rainbow (>= 2.2.2, < 4.0)
|
73
|
-
ruby-progressbar (~> 1.7)
|
74
|
-
unicode-display_width (~> 1.4.0)
|
75
|
-
ruby-progressbar (1.10.0)
|
76
|
-
ruby_dep (1.5.0)
|
77
|
-
shellany (0.0.1)
|
78
|
-
simplecov (0.16.1)
|
79
|
-
docile (~> 1.1)
|
80
|
-
json (>= 1.8, < 3)
|
81
|
-
simplecov-html (~> 0.10.0)
|
82
|
-
simplecov-console (0.4.2)
|
83
|
-
ansi
|
84
|
-
hirb
|
85
|
-
simplecov
|
86
|
-
simplecov-html (0.10.2)
|
87
|
-
thor (0.20.3)
|
88
|
-
unicode-display_width (1.4.1)
|
89
|
-
|
90
|
-
PLATFORMS
|
91
|
-
ruby
|
92
|
-
|
93
|
-
DEPENDENCIES
|
94
|
-
conferrable!
|
95
|
-
guard-rspec (~> 4.7)
|
96
|
-
rspec
|
97
|
-
rubocop (~> 0.63.1)
|
98
|
-
simplecov (~> 0.16.1)
|
99
|
-
simplecov-console (~> 0.4.2)
|
100
|
-
|
101
|
-
BUNDLED WITH
|
102
|
-
1.17.2
|