cuporter 0.3.10 → 0.3.12

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.
@@ -0,0 +1,32 @@
1
+ module Cuporter
2
+
3
+ def self.log_error(exception_obj, *messages)
4
+ ex = "\n\t#{exception_obj.class}: #{exception_obj.message}"
5
+ ex += "\n\t#{exception_obj.backtrace.join("\n\t")}"
6
+ Logging.error_logger.warn(messages.join(' ') + ex)
7
+ end
8
+
9
+ module Logging
10
+ attr_accessor :output_home
11
+
12
+ def error_logger
13
+ @error_logger ||= begin
14
+ require "logger"
15
+ logger = ::Logger.new(error_log_file)
16
+ logger.level = ::Logger::WARN
17
+ logger.formatter = proc { |severity, datetime, progname, msg|
18
+ "#{severity} #{datetime.strftime('%b-%d-%y %H:%M:%S')} #{msg}\n\n"
19
+ }
20
+ logger
21
+ end
22
+ end
23
+
24
+ def error_log_file
25
+ File.open(File.join(output_home, 'cuporter_errors.log'), 'a')
26
+ end
27
+
28
+ extend(Cuporter::Logging)
29
+
30
+ end
31
+ end
32
+
data/lib/cuporter/node.rb CHANGED
@@ -1,10 +1,10 @@
1
1
  # Copyright 2011 ThoughtWorks, Inc. Licensed under the MIT License
2
- require 'lib/cuporter/node/sorting'
3
- require 'lib/cuporter/node/totalling'
4
- require 'lib/cuporter/node/numbering'
5
- require 'lib/cuporter/node/node_base'
6
- require 'lib/cuporter/node/tagged_node'
2
+ require 'cuporter/node/sorting'
3
+ require 'cuporter/node/totalling'
4
+ require 'cuporter/node/numbering'
5
+ require 'cuporter/node/node_base'
6
+ require 'cuporter/node/tagged_node'
7
7
 
8
8
  require 'rubygems'
9
9
  require 'nokogiri'
10
- require 'lib/cuporter/node/types'
10
+ require 'cuporter/node/types'
@@ -1,4 +1,4 @@
1
- # Copyright 2010 ThoughtWorks, Inc. Licensed under the MIT License
1
+ # Copyright 2011 ThoughtWorks, Inc. Licensed under the MIT License
2
2
  module Cuporter
3
3
  class TagReport < ReportBase
4
4
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cuporter
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 10
10
- version: 0.3.10
9
+ - 12
10
+ version: 0.3.12
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tim Camper
@@ -15,8 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-06-28 00:00:00 -04:00
19
- default_executable: cuporter
18
+ date: 2011-07-04 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  name: nokogiri
@@ -34,6 +33,22 @@ dependencies:
34
33
  version: 1.4.1
35
34
  type: :runtime
36
35
  version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: gherkin
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 23
45
+ segments:
46
+ - 1
47
+ - 0
48
+ - 0
49
+ version: 1.0.0
50
+ type: :runtime
51
+ version_requirements: *id002
37
52
  description: Scrapes Cucumber *.feature files to build reports on tag usage and test inventory
38
53
  email: twcamper@thoughtworks.com
39
54
  executables:
@@ -48,18 +63,28 @@ files:
48
63
  - LICENSE
49
64
  - README.textile
50
65
  - Rakefile
66
+ - config/batch_mode.example.yml
51
67
  - config/cli/filter_args_builder.rb
52
68
  - config/cli/options.rb
53
69
  - config/configuration.rb
70
+ - config/cuporter.example.yml
71
+ - config/option_set.rb
72
+ - config/yaml_file/option_set_collection.rb
54
73
  - lib/cuporter/document/assets.rb
55
74
  - lib/cuporter/document/html_document.rb
56
75
  - lib/cuporter/document.rb
57
76
  - lib/cuporter/extensions/nokogiri.rb
58
77
  - lib/cuporter/extensions/string.rb
