pdd 0.10 → 0.11
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/pdd +33 -5
- data/features/applies_rules.feature +10 -0
- data/lib/pdd.rb +4 -2
- data/lib/pdd/rule/duplicates.rb +1 -1
- data/lib/pdd/rule/estimates.rb +2 -2
- data/lib/pdd/rule/roles.rb +53 -0
- data/lib/pdd/rule/text.rb +1 -1
- data/lib/pdd/version.rb +1 -1
- data/test/test_roles.rb +59 -0
- metadata +5 -2
data/bin/pdd
CHANGED
@@ -33,11 +33,39 @@ opts = Slop.parse(ARGV, strict: true, help: true) do
|
|
33
33
|
banner "Usage (#{PDD::VERSION}): pdd [options]"
|
34
34
|
on 'v', 'verbose', 'Enable verbose mode'
|
35
35
|
on 'version', 'Show current version'
|
36
|
-
on
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
36
|
+
on(
|
37
|
+
's',
|
38
|
+
'source',
|
39
|
+
'Source directory to parse',
|
40
|
+
argument: :required
|
41
|
+
)
|
42
|
+
on(
|
43
|
+
'f',
|
44
|
+
'file',
|
45
|
+
'File to save XML into',
|
46
|
+
argument: :required
|
47
|
+
)
|
48
|
+
on(
|
49
|
+
'e',
|
50
|
+
'exclude',
|
51
|
+
'Glob pattern to exclude',
|
52
|
+
as: Array,
|
53
|
+
argument: :required
|
54
|
+
)
|
55
|
+
on(
|
56
|
+
't',
|
57
|
+
'format',
|
58
|
+
'Format to use (xml|html)',
|
59
|
+
argument: :required
|
60
|
+
)
|
61
|
+
on(
|
62
|
+
'r',
|
63
|
+
'rule',
|
64
|
+
'Format to use (xml|html)',
|
65
|
+
argument: :required,
|
66
|
+
as: Array,
|
67
|
+
limit: 1
|
68
|
+
)
|
41
69
|
end
|
42
70
|
|
43
71
|
fail '-f is mandatory when using -v' if opts.verbose? && !opts.file?
|
@@ -29,3 +29,13 @@ Feature: Applies Post-Parsing Rules
|
|
29
29
|
When I run bin/pdd with ""
|
30
30
|
Then Exit code is not zero
|
31
31
|
Then Stdout contains "there are 2 duplicate"
|
32
|
+
|
33
|
+
Scenario: Throwing exception on duplicates
|
34
|
+
Given I have a "Sample.java" file with content:
|
35
|
+
"""
|
36
|
+
@todo #13/DEV:15min Some text first
|
37
|
+
@todo #13/TEST:15min The text second
|
38
|
+
"""
|
39
|
+
When I run bin/pdd with "--rule=available-roles:DEV,IMP"
|
40
|
+
Then Exit code is not zero
|
41
|
+
Then Stdout contains "defines role TEST"
|
data/lib/pdd.rb
CHANGED
@@ -26,6 +26,7 @@ require 'pdd/version'
|
|
26
26
|
require 'pdd/rule/estimates'
|
27
27
|
require 'pdd/rule/text'
|
28
28
|
require 'pdd/rule/duplicates'
|
29
|
+
require 'pdd/rule/roles'
|
29
30
|
require 'nokogiri'
|
30
31
|
require 'logger'
|
31
32
|
require 'time'
|
@@ -47,7 +48,8 @@ module PDD
|
|
47
48
|
'min-estimate' => PDD::Rule::Estimate::Min,
|
48
49
|
'max-estimate' => PDD::Rule::Estimate::Max,
|
49
50
|
'min-words' => PDD::Rule::Text::MinWords,
|
50
|
-
'max-duplicates' => PDD::Rule::MaxDuplicates
|
51
|
+
'max-duplicates' => PDD::Rule::MaxDuplicates,
|
52
|
+
'available-roles' => PDD::Rule::Roles::Available
|
51
53
|
}
|
52
54
|
|
53
55
|
# Get logger.
|
@@ -139,7 +141,7 @@ module PDD
|
|
139
141
|
name, value = r.split(':')
|
140
142
|
rule = RULES[name]
|
141
143
|
fail "rule '#{name}' doesn't exist" if rule.nil?
|
142
|
-
rule.new(doc, value
|
144
|
+
rule.new(doc, value).errors.each do |e|
|
143
145
|
PDD.log.error e
|
144
146
|
total += 1
|
145
147
|
end
|
data/lib/pdd/rule/duplicates.rb
CHANGED
data/lib/pdd/rule/estimates.rb
CHANGED
@@ -30,7 +30,7 @@ module PDD
|
|
30
30
|
# +xml+:: XML with puzzles
|
31
31
|
def initialize(xml, min)
|
32
32
|
@xml = xml
|
33
|
-
@min = min
|
33
|
+
@min = min.to_i
|
34
34
|
end
|
35
35
|
|
36
36
|
def errors
|
@@ -48,7 +48,7 @@ module PDD
|
|
48
48
|
# +xml+:: XML with puzzles
|
49
49
|
def initialize(xml, min)
|
50
50
|
@xml = xml
|
51
|
-
@min = min
|
51
|
+
@min = min.to_i
|
52
52
|
end
|
53
53
|
|
54
54
|
def errors
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# Copyright (c) 2014 TechnoPark Corp.
|
4
|
+
# Copyright (c) 2014 Yegor Bugayenko
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the 'Software'), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in all
|
14
|
+
# copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
# SOFTWARE.
|
23
|
+
|
24
|
+
module PDD
|
25
|
+
module Rule
|
26
|
+
module Roles
|
27
|
+
# Rule for available roles checking.
|
28
|
+
class Available
|
29
|
+
# Ctor.
|
30
|
+
# +xml+:: XML with puzzles
|
31
|
+
def initialize(xml, roles)
|
32
|
+
@xml = xml
|
33
|
+
@roles = roles.split(',')
|
34
|
+
end
|
35
|
+
|
36
|
+
def errors
|
37
|
+
@xml.xpath('//puzzle').map do |p|
|
38
|
+
role = p.xpath('role/text()').to_s
|
39
|
+
next nil if @roles.include?(role)
|
40
|
+
"puzzle #{p.xpath('file/text()')}:#{p.xpath('lines/text()')}" +
|
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
|
+
end.compact
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/pdd/rule/text.rb
CHANGED
data/lib/pdd/version.rb
CHANGED
data/test/test_roles.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# Copyright (c) 2014 TechnoPark Corp.
|
4
|
+
# Copyright (c) 2014 Yegor Bugayenko
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the 'Software'), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in all
|
14
|
+
# copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
# SOFTWARE.
|
23
|
+
|
24
|
+
require 'minitest/autorun'
|
25
|
+
require 'nokogiri'
|
26
|
+
require 'pdd/rule/roles'
|
27
|
+
|
28
|
+
# PDD::Rule::Role module tests.
|
29
|
+
# Author:: Yegor Bugayenko (yegor@teamed.io)
|
30
|
+
# Copyright:: Copyright (c) 2014 Yegor Bugayenko
|
31
|
+
# License:: MIT
|
32
|
+
class TestRoles < Minitest::Test
|
33
|
+
def test_incorrect_role
|
34
|
+
rule = PDD::Rule::Roles::Available.new(
|
35
|
+
Nokogiri::XML::Document.parse(
|
36
|
+
'<puzzles><puzzle><role>D</role></puzzle></puzzles>'
|
37
|
+
), 'A,B,C'
|
38
|
+
)
|
39
|
+
assert !rule.errors.empty?, 'why it is empty?'
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_correct_role
|
43
|
+
rule = PDD::Rule::Roles::Available.new(
|
44
|
+
Nokogiri::XML::Document.parse(
|
45
|
+
'<puzzles><puzzle><role>F</role></puzzle></puzzles>'
|
46
|
+
), 'F,E,G'
|
47
|
+
)
|
48
|
+
assert rule.errors.empty?, 'why it is not empty?'
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_empty_role
|
52
|
+
rule = PDD::Rule::Roles::Available.new(
|
53
|
+
Nokogiri::XML::Document.parse(
|
54
|
+
'<puzzles><puzzle></puzzle></puzzles>'
|
55
|
+
), 'T,R,L'
|
56
|
+
)
|
57
|
+
assert !rule.errors.empty?, 'why it is empty?'
|
58
|
+
end
|
59
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pdd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.11'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-12-
|
12
|
+
date: 2014-12-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -224,6 +224,7 @@ files:
|
|
224
224
|
- lib/pdd/puzzle.rb
|
225
225
|
- lib/pdd/rule/duplicates.rb
|
226
226
|
- lib/pdd/rule/estimates.rb
|
227
|
+
- lib/pdd/rule/roles.rb
|
227
228
|
- lib/pdd/rule/text.rb
|
228
229
|
- lib/pdd/source.rb
|
229
230
|
- lib/pdd/sources.rb
|
@@ -233,6 +234,7 @@ files:
|
|
233
234
|
- test/test_duplicates.rb
|
234
235
|
- test/test_estimates.rb
|
235
236
|
- test/test_pdd.rb
|
237
|
+
- test/test_roles.rb
|
236
238
|
- test/test_source.rb
|
237
239
|
- test/test_sources.rb
|
238
240
|
- test/test_text.rb
|
@@ -277,6 +279,7 @@ test_files:
|
|
277
279
|
- test/test_duplicates.rb
|
278
280
|
- test/test_estimates.rb
|
279
281
|
- test/test_pdd.rb
|
282
|
+
- test/test_roles.rb
|
280
283
|
- test/test_source.rb
|
281
284
|
- test/test_sources.rb
|
282
285
|
- test/test_text.rb
|