devtools 0.1.19 → 0.1.20
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 +5 -5
- data/Rakefile +0 -1
- data/config/flay.yml +1 -1
- data/config/flog.yml +1 -1
- data/config/rubocop.yml +10 -1
- data/devtools.gemspec +6 -7
- data/lib/devtools.rb +8 -7
- data/lib/devtools/config.rb +19 -17
- data/lib/devtools/flay.rb +3 -1
- data/lib/devtools/project/initializer/rake.rb +3 -1
- data/lib/devtools/project/initializer/rspec.rb +3 -1
- data/lib/devtools/rake/flay.rb +43 -18
- data/shared/spec/shared/idempotent_method_behavior.rb +2 -1
- data/spec/integration/devtools/rake/flay/verify_spec.rb +40 -7
- data/spec/spec_helper.rb +2 -3
- data/spec/unit/devtools/flay/scale/measure_spec.rb +1 -1
- data/spec/unit/devtools/project_spec.rb +2 -1
- data/tasks/metrics/coverage.rake +1 -0
- data/tasks/metrics/flog.rake +1 -0
- data/tasks/metrics/mutant.rake +1 -0
- metadata +12 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0616e5015d96abe24a54140716e172d0c643937cacf4df99e7e425b9c809fcd4
|
4
|
+
data.tar.gz: 192fc5ed731193186e401fec71e4acd6dff379af89c926e76921a93f1c3868b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b51df5fdff2ce21a96f56cd8fd430e5a156818d0d1b822d0a9d2ce405a0511b56e988d57ea504ac0cda661d0a3c839860d229a47c1041978406a9978813106c2
|
7
|
+
data.tar.gz: 7ffa20c5a8eccb1a45ce67e80f1fb6227bfde2bf8ae622fc1a4f5a95cc1aa58f5dbd7badc3bbd46a7919ce81547e1b8104e28539ba143eb9cf34a47525d9d4fc
|
data/Rakefile
CHANGED
data/config/flay.yml
CHANGED
data/config/flog.yml
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
---
|
2
|
-
threshold:
|
2
|
+
threshold: 13.5
|
data/config/rubocop.yml
CHANGED
@@ -1,9 +1,18 @@
|
|
1
1
|
inherit_from: ../.rubocop.yml
|
2
2
|
|
3
|
+
AllCops:
|
4
|
+
TargetRubyVersion: 2.3.0
|
5
|
+
|
3
6
|
Metrics/BlockLength:
|
4
7
|
Exclude:
|
5
8
|
# Ignore RSpec DSL
|
6
|
-
|
9
|
+
- spec/**/*
|
10
|
+
# Ignore gemspec DSL
|
11
|
+
- '*.gemspec'
|
12
|
+
|
13
|
+
Naming/FileName:
|
14
|
+
Exclude:
|
15
|
+
- Rakefile
|
7
16
|
|
8
17
|
# Avoid parameter lists longer than five parameters.
|
9
18
|
ParameterLists:
|
data/devtools.gemspec
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
# rubocop:disable Metrics/BlockLength
|
2
1
|
Gem::Specification.new do |gem|
|
3
2
|
gem.name = 'devtools'
|
4
|
-
gem.version = '0.1.
|
3
|
+
gem.version = '0.1.20'
|
5
4
|
gem.authors = ['Markus Schirp']
|
6
5
|
gem.email = ['mbj@schirp-dso.com']
|
7
6
|
gem.description = 'A metagem wrapping development tools'
|
@@ -14,7 +13,7 @@ Gem::Specification.new do |gem|
|
|
14
13
|
gem.executables = %w[]
|
15
14
|
gem.test_files = `git ls-files -- spec`.split("\n")
|
16
15
|
gem.extra_rdoc_files = %w[README.md]
|
17
|
-
gem.required_ruby_version = '>= 2.
|
16
|
+
gem.required_ruby_version = '>= 2.3'
|
18
17
|
|
19
18
|
gem.add_runtime_dependency 'abstract_type', '~> 0.0.7'
|
20
19
|
gem.add_runtime_dependency 'adamantium', '~> 0.2.0'
|
@@ -25,13 +24,13 @@ Gem::Specification.new do |gem|
|
|
25
24
|
gem.add_runtime_dependency 'mutant', '~> 0.8.14'
|
26
25
|
gem.add_runtime_dependency 'mutant-rspec', '~> 0.8.14'
|
27
26
|
gem.add_runtime_dependency 'procto', '~> 0.0.3'
|
28
|
-
gem.add_runtime_dependency 'rake', '~> 12.
|
27
|
+
gem.add_runtime_dependency 'rake', '~> 12.3.0'
|
29
28
|
gem.add_runtime_dependency 'reek', '~> 4.7.3'
|
30
29
|
gem.add_runtime_dependency 'rspec', '~> 3.6.0'
|
31
30
|
gem.add_runtime_dependency 'rspec-core', '~> 3.6.0'
|
32
31
|
gem.add_runtime_dependency 'rspec-its', '~> 1.2.0'
|
33
|
-
gem.add_runtime_dependency 'rubocop', '~> 0.
|
34
|
-
gem.add_runtime_dependency 'simplecov', '~> 0.
|
35
|
-
gem.add_runtime_dependency 'yard', '~> 0.9.
|
32
|
+
gem.add_runtime_dependency 'rubocop', '~> 0.52.1'
|
33
|
+
gem.add_runtime_dependency 'simplecov', '~> 0.15.1'
|
34
|
+
gem.add_runtime_dependency 'yard', '~> 0.9.12'
|
36
35
|
gem.add_runtime_dependency 'yardstick', '~> 0.9.9'
|
37
36
|
end
|
data/lib/devtools.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Stdlib infrastructure
|
2
4
|
require 'pathname'
|
3
5
|
require 'rake'
|
@@ -20,19 +22,18 @@ require 'simplecov'
|
|
20
22
|
|
21
23
|
# Main devtools namespace population
|
22
24
|
module Devtools
|
23
|
-
|
24
25
|
ROOT = Pathname.new(__FILE__).parent.parent.freeze
|
25
26
|
PROJECT_ROOT = Pathname.pwd.freeze
|
26
27
|
SHARED_PATH = ROOT.join('shared').freeze
|
27
28
|
SHARED_SPEC_PATH = SHARED_PATH.join('spec').freeze
|
28
29
|
DEFAULT_CONFIG_PATH = ROOT.join('default/config').freeze
|
29
30
|
RAKE_FILES_GLOB = ROOT.join('tasks/**/*.rake').to_s.freeze
|
30
|
-
LIB_DIRECTORY_NAME = 'lib'
|
31
|
-
SPEC_DIRECTORY_NAME = 'spec'
|
32
|
-
RAKE_FILE_NAME = 'Rakefile'
|
33
|
-
SHARED_SPEC_PATTERN = '{shared,support}/**/*.rb'
|
34
|
-
UNIT_TEST_PATH_REGEXP = %r{\bspec/unit/}
|
35
|
-
DEFAULT_CONFIG_DIR_NAME = 'config'
|
31
|
+
LIB_DIRECTORY_NAME = 'lib'
|
32
|
+
SPEC_DIRECTORY_NAME = 'spec'
|
33
|
+
RAKE_FILE_NAME = 'Rakefile'
|
34
|
+
SHARED_SPEC_PATTERN = '{shared,support}/**/*.rb'
|
35
|
+
UNIT_TEST_PATH_REGEXP = %r{\bspec/unit/}
|
36
|
+
DEFAULT_CONFIG_DIR_NAME = 'config'
|
36
37
|
|
37
38
|
private_constant(*constants(false))
|
38
39
|
|
data/lib/devtools/config.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
+
module Devtools
|
3
4
|
# Abstract base class of tool configuration
|
4
5
|
class Config
|
5
6
|
include Adamantium::Flat, AbstractType, Concord.new(:config_dir)
|
@@ -12,8 +13,8 @@ module Devtools
|
|
12
13
|
# Type check against expected class
|
13
14
|
include Concord.new(:name, :allowed_classes)
|
14
15
|
|
15
|
-
ERROR_FORMAT = '%<name>s: Got instance of %<got>s expected %<allowed>s'
|
16
|
-
CLASS_DELIM = ','
|
16
|
+
ERROR_FORMAT = '%<name>s: Got instance of %<got>s expected %<allowed>s'
|
17
|
+
CLASS_DELIM = ','
|
17
18
|
|
18
19
|
# Check value for instance of expected class
|
19
20
|
#
|
@@ -22,13 +23,14 @@ module Devtools
|
|
22
23
|
# @return [Object]
|
23
24
|
def call(value)
|
24
25
|
klass = value.class
|
26
|
+
format_values = {
|
27
|
+
name: name,
|
28
|
+
got: klass,
|
29
|
+
allowed: allowed_classes.join(CLASS_DELIM)
|
30
|
+
}
|
25
31
|
|
26
32
|
unless allowed_classes.any?(&klass.method(:equal?))
|
27
|
-
fail TypeError, ERROR_FORMAT
|
28
|
-
name: name,
|
29
|
-
got: klass,
|
30
|
-
allowed: allowed_classes.join(CLASS_DELIM)
|
31
|
-
}
|
33
|
+
fail TypeError, format(ERROR_FORMAT, format_values)
|
32
34
|
end
|
33
35
|
|
34
36
|
value
|
@@ -99,18 +101,18 @@ module Devtools
|
|
99
101
|
|
100
102
|
# Rubocop configuration
|
101
103
|
class Rubocop < self
|
102
|
-
FILE = 'rubocop.yml'
|
104
|
+
FILE = 'rubocop.yml'
|
103
105
|
end # Rubocop
|
104
106
|
|
105
107
|
# Reek configuration
|
106
108
|
class Reek < self
|
107
|
-
FILE = 'reek.yml'
|
109
|
+
FILE = 'reek.yml'
|
108
110
|
end # Reek
|
109
111
|
|
110
112
|
# Flay configuration
|
111
113
|
#
|
112
114
|
class Flay < self
|
113
|
-
FILE = 'flay.yml'
|
115
|
+
FILE = 'flay.yml'
|
114
116
|
DEFAULT_LIB_DIRS = %w[lib].freeze
|
115
117
|
DEFAULT_EXCLUDES = %w[].freeze
|
116
118
|
|
@@ -122,7 +124,7 @@ module Devtools
|
|
122
124
|
|
123
125
|
# Yardstick configuration
|
124
126
|
class Yardstick < self
|
125
|
-
FILE = 'yardstick.yml'
|
127
|
+
FILE = 'yardstick.yml'
|
126
128
|
OPTIONS = %w[
|
127
129
|
threshold
|
128
130
|
rules
|
@@ -145,7 +147,7 @@ module Devtools
|
|
145
147
|
|
146
148
|
# Flog configuration
|
147
149
|
class Flog < self
|
148
|
-
FILE = 'flog.yml'
|
150
|
+
FILE = 'flog.yml'
|
149
151
|
DEFAULT_LIB_DIRS = %w[lib].freeze
|
150
152
|
|
151
153
|
attribute :total_score, [Float]
|
@@ -155,9 +157,9 @@ module Devtools
|
|
155
157
|
|
156
158
|
# Mutant configuration
|
157
159
|
class Mutant < self
|
158
|
-
FILE = 'mutant.yml'
|
159
|
-
DEFAULT_NAME = ''
|
160
|
-
DEFAULT_STRATEGY = 'rspec'
|
160
|
+
FILE = 'mutant.yml'
|
161
|
+
DEFAULT_NAME = ''
|
162
|
+
DEFAULT_STRATEGY = 'rspec'
|
161
163
|
|
162
164
|
attribute :name, [String], default: DEFAULT_NAME
|
163
165
|
attribute :strategy, [String], default: DEFAULT_STRATEGY
|
@@ -169,7 +171,7 @@ module Devtools
|
|
169
171
|
|
170
172
|
# Devtools configuration
|
171
173
|
class Devtools < self
|
172
|
-
FILE = 'devtools.yml'
|
174
|
+
FILE = 'devtools.yml'
|
173
175
|
DEFAULT_UNIT_TEST_TIMEOUT = 0.1 # 100ms
|
174
176
|
|
175
177
|
attribute :unit_test_timeout, [Float], default: DEFAULT_UNIT_TEST_TIMEOUT
|
data/lib/devtools/flay.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Devtools
|
2
4
|
module Flay
|
3
5
|
# Measure flay mass relative to size of duplicated sexps
|
@@ -46,7 +48,7 @@ module Devtools
|
|
46
48
|
class FileList
|
47
49
|
include Procto.call, Concord.new(:includes, :excludes)
|
48
50
|
|
49
|
-
GLOB = '**/*.{rb,erb}'
|
51
|
+
GLOB = '**/*.{rb,erb}'
|
50
52
|
|
51
53
|
# Expand includes and filter by excludes
|
52
54
|
#
|
@@ -44,7 +44,9 @@ module Devtools
|
|
44
44
|
#
|
45
45
|
def enable_unit_test_timeout
|
46
46
|
timeout = project.devtools.unit_test_timeout
|
47
|
-
RSpec
|
47
|
+
RSpec
|
48
|
+
.configuration
|
49
|
+
.around(file_path: UNIT_TEST_PATH_REGEXP) do |example|
|
48
50
|
Timeout.timeout(timeout, &example)
|
49
51
|
end
|
50
52
|
end
|
data/lib/devtools/rake/flay.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Devtools
|
2
4
|
module Rake
|
3
5
|
# Flay metric runner
|
@@ -6,39 +8,28 @@ module Devtools
|
|
6
8
|
Procto.call(:verify),
|
7
9
|
Adamantium
|
8
10
|
|
9
|
-
BELOW_THRESHOLD = 'Adjust flay threshold down to
|
10
|
-
TOTAL_MISMATCH = 'Flay total is now
|
11
|
-
ABOVE_THRESHOLD = '
|
11
|
+
BELOW_THRESHOLD = 'Adjust flay threshold down to %<mass>d'
|
12
|
+
TOTAL_MISMATCH = 'Flay total is now %<mass>d, but expected %<expected>d'
|
13
|
+
ABOVE_THRESHOLD = '%<mass>d chunks have a duplicate mass > %<threshold>d'
|
12
14
|
|
13
15
|
# Verify code specified by `files` does not violate flay expectations
|
14
16
|
#
|
15
17
|
# @raise [SystemExit] if a violation is found
|
16
18
|
# @return [undefined] otherwise
|
17
19
|
#
|
18
|
-
# rubocop:disable MethodLength
|
19
20
|
#
|
20
21
|
# @api private
|
21
22
|
def verify
|
22
23
|
# Run flay first to ensure the max mass matches the threshold
|
23
|
-
if below_threshold?
|
24
|
-
|
25
|
-
|
26
|
-
)
|
27
|
-
end
|
28
|
-
|
29
|
-
if total_mismatch?
|
30
|
-
Devtools.notify_metric_violation(
|
31
|
-
TOTAL_MISMATCH % [total_mass, total_score]
|
32
|
-
)
|
33
|
-
end
|
24
|
+
below_threshold_message if below_threshold?
|
25
|
+
|
26
|
+
total_mismatch_message if total_mismatch?
|
34
27
|
|
35
28
|
# Run flay a second time with the threshold set
|
36
29
|
return unless above_threshold?
|
37
30
|
|
38
31
|
restricted_flay_scale.flay_report
|
39
|
-
|
40
|
-
ABOVE_THRESHOLD % [restricted_mass_size, threshold]
|
41
|
-
)
|
32
|
+
above_threshold_message
|
42
33
|
end
|
43
34
|
|
44
35
|
private
|
@@ -79,6 +70,40 @@ module Devtools
|
|
79
70
|
!total_mass.equal?(total_score)
|
80
71
|
end
|
81
72
|
|
73
|
+
# Above threshold message
|
74
|
+
#
|
75
|
+
# @return [String]
|
76
|
+
#
|
77
|
+
# @api private
|
78
|
+
def above_threshold_message
|
79
|
+
format_values = { mass: restricted_mass_size, threshold: threshold }
|
80
|
+
Devtools.notify_metric_violation(
|
81
|
+
format(ABOVE_THRESHOLD, format_values)
|
82
|
+
)
|
83
|
+
end
|
84
|
+
|
85
|
+
# Below threshold message
|
86
|
+
#
|
87
|
+
# @return [String]
|
88
|
+
#
|
89
|
+
# @api private
|
90
|
+
def below_threshold_message
|
91
|
+
Devtools.notify_metric_violation(
|
92
|
+
format(BELOW_THRESHOLD, mass: largest_mass)
|
93
|
+
)
|
94
|
+
end
|
95
|
+
|
96
|
+
# Total mismatch message
|
97
|
+
#
|
98
|
+
# @return [String]
|
99
|
+
#
|
100
|
+
# @api private
|
101
|
+
def total_mismatch_message
|
102
|
+
Devtools.notify_metric_violation(
|
103
|
+
format(TOTAL_MISMATCH, mass: total_mass, expected: total_score)
|
104
|
+
)
|
105
|
+
end
|
106
|
+
|
82
107
|
# Size of mass measured by `Flay::Scale` and filtered by `threshold`
|
83
108
|
#
|
84
109
|
# @return [Integer]
|
@@ -1,7 +1,8 @@
|
|
1
1
|
shared_examples_for 'an idempotent method' do
|
2
2
|
it 'is idempotent' do
|
3
3
|
first = subject
|
4
|
-
|
4
|
+
error = 'RSpec not configured for threadsafety'
|
5
|
+
fail error unless RSpec.configuration.threadsafe?
|
5
6
|
mutex = __memoized.instance_variable_get(:@mutex)
|
6
7
|
memoized = __memoized.instance_variable_get(:@memoized)
|
7
8
|
mutex.synchronize { memoized.delete(:subject) }
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
describe Devtools::Rake::Flay, '#verify' do
|
2
4
|
let(:tempfile) { Tempfile.new(%w[file .rb], Dir.mktmpdir) }
|
3
5
|
let(:file) { Pathname(tempfile.path) }
|
@@ -29,7 +31,7 @@ describe Devtools::Rake::Flay, '#verify' do
|
|
29
31
|
|
30
32
|
context 'reporting' do
|
31
33
|
let(:options) do
|
32
|
-
{ threshold: 3, total_score: 3, lib_dirs: directories, excludes: [] }
|
34
|
+
{ threshold: 3, total_score: 3, lib_dirs: directories, excludes: [] }
|
33
35
|
end
|
34
36
|
|
35
37
|
let(:instance) { described_class.new(options) }
|
@@ -49,7 +51,12 @@ describe Devtools::Rake::Flay, '#verify' do
|
|
49
51
|
|
50
52
|
context 'when theshold is too low' do
|
51
53
|
let(:instance) do
|
52
|
-
described_class.new(
|
54
|
+
described_class.new(
|
55
|
+
threshold: 0,
|
56
|
+
total_score: 0,
|
57
|
+
lib_dirs: directories,
|
58
|
+
excludes: []
|
59
|
+
)
|
53
60
|
end
|
54
61
|
|
55
62
|
specify do
|
@@ -61,7 +68,12 @@ describe Devtools::Rake::Flay, '#verify' do
|
|
61
68
|
|
62
69
|
context 'when threshold is too high' do
|
63
70
|
let(:instance) do
|
64
|
-
described_class.new(
|
71
|
+
described_class.new(
|
72
|
+
threshold: 1000,
|
73
|
+
total_score: 0,
|
74
|
+
lib_dirs: directories,
|
75
|
+
excludes: []
|
76
|
+
)
|
65
77
|
end
|
66
78
|
|
67
79
|
specify do
|
@@ -73,7 +85,12 @@ describe Devtools::Rake::Flay, '#verify' do
|
|
73
85
|
|
74
86
|
context 'when total is too high' do
|
75
87
|
let(:instance) do
|
76
|
-
described_class.new(
|
88
|
+
described_class.new(
|
89
|
+
threshold: 3,
|
90
|
+
total_score: 50,
|
91
|
+
lib_dirs: directories,
|
92
|
+
excludes: []
|
93
|
+
)
|
77
94
|
end
|
78
95
|
|
79
96
|
specify do
|
@@ -105,10 +122,16 @@ Similar code found in :defn (mass = 10)
|
|
105
122
|
#{file}:1
|
106
123
|
#{file}:5
|
107
124
|
REPORT
|
125
|
+
# rubocop:enable Layout/IndentHeredoc
|
108
126
|
end
|
109
127
|
|
110
128
|
let(:instance) do
|
111
|
-
described_class.new(
|
129
|
+
described_class.new(
|
130
|
+
threshold: 3,
|
131
|
+
total_score: 5,
|
132
|
+
lib_dirs: directories,
|
133
|
+
excludes: []
|
134
|
+
)
|
112
135
|
end
|
113
136
|
|
114
137
|
specify do
|
@@ -144,7 +167,12 @@ REPORT
|
|
144
167
|
end
|
145
168
|
|
146
169
|
let(:instance) do
|
147
|
-
described_class.new(
|
170
|
+
described_class.new(
|
171
|
+
threshold: 5,
|
172
|
+
total_score: 8,
|
173
|
+
lib_dirs: directories,
|
174
|
+
excludes: []
|
175
|
+
)
|
148
176
|
end
|
149
177
|
|
150
178
|
it 'sums masses for total' do
|
@@ -155,7 +183,12 @@ REPORT
|
|
155
183
|
context 'when no duplication masses' do
|
156
184
|
let(:ruby) { '' }
|
157
185
|
let(:instance) do
|
158
|
-
described_class.new(
|
186
|
+
described_class.new(
|
187
|
+
threshold: 0,
|
188
|
+
total_score: 0,
|
189
|
+
lib_dirs: directories,
|
190
|
+
excludes: []
|
191
|
+
)
|
159
192
|
end
|
160
193
|
|
161
194
|
specify do
|
data/spec/spec_helper.rb
CHANGED
@@ -3,9 +3,8 @@ require 'tempfile'
|
|
3
3
|
require 'tmpdir'
|
4
4
|
|
5
5
|
if ENV['COVERAGE'] == 'true'
|
6
|
-
|
7
|
-
|
8
|
-
]
|
6
|
+
formatter = [SimpleCov::Formatter::HTMLFormatter]
|
7
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(formatter)
|
9
8
|
|
10
9
|
SimpleCov.start do
|
11
10
|
command_name 'spec:unit'
|
@@ -5,7 +5,8 @@ RSpec.describe Devtools::Project do
|
|
5
5
|
subject { object.init_rspec }
|
6
6
|
|
7
7
|
it 'calls the rspec initializer' do
|
8
|
-
expect(Devtools::Project::Initializer::Rspec)
|
8
|
+
expect(Devtools::Project::Initializer::Rspec)
|
9
|
+
.to receive(:call).with(Devtools.project)
|
9
10
|
expect(subject).to be(object)
|
10
11
|
end
|
11
12
|
end
|
data/tasks/metrics/coverage.rake
CHANGED
data/tasks/metrics/flog.rake
CHANGED
data/tasks/metrics/mutant.rake
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devtools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.20
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Markus Schirp
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: abstract_type
|
@@ -142,14 +142,14 @@ dependencies:
|
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: 12.
|
145
|
+
version: 12.3.0
|
146
146
|
type: :runtime
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: 12.
|
152
|
+
version: 12.3.0
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: reek
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -212,42 +212,42 @@ dependencies:
|
|
212
212
|
requirements:
|
213
213
|
- - "~>"
|
214
214
|
- !ruby/object:Gem::Version
|
215
|
-
version: 0.
|
215
|
+
version: 0.52.1
|
216
216
|
type: :runtime
|
217
217
|
prerelease: false
|
218
218
|
version_requirements: !ruby/object:Gem::Requirement
|
219
219
|
requirements:
|
220
220
|
- - "~>"
|
221
221
|
- !ruby/object:Gem::Version
|
222
|
-
version: 0.
|
222
|
+
version: 0.52.1
|
223
223
|
- !ruby/object:Gem::Dependency
|
224
224
|
name: simplecov
|
225
225
|
requirement: !ruby/object:Gem::Requirement
|
226
226
|
requirements:
|
227
227
|
- - "~>"
|
228
228
|
- !ruby/object:Gem::Version
|
229
|
-
version: 0.
|
229
|
+
version: 0.15.1
|
230
230
|
type: :runtime
|
231
231
|
prerelease: false
|
232
232
|
version_requirements: !ruby/object:Gem::Requirement
|
233
233
|
requirements:
|
234
234
|
- - "~>"
|
235
235
|
- !ruby/object:Gem::Version
|
236
|
-
version: 0.
|
236
|
+
version: 0.15.1
|
237
237
|
- !ruby/object:Gem::Dependency
|
238
238
|
name: yard
|
239
239
|
requirement: !ruby/object:Gem::Requirement
|
240
240
|
requirements:
|
241
241
|
- - "~>"
|
242
242
|
- !ruby/object:Gem::Version
|
243
|
-
version: 0.9.
|
243
|
+
version: 0.9.12
|
244
244
|
type: :runtime
|
245
245
|
prerelease: false
|
246
246
|
version_requirements: !ruby/object:Gem::Requirement
|
247
247
|
requirements:
|
248
248
|
- - "~>"
|
249
249
|
- !ruby/object:Gem::Version
|
250
|
-
version: 0.9.
|
250
|
+
version: 0.9.12
|
251
251
|
- !ruby/object:Gem::Dependency
|
252
252
|
name: yardstick
|
253
253
|
requirement: !ruby/object:Gem::Requirement
|
@@ -334,7 +334,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
334
334
|
requirements:
|
335
335
|
- - ">="
|
336
336
|
- !ruby/object:Gem::Version
|
337
|
-
version: '2.
|
337
|
+
version: '2.3'
|
338
338
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
339
339
|
requirements:
|
340
340
|
- - ">="
|
@@ -342,7 +342,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
342
342
|
version: '0'
|
343
343
|
requirements: []
|
344
344
|
rubyforge_project:
|
345
|
-
rubygems_version: 2.
|
345
|
+
rubygems_version: 2.7.3
|
346
346
|
signing_key:
|
347
347
|
specification_version: 4
|
348
348
|
summary: A metagem wrapping development tools
|