78
+ - lib/cuporter/feature_parser/language.rb
79
+ - lib/cuporter/feature_parser/node_parser.rb
80
+ - lib/cuporter/feature_parser/old_gherkin_yaml/i18n.rb
81
+ - lib/cuporter/feature_parser/parser_base.rb
82
+ - lib/cuporter/feature_parser/tag_nodes_parser.rb
59
83
  - lib/cuporter/feature_parser.rb
60
84
  - lib/cuporter/filter.rb
61
85
  - lib/cuporter/formatters/csv.rb
62
86
  - lib/cuporter/formatters/text.rb
87
+ - lib/cuporter/logging.rb
63
88
  - lib/cuporter/node/node_base.rb
64
89
  - lib/cuporter/node/numbering.rb
65
90
  - lib/cuporter/node/sorting.rb
@@ -67,12 +92,10 @@ files:
67
92
  - lib/cuporter/node/totalling.rb
68
93
  - lib/cuporter/node/types.rb
69
94
  - lib/cuporter/node.rb
70
- - lib/cuporter/node_parser.rb
71
95
  - lib/cuporter/report/feature_report.rb
72
96
  - lib/cuporter/report/report_base.rb
73
97
  - lib/cuporter/report/tag_report.rb
74
98
  - lib/cuporter/report/tree_report.rb
75
- - lib/cuporter/tag_nodes_parser.rb
76
99
  - lib/cuporter.rb
77
100
  - lib/cuporter/formatters/xml_to_html.xslt
78
101
  - bin/cuporter
@@ -101,7 +124,6 @@ files:
101
124
  - public/jquery.treeview/images/treeview-gray.gif
102
125
  - public/jquery.treeview/images/treeview-red-line.gif
103
126
  - public/jquery.treeview/images/treeview-red.gif
104
- has_rdoc: true
105
127
  homepage: http://github.com/twcamper/cuporter
106
128
  licenses: []
107
129
 
@@ -140,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
162
  requirements: []
141
163
 
142
164
  rubyforge_project: cuporter
143
- rubygems_version: 1.4.2
165
+ rubygems_version: 1.8.5
144
166
  signing_key:
145
167
  specification_version: 3
146
168
  summary: Scrapes Cucumber *.feature files to build reports on tag usage and test inventory
