jarib-cuketagger 0.2

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.
Files changed (2) hide show
  1. data/bin/cuketagger +124 -0
  2. metadata +64 -0
data/bin/cuketagger ADDED
@@ -0,0 +1,124 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require "cucumber"
5
+ require "cucumber/feature_file"
6
+ require "cucumber/formatter/pretty"
7
+ require "set"
8
+
9
+ class Tagger
10
+ USAGE = "#{File.basename $0} [-f|--force] [add|remove]:TAG [FILE[:LINE]]+"
11
+
12
+ def self.execute(args)
13
+ new.execute(args)
14
+ end
15
+
16
+ def execute(args)
17
+ abort(USAGE) if args.empty? || args.first =~ /^(-h|--help)$/
18
+ opts = {:dry_run => true, :source => true}
19
+
20
+ # TODO: use optparse?
21
+ args.each do |arg|
22
+ case arg
23
+ when /^(.+?\.feature)(:\d+)?$/
24
+ add_feature($1, $2)
25
+ when /^(add|remove):(.+?)$/
26
+ alterations << added = [$1.to_sym, $2]
27
+ when /^(-f|--force)$/
28
+ opts[:autoformat] = "."
29
+ opts[:source] = false
30
+ Term::ANSIColor.coloring = false
31
+ else
32
+ abort(USAGE)
33
+ end
34
+ end
35
+
36
+ features.accept TagVisitor.new(self, step_mother, $stdout, opts)
37
+ end
38
+
39
+ def process(feature, element, tag_names)
40
+ return unless should_alter?(feature, element)
41
+
42
+ alterations.each do |op, tag_name|
43
+ case op
44
+ when :add
45
+ tag_names.push tag_name
46
+ when :remove
47
+ tag_names.delete tag_name
48
+ end
49
+ end
50
+ end
51
+
52
+ def should_alter?(feature, element)
53
+ line = element ? element.line : 0
54
+ success = features_to_change.include? [feature.file, line]
55
+
56
+ if $DEBUG
57
+ p :feature_class => feature.class, :element_class => element.class, :line => line, :success => success
58
+ p :features_to_change => features_to_change
59
+ end
60
+
61
+ success
62
+ end
63
+
64
+ private
65
+
66
+ def add_feature(path, line)
67
+ ff = Cucumber::FeatureFile.new(path).parse(step_mother, {})
68
+ features_to_change << [path, line.to_s[1,line.length].to_i]
69
+ features.add_feature ff
70
+ end
71
+
72
+ def step_mother
73
+ @step_mother ||= Cucumber::StepMother.new
74
+ end
75
+
76
+ def features
77
+ @features ||= Cucumber::Ast::Features.new
78
+ end
79
+
80
+ def alterations
81
+ @alterations ||= Set.new
82
+ end
83
+
84
+ def features_to_change
85
+ @features_to_change ||= Set.new
86
+ end
87
+
88
+ end
89
+
90
+ class TagVisitor < Cucumber::Formatter::Pretty
91
+
92
+ def initialize(tagger, step_mother, io, options)
93
+ @tagger = tagger
94
+ super(step_mother, io, options)
95
+ end
96
+
97
+
98
+ def visit_feature(feature)
99
+ @current_feature = feature
100
+ super
101
+ end
102
+
103
+ def visit_feature_element(element)
104
+ @current_element = element
105
+ super
106
+ @current_element = nil
107
+ end
108
+
109
+ def visit_tags(tags)
110
+ @tagger.process(@current_feature, @current_element, tags.instance_variable_get("@tag_names"))
111
+ super
112
+ end
113
+
114
+ private
115
+
116
+ def record_tag_occurrences(*args)
117
+ # override to avoid error if options[:include_tags] is nil
118
+ end
119
+
120
+ end
121
+
122
+ if __FILE__ == $0
123
+ Tagger.execute(ARGV)
124
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jarib-cuketagger
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.2"
5
+ platform: ruby
6
+ authors:
7
+ - Jari
8
+ - Bakken
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2009-08-21 00:00:00 -07:00
14
+ default_executable: cuketagger
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: cucumber
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 0.3.96
25
+ version:
26
+ description: batch tagging of cucumber features and scenarios
27
+ email: jari.bakken@gmail.com
28
+ executables:
29
+ - cuketagger
30
+ extensions: []
31
+
32
+ extra_rdoc_files: []
33
+
34
+ files:
35
+ - bin/cuketagger
36
+ has_rdoc: false
37
+ homepage: http://cukes.info
38
+ licenses:
39
+ post_install_message:
40
+ rdoc_options: []
41
+
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: "0"
49
+ version:
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: "0"
55
+ version:
56
+ requirements: []
57
+
58
+ rubyforge_project:
59
+ rubygems_version: 1.3.5
60
+ signing_key:
61
+ specification_version: 3
62
+ summary: batch tagging of cucumber features and scenarios
63
+ test_files: []
64
+