pdd 0.15.4 → 0.16
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/.rubocop.yml +2 -0
- data/.rultor.yml +2 -2
- data/.travis.yml +1 -1
- data/README.md +34 -8
- data/bin/pdd +5 -5
- data/features/step_definitions/steps.rb +10 -10
- data/lib/pdd.rb +4 -4
- data/lib/pdd/rule/duplicates.rb +6 -5
- data/lib/pdd/rule/roles.rb +7 -7
- data/lib/pdd/source.rb +11 -11
- data/lib/pdd/sources.rb +1 -1
- data/lib/pdd/version.rb +1 -1
- data/pdd.gemspec +8 -8
- data/test/test_pdd.rb +2 -2
- data/test/test_source.rb +2 -2
- metadata +21 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ccf65c43c8c73f60aacdb97b18fb0e1aa1d8a95
|
4
|
+
data.tar.gz: 0816acf8952b943efe05cb6f7d0bde9e80240b06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: feb1ce6850ca49b79f1f1c24450c7a3a10e457d9d61f59f7fb50a216be0f7997f22d6d293c50792267d5adb56354d9353c28d35abfc883db689f0b4bf9242e79
|
7
|
+
data.tar.gz: 164f86ac91279090b113b712d773bfc721b5b6f2f6b263b2ba4160301c8c564f3847a1422feb4a2f2e7e8df2fe7a3a77d2629714f91f198a19e23fa4ee4a60a7
|
data/.rubocop.yml
CHANGED
data/.rultor.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
assets:
|
2
|
-
rubygems.yml:
|
3
|
-
s3cfg:
|
2
|
+
rubygems.yml: teamed/home#assets/rubygems.yml
|
3
|
+
s3cfg: teamed/home#assets/s3cfg
|
4
4
|
install: |
|
5
5
|
sudo apt-get update
|
6
6
|
sudo apt-get install -y --fix-missing libmagic1 libmagic-dev
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
[](http://www.teamed.io)
|
2
2
|
[](http://www.rultor.com/p/teamed/pdd)
|
3
|
+
[](https://www.jetbrains.com/ruby/)
|
3
4
|
|
4
5
|
[](https://travis-ci.org/teamed/pdd)
|
5
6
|
[](https://ci.appveyor.com/project/yegor256/pdd)
|
@@ -8,13 +9,36 @@
|
|
8
9
|
[](https://codeclimate.com/github/teamed/pdd)
|
9
10
|
[](https://coveralls.io/r/teamed/pdd)
|
10
11
|
|
11
|
-
|
12
|
+
## What This is for?
|
13
|
+
|
14
|
+
Read this article about
|
15
|
+
[Puzzle Driven Development](http://www.yegor256.com/2009/03/04/pdd.html).
|
16
|
+
Check also patent application [US 12/840,306](http://www.google.com/patents/US20120023476)
|
17
|
+
|
18
|
+
## How to Install?
|
19
|
+
|
20
|
+
Install it first (Debian Linux):
|
12
21
|
|
13
22
|
```bash
|
14
|
-
$ apt-get install -y libmagic1 libmagic-dev ruby-dev
|
23
|
+
$ apt-get install -y libmagic1 libmagic-dev zlib1g-dev ruby-dev
|
24
|
+
$ gem install pdd
|
25
|
+
```
|
26
|
+
|
27
|
+
On RedHat:
|
28
|
+
|
29
|
+
```bash
|
30
|
+
$ yum install -y libmagic1 libmagic-dev zlib1g-dev ruby-dev
|
31
|
+
$ gem install pdd
|
32
|
+
```
|
33
|
+
|
34
|
+
On OSX and Windows, just that:
|
35
|
+
|
36
|
+
```
|
15
37
|
$ gem install pdd
|
16
38
|
```
|
17
39
|
|
40
|
+
## How to Run?
|
41
|
+
|
18
42
|
Run it locally and read its output:
|
19
43
|
|
20
44
|
```bash
|
@@ -43,11 +67,15 @@ Possible formats of puzzle markers:
|
|
43
67
|
#678:40m/DEV
|
44
68
|
```
|
45
69
|
|
46
|
-
|
47
|
-
|
48
|
-
|
70
|
+
You can exclude certain files from the search, for example:
|
71
|
+
|
72
|
+
```bash
|
73
|
+
pdd --exclude=src/**/*.java --exclude=target/**/*
|
74
|
+
pdd --exclude=src/**/*.java # exclude .java files in src/
|
75
|
+
pdd --exclude=src/**/* # exclude all files in src/
|
76
|
+
```
|
49
77
|
|
50
|
-
## Rules
|
78
|
+
## How to Configure Rules
|
51
79
|
|
52
80
|
You can specify post-parsing rules for your puzzles, in command line,
|
53
81
|
for example:
|
@@ -76,7 +104,5 @@ Here is a list of rules available now:
|
|
76
104
|
* `max-duplicates:1` blocks more than one duplicate of any puzzle
|
77
105
|
(this rule is used by default).
|
78
106
|
|
79
|
-
## .pdd
|
80
|
-
|
81
107
|
You can put all command line options into `.pdd` file. The options from the
|
82
108
|
file will be used first. Command line options may be added on top of them.
|
data/bin/pdd
CHANGED
@@ -30,8 +30,8 @@ require 'pdd/version'
|
|
30
30
|
require 'nokogiri'
|
31
31
|
|
32
32
|
args = []
|
33
|
-
args
|
34
|
-
args
|
33
|
+
args += File.read('.pdd').split(/\s+/).map(&:strip) if File.exist?('.pdd')
|
34
|
+
args += ARGV
|
35
35
|
|
36
36
|
opts = Slop.parse(args, strict: true, help: true) do
|
37
37
|
banner "Usage (#{PDD::VERSION}): pdd [options]"
|
@@ -72,7 +72,7 @@ opts = Slop.parse(args, strict: true, help: true) do
|
|
72
72
|
)
|
73
73
|
end
|
74
74
|
|
75
|
-
|
75
|
+
raise '-f is mandatory when using -v' if opts.verbose? && !opts.file?
|
76
76
|
|
77
77
|
if opts.help?
|
78
78
|
puts opts
|
@@ -95,8 +95,8 @@ if opts[:format]
|
|
95
95
|
'assets', 'puzzles.xsl'
|
96
96
|
)
|
97
97
|
output = Nokogiri::XSLT(File.read(xslt)).transform(Nokogiri::XML(output))
|
98
|
-
|
99
|
-
|
98
|
+
elsif opts[:format] != 'xml'
|
99
|
+
raise 'invalid format, use html or xml'
|
100
100
|
end
|
101
101
|
end
|
102
102
|
file << output
|
@@ -46,7 +46,7 @@ end
|
|
46
46
|
Given(/^I have a "([^"]*)" file with content:$/) do |file, text|
|
47
47
|
FileUtils.mkdir_p(File.dirname(file)) unless File.exist?(file)
|
48
48
|
File.open(file, 'w') do |f|
|
49
|
-
f.write(text.gsub(/\\xFF/,
|
49
|
+
f.write(text.gsub(/\\xFF/, 0xFF.chr))
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -55,7 +55,7 @@ When(/^I run pdd$/) do
|
|
55
55
|
end
|
56
56
|
|
57
57
|
Then(/^XML matches "([^"]+)"$/) do |xpath|
|
58
|
-
|
58
|
+
raise "XML doesn't match \"#{xpath}\":\n#{@xml}" if @xml.xpath(xpath).empty?
|
59
59
|
end
|
60
60
|
|
61
61
|
When(/^I run pdd it fails with "([^"]*)"$/) do |txt|
|
@@ -67,10 +67,10 @@ When(/^I run pdd it fails with "([^"]*)"$/) do |txt|
|
|
67
67
|
raise "PDD failed but exception doesn't contain \"#{txt}\": #{ex.message}"
|
68
68
|
end
|
69
69
|
end
|
70
|
-
|
70
|
+
raise "PDD didn't fail" if passed
|
71
71
|
end
|
72
72
|
|
73
|
-
When(
|
73
|
+
When(%r{^I run bin/pdd with "([^"]*)"$}) do |arg|
|
74
74
|
home = File.join(File.dirname(__FILE__), '../..')
|
75
75
|
@stdout = `ruby -I#{home}/lib #{home}/bin/pdd #{arg}`
|
76
76
|
@exitstatus = $CHILD_STATUS.exitstatus
|
@@ -78,29 +78,29 @@ end
|
|
78
78
|
|
79
79
|
Then(/^Stdout contains "([^"]*)"$/) do |txt|
|
80
80
|
unless @stdout.include?(txt)
|
81
|
-
|
81
|
+
raise "STDOUT doesn't contain '#{txt}':\n#{@stdout}"
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
85
|
Then(/^Stdout is empty$/) do
|
86
|
-
|
86
|
+
raise "STDOUT is not empty:\n#{@stdout}" unless @stdout == ''
|
87
87
|
end
|
88
88
|
|
89
89
|
Then(/^XML file "([^"]+)" matches "([^"]+)"$/) do |file, xpath|
|
90
|
-
|
90
|
+
raise "File #{file} doesn't exit" unless File.exist?(file)
|
91
91
|
xml = Nokogiri::XML.parse(File.read(file))
|
92
92
|
xml.remove_namespaces!
|
93
93
|
if xml.xpath(xpath).empty?
|
94
|
-
|
94
|
+
raise "XML file #{file} doesn't match \"#{xpath}\":\n#{xml}"
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
98
98
|
Then(/^Exit code is zero$/) do
|
99
|
-
|
99
|
+
raise "Non-zero exit code #{@exitstatus}" unless @exitstatus == 0
|
100
100
|
end
|
101
101
|
|
102
102
|
Then(/^Exit code is not zero$/) do
|
103
|
-
|
103
|
+
raise 'Zero exit code' if @exitstatus == 0
|
104
104
|
end
|
105
105
|
|
106
106
|
When(/^I run bash with$/) do |text|
|
data/lib/pdd.rb
CHANGED
@@ -50,7 +50,7 @@ module PDD
|
|
50
50
|
'min-words' => PDD::Rule::Text::MinWords,
|
51
51
|
'max-duplicates' => PDD::Rule::MaxDuplicates,
|
52
52
|
'available-roles' => PDD::Rule::Roles::Available
|
53
|
-
}
|
53
|
+
}.freeze
|
54
54
|
|
55
55
|
# Get logger.
|
56
56
|
def self.log
|
@@ -141,13 +141,13 @@ module PDD
|
|
141
141
|
(@opts[:rule] || []).push('max-duplicates:1').map do |r|
|
142
142
|
name, value = r.split(':')
|
143
143
|
rule = RULES[name]
|
144
|
-
|
144
|
+
raise "rule '#{name}' doesn't exist" if rule.nil?
|
145
145
|
rule.new(doc, value).errors.each do |e|
|
146
146
|
PDD.log.error e
|
147
147
|
total += 1
|
148
148
|
end
|
149
149
|
end
|
150
|
-
|
150
|
+
raise PDD::Error, "#{total} errors, see log above" unless total == 0
|
151
151
|
xml
|
152
152
|
end
|
153
153
|
|
@@ -158,7 +158,7 @@ module PDD
|
|
158
158
|
errors = xsd.validate(Nokogiri::XML(xml)).map(&:message)
|
159
159
|
errors.each { |e| PDD.log.error e }
|
160
160
|
PDD.log.error(xml) unless errors.empty?
|
161
|
-
|
161
|
+
raise SchemaError, errors.join('; ') unless errors.empty?
|
162
162
|
xml
|
163
163
|
end
|
164
164
|
end
|
data/lib/pdd/rule/duplicates.rb
CHANGED
@@ -33,15 +33,16 @@ module PDD
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def errors
|
36
|
-
@xml
|
36
|
+
@xml
|
37
|
+
.xpath('//puzzle')
|
37
38
|
.group_by { |p| p.xpath('body/text()').to_s }
|
38
39
|
.map do |_, puzzles|
|
39
40
|
next nil if puzzles.count <= @max
|
40
41
|
"there are #{puzzles.count} duplicate(s) of the same puzzle: " +
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
puzzles.map do |p|
|
43
|
+
"#{p.xpath('file/text()')}:#{p.xpath('lines/text()')}"
|
44
|
+
end.join(', ') +
|
45
|
+
", while maximum #{@max} duplicate is allowed"
|
45
46
|
end.compact
|
46
47
|
end
|
47
48
|
end
|
data/lib/pdd/rule/roles.rb
CHANGED
@@ -38,13 +38,13 @@ module PDD
|
|
38
38
|
role = p.xpath('role/text()').to_s
|
39
39
|
next nil if @roles.include?(role)
|
40
40
|
"puzzle #{p.xpath('file/text()')}:#{p.xpath('lines/text()')}" +
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
41
|
+
if role.empty?
|
42
|
+
" doesn't define any role"\
|
43
|
+
", while one of these roles is required: #{@roles}"
|
44
|
+
else
|
45
|
+
" defines role #{role}"\
|
46
|
+
", while only these roles are allowed: #{@roles}"
|
47
|
+
end
|
48
48
|
end.compact
|
49
49
|
end
|
50
50
|
end
|
data/lib/pdd/source.rb
CHANGED
@@ -38,7 +38,7 @@ module PDD
|
|
38
38
|
# Fetch all puzzles.
|
39
39
|
def puzzles
|
40
40
|
PDD.log.info "reading #{@path}..."
|
41
|
-
re =
|
41
|
+
re = %r{(.*(?:^|\s))@todo\s+#([\w\-\.:/]+)\s+(.+)}
|
42
42
|
puzzles = []
|
43
43
|
lines = File.readlines(@file)
|
44
44
|
lines.each_with_index do |line, idx|
|
@@ -51,8 +51,8 @@ module PDD
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
lines.each_with_index do |line, idx|
|
54
|
-
|
55
|
-
if /.*(^|\s)@todo\s+[^#]
|
54
|
+
raise Error, "@todo found, but puzzle can't be parsed in line ##{idx}" \
|
55
|
+
if line =~ /.*(^|\s)@todo\s+[^#]/
|
56
56
|
end
|
57
57
|
puzzles
|
58
58
|
end
|
@@ -76,9 +76,9 @@ module PDD
|
|
76
76
|
|
77
77
|
# Parse a marker.
|
78
78
|
def marker(text)
|
79
|
-
re =
|
79
|
+
re = %r{([\w\d\-\.]+)(?::(\d+)(?:(m|h)[a-z]*)?)?(?:/([A-Z]+))?}
|
80
80
|
match = re.match(text)
|
81
|
-
|
81
|
+
raise "invalid puzzle marker: #{text}" if match.nil?
|
82
82
|
{
|
83
83
|
ticket: match[1],
|
84
84
|
estimate: minutes(match[2], match[3]),
|
@@ -96,12 +96,12 @@ module PDD
|
|
96
96
|
# Fetch puzzle tail (all lines after the first one)
|
97
97
|
def tail(lines, prefix)
|
98
98
|
lines
|
99
|
-
.take_while { |
|
100
|
-
.map { |
|
101
|
-
.take_while { |
|
102
|
-
.each { |
|
103
|
-
.each { |
|
104
|
-
.map { |
|
99
|
+
.take_while { |t| t.start_with?(prefix) }
|
100
|
+
.map { |t| t[prefix.length, t.length] }
|
101
|
+
.take_while { |t| t =~ /^[ a-zA-Z0-9]/ }
|
102
|
+
.each { |t| raise Error, 'Space expected' unless t.start_with?(' ') }
|
103
|
+
.each { |t| raise Error, 'Too many spaces' if t =~ /^\s{2,}/ }
|
104
|
+
.map { |t| t[1, t.length] }
|
105
105
|
end
|
106
106
|
|
107
107
|
# Git information at the line
|
data/lib/pdd/sources.rb
CHANGED
data/lib/pdd/version.rb
CHANGED
data/pdd.gemspec
CHANGED
@@ -41,19 +41,19 @@ Gem::Specification.new do |s|
|
|
41
41
|
s.email = 'yegor@teamed.io'
|
42
42
|
s.homepage = 'http://github.com/teamed/pdd'
|
43
43
|
s.files = `git ls-files`.split($RS)
|
44
|
-
s.executables = s.files.grep(
|
45
|
-
s.test_files = s.files.grep(
|
44
|
+
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
45
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
46
46
|
s.rdoc_options = ['--charset=UTF-8']
|
47
47
|
s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
|
48
|
-
s.add_runtime_dependency 'nokogiri', '1.6
|
49
|
-
s.add_runtime_dependency 'ruby-filemagic', '0.7
|
50
|
-
s.add_runtime_dependency 'slop', '3.6
|
51
|
-
s.
|
48
|
+
s.add_runtime_dependency 'nokogiri', '~>1.6'
|
49
|
+
s.add_runtime_dependency 'ruby-filemagic', '~>0.7'
|
50
|
+
s.add_runtime_dependency 'slop', '~>3.6'
|
51
|
+
s.add_development_dependency 'rake', '10.5.0'
|
52
52
|
s.add_development_dependency 'coveralls', '0.7.2'
|
53
53
|
s.add_development_dependency 'rdoc', '4.2.0'
|
54
54
|
s.add_development_dependency 'cucumber', '1.3.17'
|
55
55
|
s.add_development_dependency 'minitest', '5.5.0'
|
56
|
-
s.add_development_dependency 'rubocop', '0.
|
57
|
-
s.add_development_dependency 'rubocop-rspec', '1.
|
56
|
+
s.add_development_dependency 'rubocop', '0.41.2'
|
57
|
+
s.add_development_dependency 'rubocop-rspec', '1.5.1'
|
58
58
|
s.add_development_dependency 'rspec-rails', '3.1.0'
|
59
59
|
end
|
data/test/test_pdd.rb
CHANGED
@@ -63,7 +63,7 @@ class TestPDD < Minitest::Test
|
|
63
63
|
skip if Gem.win_platform?
|
64
64
|
Dir.mktmpdir 'test' do |dir|
|
65
65
|
opts = opts(['-v', '-s', dir])
|
66
|
-
|
66
|
+
raise unless system("
|
67
67
|
set -e
|
68
68
|
cd '#{dir}'
|
69
69
|
git init .
|
@@ -100,7 +100,7 @@ class TestPDD < Minitest::Test
|
|
100
100
|
|
101
101
|
def matches(xml, xpaths)
|
102
102
|
xpaths.each do |xpath|
|
103
|
-
|
103
|
+
raise "doesn't match '#{xpath}': #{xml}" unless xml.xpath(xpath).size == 1
|
104
104
|
end
|
105
105
|
end
|
106
106
|
end
|
data/test/test_source.rb
CHANGED
@@ -90,7 +90,7 @@ class TestSource < Minitest::Test
|
|
90
90
|
skip if Gem.win_platform?
|
91
91
|
Dir.mktmpdir 'test' do |dir|
|
92
92
|
file = File.join(dir, 'xx.txt')
|
93
|
-
File.write(file,
|
93
|
+
File.write(file, ' * @todo #44 this is a broken unicode: ' + 0x92.chr)
|
94
94
|
assert_raises PDD::Error do
|
95
95
|
PDD::VerboseSource.new(file, PDD::Source.new(file, 'xx')).puzzles
|
96
96
|
end
|
@@ -117,7 +117,7 @@ class TestSource < Minitest::Test
|
|
117
117
|
def test_reads_git_author
|
118
118
|
skip if Gem.win_platform?
|
119
119
|
Dir.mktmpdir 'test' do |dir|
|
120
|
-
|
120
|
+
raise unless system("
|
121
121
|
set -e
|
122
122
|
cd '#{dir}'
|
123
123
|
git init .
|
metadata
CHANGED
@@ -1,71 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pdd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.16'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yegor Bugayenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.6
|
19
|
+
version: '1.6'
|
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: 1.6
|
26
|
+
version: '1.6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: ruby-filemagic
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.7
|
33
|
+
version: '0.7'
|
34
34
|
type: :runtime
|
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.7
|
40
|
+
version: '0.7'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: slop
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 3.6
|
47
|
+
version: '3.6'
|
48
48
|
type: :runtime
|
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: 3.6
|
54
|
+
version: '3.6'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 10.
|
62
|
-
type: :
|
61
|
+
version: 10.5.0
|
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: 10.
|
68
|
+
version: 10.5.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: coveralls
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,28 +128,28 @@ dependencies:
|
|
128
128
|
requirements:
|
129
129
|
- - '='
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: 0.
|
131
|
+
version: 0.41.2
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - '='
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: 0.
|
138
|
+
version: 0.41.2
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: rubocop-rspec
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - '='
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: 1.
|
145
|
+
version: 1.5.1
|
146
146
|
type: :development
|
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: 1.
|
152
|
+
version: 1.5.1
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: rspec-rails
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|