@@ -1,62 +0,0 @@
1
- # Copyright 2010 ThoughtWorks, Inc. Licensed under the MIT License
2
-
3
- module Cuporter
4
- class NodeParser < FeatureParser
5
-
6
- # ++sub_expression++ is the paren group in the regex, dereferenced with $1 in the caller
7
- def new_feature_node(sub_expression, file)
8
- f = Node.new_node(:Feature, @doc, :cuke_name => sub_expression, :tags => @current_tags, :file_path => file)
9
- f.filter = @filter
10
- f
11
- end
12
-
13
- def handle_scenario_line(sub_expression)
14
- if @filter.pass?(@current_tags | @feature.tags)
15
- @feature.add_child(Node.new_node(:Scenario, @doc, :cuke_name => sub_expression, :tags => @current_tags))
16
- end
17
- end
18
-
19
- def new_scenario_outline_node(sub_expression)
20
- so = Node.new_node(:ScenarioOutline, @doc, :cuke_name => sub_expression, :tags => @current_tags)
21
- so.filter = @filter
22
- so
23
- end
24
-
25
- def handle_example_set_line
26
- if @filter.pass?(@feature.tags | @scenario_outline.tags | @example_set.tags)
27
- @scenario_outline.add_child @example_set
28
- end
29
- end
30
-
31
- def new_example_set_node(sub_expression)
32
- es = Node.new_node(:Examples, @doc, :cuke_name => sub_expression, :tags => @current_tags)
33
- es.filter = @filter
34
- es
35
- end
36
-
37
- def new_example_line(sub_expression)
38
- example_type = :ExampleHeader
39
- # if the example set has a child already, then it must be the header
40
- example_type = :Example if @example_set.has_children?
41
- @example_set.add_child(Node.new_node(example_type, @doc, :cuke_name => sub_expression))
42
- end
43
-
44
- def close_scenario_outline
45
- if @scenario_outline
46
- if @example_set
47
- handle_example_set_line
48
- @example_set = nil
49
- end
50
- @feature.add_child(@scenario_outline) if @scenario_outline.has_children?
51
- @scenario_outline = nil
52
- end
53
- end
54
-
55
- def initialize(file, doc, filter)
56
- super(file)
57
- @filter = filter
58
- @doc = doc
59
- end
60
-
61
- end
62
- end
@@ -1,94 +0,0 @@
1
- # Copyright 2010 ThoughtWorks, Inc. Licensed under the MIT License
2
-
3
- module Cuporter
4
- class TagNodesParser < FeatureParser
5
-
6
- # ++sub_expression++ is the paren group in the regex, dereferenced with $1 in the caller
7
- def new_feature_node(sub_expression, file)
8
- {:cuke_name => sub_expression, :tags => @current_tags, :file_path => file}
9
- end
10
-
11
- def handle_scenario_line(sub_expression)
12
- if @filter.pass?(@feature[:tags] | @current_tags)
13
- s = {:cuke_name => sub_expression, :tags => @current_tags}
14
-
15
- (@feature[:tags] | s[:tags]).each do |tag|
16
- next unless @filter.pass?([tag])
17
- add_scenario(tag, @feature, s)
18
- end
19
- end
20
- end
21
-
22
- def new_scenario_outline_node(sub_expression)
23
- {:cuke_name => sub_expression, :tags => @current_tags}
24
- end
25
-
26
- def handle_example_set_line
27
- end
28
-
29
- def new_example_set_node(sub_expression)
30
- {:cuke_name => sub_expression.to_s.strip, :tags => @current_tags}
31
- end
32
-
33
- def new_example_line(sub_expression)
34
- context_tags = (@feature[:tags] | @scenario_outline[:tags] | @example_set[:tags])
35
- if @filter.pass?(context_tags)
36
- e = {:cuke_name => sub_expression}
37
-
38
- context_tags.each do |tag|
39
- next unless @filter.pass?([tag])
40
- add_example(tag, @feature, @scenario_outline, @example_set, e)
41
- end
42
- end
43
- end
44
-
45
- def close_scenario_outline
46
- if @scenario_outline
47
- if @example_set
48
- @example_set = nil
49
- end
50
- @scenario_outline = nil
51
- end
52
- end
53
- def add_scenario(tag, feature, scenario)
54
- unless ( t = @report.tag_node(tag))
55
- t = @report.add_child(Node.new_node(:tag, @doc, 'cuke_name' => tag))
56
- end
57
- unless ( f = t.feature_node(feature) )
58
- f = t.add_child(Node.new_node(:Feature, @doc, feature))
59
- end
60
- f.add_child(Node.new_node(:Scenario, @doc, scenario))
61
- end
62
-
63
- def add_example(tag, feature, scenario_outline, example_set, example)
64
- unless ( t = @report.tag_node(tag))
65
- t = @report.add_child(Node.new_node(:Tag, @doc, 'cuke_name' => tag))
66
- end
67
- unless ( f = t.feature_node(feature) )
68
- f = t.add_child(Node.new_node(:Feature, @doc, feature))
69
- end
70
- unless ( so = f.scenario_outline_node(scenario_outline) )
71
- so = f.add_child(Node.new_node(:ScenarioOutline, @doc, scenario_outline))
72
- end
73
-
74
- # The first Example is an ExampleHeader, which does not get counted or
75
- # numbered. If the ExampleSet is new, it has no children, and therefore
76
- # this is the first and should be an ExampleHeader.
77
- example_type = :Example
78
- unless ( es = so.example_set_node(example_set) )
79
- es = so.add_child(Node.new_node(:Examples, @doc, example_set))
80
- example_type = :ExampleHeader
81
- end
82
- es.add_child(Node.new_node(example_type, @doc, example))
83
- end
84
-
85
-
86
- def initialize(file, report, filter)
87
- super(file)
88
- @filter = filter
89
- @report = report
90
- @doc = report.document
91
- end
92
-
93
- end
94
- end