jarib-cuketagger 0.3 → 0.4

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/README.markdown ADDED
@@ -0,0 +1,8 @@
1
+
2
+ <pre><code>
3
+ $ sudo gem install jarib-cuketagger
4
+ $ cuketagger add:wip features/foo.feature:6 features/bar.feature
5
+ // check that the output is as expected
6
+ $ cuketagger --force add:wip features/foo.feature:6 features/bar.feature
7
+ // --force rewrites your files
8
+ </code></pre>
data/Rakefile ADDED
@@ -0,0 +1,43 @@
1
+ # encoding: utf-8
2
+
3
+ require "rake/clean"
4
+ require "rake/gempackagetask"
5
+ require "lib/cuketagger/version"
6
+ CLEAN.include %w[pkg]
7
+
8
+ GEM_NAME = "cuketagger"
9
+ GEM_VERSION = CukeTagger::Version
10
+
11
+ spec = Gem::Specification.new do |s|
12
+ s.name = GEM_NAME
13
+ s.version = GEM_VERSION
14
+ s.has_rdoc = false
15
+ s.summary = "batch tagging of cucumber features and scenarios"
16
+ s.description = s.summary
17
+ s.authors = %w[Jari Bakken]
18
+ s.email = "jari.bakken@gmail.com"
19
+ s.homepage = "http://cukes.info"
20
+ s.files = %w[Rakefile README.markdown] + Dir['lib/**/*']
21
+ s.bindir = 'bin'
22
+ s.executables = Dir['bin/*'].map { |f| File.basename(f) }
23
+ s.add_runtime_dependency 'cucumber', '>= 0.3.96'
24
+ end
25
+
26
+ Rake::GemPackageTask.new(spec) do |pkg|
27
+ pkg.gem_spec = spec
28
+ end
29
+
30
+ namespace :gem do
31
+ desc "install the gem locally"
32
+ task :install => [:package] do
33
+ sh %{sudo #{Gem.ruby} -S gem install pkg/#{GEM_NAME}-#{GEM_VERSION}}
34
+ end
35
+
36
+ desc "Create a .gemspec file"
37
+ task :spec do
38
+ file = "#{GEM_NAME.downcase}.gemspec"
39
+ File.unlink file if ::File.exists?(file)
40
+ File.open(file, "w+") { |f| f << spec.to_ruby }
41
+ end
42
+ end
43
+
data/bin/cuketagger CHANGED
@@ -1,121 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
  # encoding: utf-8
3
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
- args.each do |arg|
21
- case arg
22
- when /^(.+?\.feature)(:\d+)?$/
23
- add_feature($1, $2)
24
- when /^(add|remove):(.+?)$/
25
- alterations << [$1.to_sym, $2]
26
- when /^(-f|--force)$/
27
- opts[:autoformat] = "."
28
- opts[:source] = false
29
- Term::ANSIColor.coloring = false
30
- else
31
- abort(USAGE)
32
- end
33
- end
34
-
35
- features.accept TagVisitor.new(self, step_mother, $stdout, opts)
36
- end
37
-
38
- def process(feature, element, tag_names)
39
- return unless should_alter?(feature, element)
40
-
41
- alterations.each do |op, tag_name|
42
- case op
43
- when :add
44
- tag_names.push tag_name
45
- when :remove
46
- tag_names.delete tag_name
47
- end
48
- end
49
- end
50
-
51
- def should_alter?(feature, element)
52
- line = element ? element.line : 0
53
- success = features_to_change.include? [feature.file, line]
54
-
55
- if $DEBUG
56
- p :feature_class => feature.class, :element_class => element.class, :line => line, :success => success
57
- p :features_to_change => features_to_change
58
- end
59
-
60
- success
61
- end
62
-
63
- private
64
-
65
- def add_feature(path, line)
66
- ff = Cucumber::FeatureFile.new(path).parse(step_mother, {})
67
- features_to_change << [path, line.to_s[1,line.length].to_i]
68
- features.add_feature ff
69
- end
70
-
71
- def step_mother
72
- @step_mother ||= Cucumber::StepMother.new
73
- end
74
-
75
- def features
76
- @features ||= Cucumber::Ast::Features.new
77
- end
78
-
79
- def alterations
80
- @alterations ||= Set.new
81
- end
82
-
83
- def features_to_change
84
- @features_to_change ||= Set.new
85
- end
86
-
87
- end
88
-
89
- class TagVisitor < Cucumber::Formatter::Pretty
90
-
91
- def initialize(tagger, step_mother, io, options)
92
- @tagger = tagger
93
- super(step_mother, io, options)
94
- end
95
-
96
-
97
- def visit_feature(feature)
98
- @current_feature = feature
99
- super
100
- end
101
-
102
- def visit_feature_element(element)
103
- @current_element = element
104
- super
105
- @current_element = nil
106
- end
107
-
108
- def visit_tags(tags)
109
- @tagger.process(@current_feature, @current_element, tags.instance_variable_get("@tag_names"))
110
- super
111
- end
112
-
113
- private
114
-
115
- def record_tag_occurrences(*args)
116
- # override to avoid error if options[:include_tags] is nil
117
- end
118
-
119
- end
120
-
121
- Tagger.execute(ARGV)
4
+ require "#{File.dirname(__FILE__)}/../lib/cuketagger"
5
+ CukeTagger::Tagger.execute(ARGV)
@@ -0,0 +1,28 @@
1
+ module CukeTagger
2
+ module TagVisitor
3
+ attr_accessor :tagger
4
+
5
+ def visit_feature(feature)
6
+ @current_feature = feature
7
+ super
8
+ end
9
+
10
+ def visit_feature_element(element)
11
+ @current_element = element
12
+ super
13
+ @current_element = nil
14
+ end
15
+
16
+ def visit_tags(tags)
17
+ @tagger.process(@current_feature, @current_element, tags.instance_variable_get("@tag_names"))
18
+ super
19
+ end
20
+
21
+ private
22
+
23
+ def record_tag_occurrences(*args)
24
+ # override to avoid error if options[:include_tags] is nil
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,87 @@
1
+ module CukeTagger
2
+ class Tagger
3
+ USAGE = "#{File.basename $0} [-v|--version] [-f|--force] [add|remove]:TAG [FILE[:LINE]]+"
4
+
5
+ def self.execute(args)
6
+ new.execute(args)
7
+ end
8
+
9
+ def execute(args)
10
+ abort(USAGE) if args.empty? || args.first =~ /^(-h|--help)$/
11
+ opts = {:dry_run => true, :source => true}
12
+
13
+ args.each do |arg|
14
+ case arg
15
+ when /^-v|--version$/
16
+ puts CukeTagger::Version
17
+ when /^(.+?\.feature)(:\d+)?$/
18
+ add_feature($1, $2.to_s)
19
+ when /^(add|remove):(.+?)$/
20
+ alterations << [$1.to_sym, $2]
21
+ when /^(-f|--force)$/
22
+ opts[:autoformat] = "."
23
+ opts[:source] = false
24
+ Term::ANSIColor.coloring = false
25
+ else
26
+ abort(USAGE)
27
+ end
28
+ end
29
+
30
+ formatter = Cucumber::Formatter::Pretty.new(step_mother, $stdout, opts)
31
+ formatter.extend(TagVisitor)
32
+ formatter.tagger = self
33
+
34
+ features.accept formatter
35
+ end
36
+
37
+ def process(feature, element, tag_names)
38
+ return unless should_alter?(feature, element)
39
+
40
+ alterations.each do |op, tag_name|
41
+ case op
42
+ when :add
43
+ tag_names.push tag_name
44
+ when :remove
45
+ tag_names.delete tag_name
46
+ end
47
+ end
48
+ end
49
+
50
+ def should_alter?(feature, element)
51
+ line = element ? element.line : 0
52
+ success = features_to_change.include? [feature.file, line]
53
+
54
+ if $DEBUG
55
+ p :feature_class => feature.class, :element_class => element.class, :line => line, :success => success
56
+ p :features_to_change => features_to_change
57
+ end
58
+
59
+ success
60
+ end
61
+
62
+ private
63
+
64
+ def add_feature(path, line)
65
+ ff = Cucumber::FeatureFile.new(path).parse(step_mother, {})
66
+ features_to_change << [path, line[1,line.length].to_i]
67
+ features.add_feature ff
68
+ end
69
+
70
+ def step_mother
71
+ @step_mother ||= Cucumber::StepMother.new
72
+ end
73
+
74
+ def features
75
+ @features ||= Cucumber::Ast::Features.new
76
+ end
77
+
78
+ def alterations
79
+ @alterations ||= Set.new
80
+ end
81
+
82
+ def features_to_change
83
+ @features_to_change ||= Set.new
84
+ end
85
+
86
+ end
87
+ end
@@ -0,0 +1,3 @@
1
+ module CukeTagger
2
+ Version = "0.4"
3
+ end
data/lib/cuketagger.rb ADDED
@@ -0,0 +1,12 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
2
+
3
+ require "cucumber"
4
+ require "cucumber/feature_file"
5
+ require "cucumber/formatter/pretty"
6
+ require "set"
7
+
8
+ require "cuketagger/version"
9
+ require "cuketagger/tag_visitor"
10
+ require "cuketagger/tagger"
11
+
12
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jarib-cuketagger
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.3"
4
+ version: "0.4"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jari
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-08-22 00:00:00 -07:00
13
+ date: 2009-08-23 00:00:00 -07:00
14
14
  default_executable: cuketagger
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -32,6 +32,13 @@ extensions: []
32
32
  extra_rdoc_files: []
33
33
 
34
34
  files:
35
+ - Rakefile
36
+ - README.markdown
37
+ - lib/cuketagger
38
+ - lib/cuketagger/tag_visitor.rb
39
+ - lib/cuketagger/tagger.rb
40
+ - lib/cuketagger/version.rb
41
+ - lib/cuketagger.rb
35
42
  - bin/cuketagger
36
43
  has_rdoc: false
37
44
  homepage: http://cukes.info