cuketagger 1.4 → 1.5
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.
- data/lib/cuketagger/tag_formatter.rb +7 -21
- data/lib/cuketagger/tagger.rb +56 -54
- data/lib/cuketagger/version.rb +1 -1
- data/lib/cuketagger.rb +4 -3
- metadata +20 -5
@@ -2,34 +2,20 @@ module CukeTagger
|
|
2
2
|
module TagFormatter
|
3
3
|
attr_accessor :tagger
|
4
4
|
|
5
|
-
def
|
6
|
-
@
|
5
|
+
def feature(feature)
|
6
|
+
@tagger.process @uri, feature
|
7
7
|
super
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
@
|
12
|
-
super
|
13
|
-
end
|
14
|
-
|
15
|
-
def after_feature_element(element)
|
16
|
-
@__current_element = nil
|
10
|
+
def scenario_outline(scenario_outline)
|
11
|
+
@tagger.process @uri, scenario_outline
|
17
12
|
super
|
18
13
|
end
|
19
14
|
|
20
|
-
def
|
21
|
-
@tagger.process
|
15
|
+
def scenario(scenario)
|
16
|
+
@tagger.process @uri, scenario
|
17
|
+
super
|
22
18
|
end
|
23
19
|
|
24
|
-
private
|
25
|
-
|
26
|
-
def record_tag_occurrences(*args)
|
27
|
-
# override to avoid error if options[:include_tags] is nil
|
28
|
-
end
|
29
|
-
|
30
|
-
def print_summary(*args)
|
31
|
-
# override
|
32
|
-
end
|
33
|
-
|
34
20
|
end
|
35
21
|
end
|
data/lib/cuketagger/tagger.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require "cucumber/cli/options"
|
2
|
-
|
3
1
|
module CukeTagger
|
4
2
|
class Tagger
|
5
3
|
USAGE = "#{File.basename $0} [-v|--version] [-f|--force] [add|remove|replace]:TAG[:REPLACEMENT] [FILE[:LINE]]+"
|
@@ -12,22 +10,20 @@ module CukeTagger
|
|
12
10
|
abort(USAGE) if args.empty? || args.first =~ /^(-h|--help)$/
|
13
11
|
CukeTagger.log :args, args
|
14
12
|
|
15
|
-
|
13
|
+
force = false
|
16
14
|
|
17
15
|
args.each do |arg|
|
18
16
|
case arg
|
19
17
|
when /^-v|--version$/
|
20
18
|
puts CukeTagger::Version
|
21
19
|
when /^(.+?\.feature)((:\d+)*)$/
|
22
|
-
|
20
|
+
add_feature $1, $2.to_s
|
23
21
|
when /^(add|remove):(.+?)$/
|
24
22
|
alterations << [$1.to_sym, $2]
|
25
23
|
when /^(replace):(.+?):(.+)$/
|
26
24
|
alterations << [$1.to_sym, [$2, $3]]
|
27
25
|
when /^(-f|--force)$/
|
28
|
-
|
29
|
-
cuke_args << "--no-source"
|
30
|
-
Term::ANSIColor.coloring = false
|
26
|
+
force = true
|
31
27
|
else
|
32
28
|
abort(USAGE)
|
33
29
|
end
|
@@ -37,83 +33,89 @@ module CukeTagger
|
|
37
33
|
|
38
34
|
CukeTagger.log :alterations, alterations
|
39
35
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
formatter = Cucumber::Formatter::Pretty.new(runtime, $stdout, configuration.instance_variable_get("@options"))
|
44
|
-
formatter.extend(TagFormatter)
|
45
|
-
formatter.tagger = self
|
36
|
+
files = features_to_change.map { |file, line| file }.uniq
|
37
|
+
files.each { |file| parse file, force }
|
38
|
+
end
|
46
39
|
|
47
|
-
|
48
|
-
|
40
|
+
def parse(file, write)
|
41
|
+
content = File.read(file)
|
42
|
+
|
43
|
+
io = write ? File.open(file, "w") : $stdout
|
44
|
+
begin
|
45
|
+
pretty_formatter = Gherkin::Formatter::PrettyFormatter.new(io,
|
46
|
+
!(io == $stdout && $stdout.tty?), # monochrome
|
47
|
+
false) # executing
|
48
|
+
pretty_formatter.extend TagFormatter
|
49
|
+
pretty_formatter.tagger = self
|
50
|
+
|
51
|
+
parser = Gherkin::Parser::Parser.new(pretty_formatter, true)
|
52
|
+
parser.parse content, file, 0
|
53
|
+
ensure
|
54
|
+
io.close unless io == $stdout
|
55
|
+
end
|
49
56
|
end
|
50
57
|
|
51
|
-
def process(
|
58
|
+
def process(uri, element)
|
52
59
|
CukeTagger.log :process, :element => element.class
|
53
|
-
return unless should_alter?(
|
60
|
+
return unless should_alter?(uri, element)
|
61
|
+
|
62
|
+
@uri = uri
|
54
63
|
|
55
64
|
alterations.each do |op, tag_name|
|
56
65
|
case op
|
57
66
|
when :add
|
58
|
-
|
67
|
+
push_tag element, "@#{tag_name}"
|
59
68
|
when :remove
|
60
|
-
|
69
|
+
remove_tag element, "@#{tag_name}"
|
61
70
|
when :replace
|
62
|
-
|
63
|
-
if idx.nil?
|
64
|
-
$stderr.puts "expected #{tag_name.first.inspect} at #{file_and_line_for(feature, element).join(":")}, skipping"
|
65
|
-
else
|
66
|
-
tag_names[idx] = "@#{tag_name.last}"
|
67
|
-
end
|
71
|
+
replace_tag element, tag_name
|
68
72
|
end
|
69
73
|
end
|
70
74
|
end
|
71
75
|
|
72
|
-
def
|
73
|
-
|
74
|
-
|
75
|
-
CukeTagger.log(:file_and_line => fl, :features_to_change => features_to_change)
|
76
|
+
def push_tag(element, tag_name)
|
77
|
+
element.tags << Gherkin::Formatter::Model::Tag.new(tag_name, element.line)
|
78
|
+
end
|
76
79
|
|
77
|
-
|
80
|
+
def remove_tag(element, tag_name)
|
81
|
+
element.tags.delete_if { |tag| tag.name == tag_name }
|
78
82
|
end
|
79
83
|
|
80
|
-
|
84
|
+
def replace_tag(element, tag_name)
|
85
|
+
to_replace, replacement = tag_name
|
86
|
+
to_replace = "@#{to_replace}"
|
87
|
+
replacement = "@#{replacement}"
|
81
88
|
|
82
|
-
|
83
|
-
line = if element.respond_to?(:line)
|
84
|
-
element.line
|
85
|
-
elsif element.kind_of?(Cucumber::Ast::ScenarioOutline)
|
86
|
-
element.instance_variable_get("@line")
|
87
|
-
else
|
88
|
-
0
|
89
|
-
end
|
89
|
+
idx = element.tags.find_index { |tag| tag.name == to_replace }
|
90
90
|
|
91
|
-
|
91
|
+
if idx.nil?
|
92
|
+
$stderr.puts "expected #{to_replace.inspect} at #{@uri}:#{element.line}, skipping"
|
93
|
+
else
|
94
|
+
element.tags[idx] = Gherkin::Formatter::Model::Tag.new(replacement, element.line)
|
95
|
+
end
|
92
96
|
end
|
93
97
|
|
94
|
-
def
|
95
|
-
|
98
|
+
def should_alter?(uri, element)
|
99
|
+
CukeTagger.log(:file_and_line => [uri, element.line], :features_to_change => features_to_change)
|
96
100
|
|
101
|
+
features_to_change.any? do |file, line|
|
102
|
+
file == uri && (element.line == line || (line.nil? && element.kind_of?(Gherkin::Formatter::Model::Feature)))
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
private
|
107
|
+
|
108
|
+
def add_feature(path, lines)
|
97
109
|
lines = lines.split(":")
|
98
|
-
lines.delete
|
110
|
+
lines.delete ""
|
99
111
|
|
100
112
|
if lines.empty?
|
101
|
-
features_to_change << [path,
|
113
|
+
features_to_change << [path, nil]
|
102
114
|
else
|
103
115
|
lines.each do |line|
|
104
116
|
features_to_change << [path, Integer(line)]
|
105
117
|
end
|
106
118
|
end
|
107
|
-
|
108
|
-
features.add_feature ff
|
109
|
-
end
|
110
|
-
|
111
|
-
def runtime
|
112
|
-
@runtime ||= Cucumber::Runtime.new
|
113
|
-
end
|
114
|
-
|
115
|
-
def features
|
116
|
-
@features ||= Cucumber::Ast::Features.new
|
117
119
|
end
|
118
120
|
|
119
121
|
def alterations
|
data/lib/cuketagger/version.rb
CHANGED
data/lib/cuketagger.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
$:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
2
2
|
|
3
|
-
require "cucumber"
|
4
|
-
require "cucumber/feature_file"
|
5
|
-
require "cucumber/formatter/pretty"
|
6
3
|
require "set"
|
7
4
|
|
5
|
+
require "gherkin"
|
6
|
+
require "gherkin/formatter/pretty_formatter"
|
7
|
+
require "stringio"
|
8
|
+
|
8
9
|
require "cuketagger/version"
|
9
10
|
require "cuketagger/tag_formatter"
|
10
11
|
require "cuketagger/tagger"
|
metadata
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cuketagger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
4
|
+
hash: 5
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 5
|
9
|
+
version: "1.5"
|
6
10
|
platform: ruby
|
7
11
|
authors:
|
8
12
|
- Jari
|
@@ -11,7 +15,7 @@ autorequire:
|
|
11
15
|
bindir: bin
|
12
16
|
cert_chain: []
|
13
17
|
|
14
|
-
date: 2011-
|
18
|
+
date: 2011-04-18 00:00:00 +02:00
|
15
19
|
default_executable:
|
16
20
|
dependencies:
|
17
21
|
- !ruby/object:Gem::Dependency
|
@@ -22,6 +26,11 @@ dependencies:
|
|
22
26
|
requirements:
|
23
27
|
- - ">="
|
24
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 63
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 9
|
33
|
+
- 2
|
25
34
|
version: 0.9.2
|
26
35
|
type: :runtime
|
27
36
|
version_requirements: *id001
|
@@ -42,7 +51,7 @@ files:
|
|
42
51
|
- lib/cuketagger/version.rb
|
43
52
|
- lib/cuketagger.rb
|
44
53
|
- bin/cuketagger
|
45
|
-
has_rdoc:
|
54
|
+
has_rdoc: false
|
46
55
|
homepage: http://cukes.info
|
47
56
|
licenses: []
|
48
57
|
|
@@ -56,17 +65,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
56
65
|
requirements:
|
57
66
|
- - ">="
|
58
67
|
- !ruby/object:Gem::Version
|
68
|
+
hash: 3
|
69
|
+
segments:
|
70
|
+
- 0
|
59
71
|
version: "0"
|
60
72
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
73
|
none: false
|
62
74
|
requirements:
|
63
75
|
- - ">="
|
64
76
|
- !ruby/object:Gem::Version
|
77
|
+
hash: 3
|
78
|
+
segments:
|
79
|
+
- 0
|
65
80
|
version: "0"
|
66
81
|
requirements: []
|
67
82
|
|
68
83
|
rubyforge_project:
|
69
|
-
rubygems_version: 1.
|
84
|
+
rubygems_version: 1.3.7
|
70
85
|
signing_key:
|
71
86
|
specification_version: 3
|
72
87
|
summary: batch tagging of cucumber features and scenarios
|