cuporter 0.3.9 → 0.3.10
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +88 -68
- data/Rakefile +2 -2
- data/bin/cuporter +67 -19
- data/config/cli/options.rb +26 -14
- data/config/configuration.rb +101 -54
- data/lib/cuporter/document.rb +1 -2
- data/lib/cuporter/document/html_document.rb +1 -1
- data/lib/cuporter/formatters/csv.rb +1 -5
- data/lib/cuporter/formatters/text.rb +7 -8
- metadata +5 -4
data/README.textile
CHANGED
@@ -25,9 +25,25 @@ h3. 4 Output Formats
|
|
25
25
|
# pretty-print text
|
26
26
|
# csv
|
27
27
|
|
28
|
+
Splitting the output among multiple formats is supported, so you could run a single report and write it
|
29
|
+
to an html file, a csv file, and show the xml or text on @stdout@ in the terminal.
|
30
|
+
|
28
31
|
h3. A bunch of configuration options
|
29
32
|
|
30
|
-
See the help output below
|
33
|
+
See the help output below for all of the options, which can be supplied in to ways:
|
34
|
+
|
35
|
+
# Command Line
|
36
|
+
# Yaml File
|
37
|
+
** use it to add to or override the program defaults
|
38
|
+
** *Batch mode:* run multiple reports at once simply by specifying an option set for each in @cuporter.yml@
|
39
|
+
** the file name itself is a configurable option
|
40
|
+
** See the samples.
|
41
|
+
|
42
|
+
h4. option override precedence
|
43
|
+
|
44
|
+
# Highest Precedence (overrides all): command line
|
45
|
+
# Middle Precedence: yaml file
|
46
|
+
# Lowest Precedence: @Cuporter::Config::OptionSet::DEFAULTS@
|
31
47
|
|
32
48
|
---------
|
33
49
|
|
@@ -113,73 +129,77 @@ h4. help
|
|
113
129
|
|
114
130
|
<pre>
|
115
131
|
$ cuporter -h
|
116
|
-
|
117
|
-
Usage: cuporter [options]
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
132
|
+
|
133
|
+
Usage: cuporter [options]
|
134
|
+
|
135
|
+
-r, --report [tag|feature|tree] View, or type of report.
|
136
|
+
Default: "tag"
|
137
|
+
|
138
|
+
-f, --format [xml|html|csv|text] Output format.
|
139
|
+
Default: text (it's pretty, though!)
|
140
|
+
|
141
|
+
-i, --input-dir DIR Root directory of *.feature files.
|
142
|
+
Default: "features"
|
143
|
+
|
144
|
+
Used to build the glob pattern '[--input-dir]/**/*.feature', which is really most likely
|
145
|
+
"features/**/*.features" and finds all feature files anywhere under "features" or
|
146
|
+
your custom root supplied with this option.
|
147
|
+
Overridden by "--file-input'.
|
148
|
+
|
149
|
+
-I, --file-input FILE Single *.feature file. Full name with extension, like 'path/to/file.feature.'
|
150
|
+
Overrides "--input-dir" and used mostly for testing.
|
151
|
+
|
152
|
+
-o, --output-file FILE Output file path, like 'tmp/cucumber/tag_report.html'.
|
153
|
+
|
154
|
+
-t, --tags TAG_EXPRESSION Filter on tags for name report.
|
155
|
+
TAG_EXPRESSION rules:
|
156
|
+
1. $ cucumber --help
|
157
|
+
2. http://github.com/aslakhellesoy/cucumber/wiki/Tags
|
158
|
+
|
159
|
+
-T, --title STRING Override report default title, which is different for each view/report.
|
160
|
+
This affects the xml 'report' node title and the html head > title attributes.
|
161
|
+
|
162
|
+
--config-file PATH Specify any of these options in a yml file.
|
163
|
+
Order of precedence:
|
164
|
+
1 - command line
|
165
|
+
2 - yaml file
|
166
|
+
3 - these defaults
|
167
|
+
|
168
|
+
Default: 'cuporter.yml'
|
169
|
+
|
170
|
+
-d, --dry-run Print the configuration without running any reports.
|
171
|
+
|
172
|
+
--text-summary Add a summary to the text format.
|
173
|
+
|
174
|
+
CSS and Javascript asset options:
|
175
|
+
|
176
|
+
-l, --link-assets Do not inline CSS and js in <style/> and <script/> tags, but link to external files instead.
|
177
|
+
Default: 'false' for the tag and feature views, not optional for the
|
178
|
+
tree view, which requires external gifs.
|
179
|
+
|
180
|
+
-c, --copy-public-assets If --output-file is supplied, and you're linking to external
|
181
|
+
CSS and JavaScript assets, copy them from 'public/' to 'cuporter_public'
|
182
|
+
in the same dir as the output file.
|
183
|
+
Sets --use-copied-public-assets to 'true', and
|
184
|
+
the html report will link to these files by relative path.
|
185
|
+
|
186
|
+
Default: 'false'
|
187
|
+
|
188
|
+
-u, --use-copied-public-assets When running batches of reports, and the assets folder has already been
|
189
|
+
created by another call to cuporter with '--copy-public-assets'.
|
190
|
+
Set to 'true' automatically along with --copy-public-assets.
|
191
|
+
|
192
|
+
Default: 'false'
|
193
|
+
|
194
|
+
Reporting options: on by default but can be turned off:
|
195
|
+
|
196
|
+
--no-sort Do not sort tags, features, scenarios, or outlines
|
197
|
+
--no-number Do not get or show scenario or example numbers, (i.e., do not number the leaf nodes).
|
198
|
+
--no-total Do not get or show totals
|
199
|
+
--no-show-tags Do not show cucumber tags at the feature, scenario, or outline level.
|
200
|
+
--no-show-files Do not show feature file paths.
|
201
|
+
--no-leaves Show features only, with no scenarios or outlines.
|
202
|
+
|
183
203
|
</pre>
|
184
204
|
|
185
205
|
h4. Examples
|
data/Rakefile
CHANGED
@@ -54,7 +54,7 @@ namespace :cuporter do
|
|
54
54
|
RDOC_OPTS = ["--all" , "--quiet" , "--line-numbers" , "--inline-source",
|
55
55
|
"--main", "README.textile",
|
56
56
|
"--title", "Cuporter: cucumber tag reporting"]
|
57
|
-
XTRA_RDOC = %w{README.textile LICENSE }
|
57
|
+
XTRA_RDOC = %w{bin/cuporter README.textile LICENSE }
|
58
58
|
|
59
59
|
Rake::RDocTask.new do |rd|
|
60
60
|
rd.rdoc_dir = "doc/rdoc"
|
@@ -65,7 +65,7 @@ namespace :cuporter do
|
|
65
65
|
|
66
66
|
spec = Gem::Specification.new do |s|
|
67
67
|
s.name = 'cuporter'
|
68
|
-
s.version = '0.3.
|
68
|
+
s.version = '0.3.10'
|
69
69
|
s.rubyforge_project = s.name
|
70
70
|
|
71
71
|
s.platform = Gem::Platform::RUBY
|
data/bin/cuporter
CHANGED
@@ -5,28 +5,76 @@ $LOAD_PATH.unshift File.expand_path('../lib', File.dirname(__FILE__))
|
|
5
5
|
require 'configuration'
|
6
6
|
require 'cuporter'
|
7
7
|
|
8
|
+
module Cuporter
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
10
|
+
#=Default:
|
11
|
+
#
|
12
|
+
# Single tag report of everything under "features/", formatted as
|
13
|
+
# indented text, showing feature names, scenario names, tags, file names, as well as scenario totals and sequence numbers.
|
14
|
+
#
|
15
|
+
# Configuration:
|
16
|
+
#
|
17
|
+
# Use the command line options and/or yaml file to turn off everything but
|
18
|
+
# the feature names, and also to supply filtering tags (cucumber
|
19
|
+
# syntax and logical rules).
|
20
|
+
#
|
21
|
+
#
|
22
|
+
# Split output:
|
23
|
+
#
|
24
|
+
# Note that a given report can be sent to multiple output targets. For
|
25
|
+
# example, html to a file and pretty text or xml to <tt>stdout</tt>. Specify
|
26
|
+
# multiple output files, and Cuporter will associate each of their names with the correct
|
27
|
+
# format/output stream, but if you get the file extension wrong it will fall
|
28
|
+
# back on <tt>stdout</tt>. The possible extensions are <tt>.txt</tt>,
|
29
|
+
# <tt>.xml</tt>, <tt>.html</tt>, and <tt>.csv</tt>.
|
30
|
+
#
|
31
|
+
#
|
32
|
+
# Batch reporting:
|
33
|
+
#
|
34
|
+
# Use the yaml file to specify options for as many reports or views as you
|
35
|
+
# like to produce at once.
|
36
|
+
def self.run
|
37
|
+
Cuporter.option_sets.each do |options|
|
38
|
+
|
39
|
+
if options.dry_run?
|
40
|
+
options.dump
|
41
|
+
puts
|
42
|
+
next
|
43
|
+
end
|
44
|
+
|
45
|
+
report = Cuporter::ReportBase.create(options).build
|
46
|
+
|
47
|
+
options[:format].each do |format|
|
48
|
+
(options.output_file(format) || STDOUT).puts(
|
49
|
+
case format
|
50
|
+
when 'xml'
|
51
|
+
report.doc.to_xml(:indent => 2, :encoding => 'UTF-8')
|
52
|
+
when 'csv'
|
53
|
+
Cuporter::Formatters::NodeFormatters.total = options[:total]
|
54
|
+
report.doc.to_csv
|
55
|
+
when 'text', 'pretty'
|
56
|
+
Cuporter::Formatters::NodeFormatters.total = options[:total]
|
57
|
+
Cuporter::Formatters::NodeFormatters.text_summary = options[:text_summary]
|
58
|
+
report.doc.to_text
|
59
|
+
when 'html'
|
60
|
+
if options[:copy_public_assets]
|
61
|
+
Cuporter::Document::Assets.copy(options[:output_file].first)
|
62
|
+
end
|
63
|
+
html = Cuporter::Document.new_html(options[:report],
|
64
|
+
options[:link_assets],
|
65
|
+
options[:use_copied_public_assets])
|
66
|
+
formatters = File.expand_path("../lib/cuporter/formatters", File.dirname(__FILE__))
|
67
|
+
xslt = Nokogiri::XSLT(File.read("#{formatters}/xml_to_html.xslt"))
|
68
|
+
html.add_report(xslt.transform(report.doc).at('.report'))
|
69
|
+
html.to_html
|
70
|
+
end
|
71
|
+
)
|
72
|
+
end
|
73
|
+
end
|
21
74
|
end
|
22
|
-
html = Cuporter::Document.new_html(Cuporter.options[:report],
|
23
|
-
Cuporter.options[:link_assets],
|
24
|
-
Cuporter.options[:use_copied_public_assets])
|
25
|
-
formatters = File.expand_path("../lib/cuporter/formatters", File.dirname(__FILE__))
|
26
|
-
xslt = Nokogiri::XSLT(File.read("#{formatters}/xml_to_html.xslt"))
|
27
|
-
html.add_report(xslt.transform(report.doc).at('.report'))
|
28
|
-
html.to_html
|
29
75
|
end
|
30
76
|
|
77
|
+
Cuporter.run
|
78
|
+
|
31
79
|
__END__
|
32
80
|
xsltproc --stringparam view feature lib/cuporter/formatters/xml_to_html.xslt new_feature.xml | ruby -e "f = STDIN.read; puts f.gsub(/\<\!--[\*\/]{2}--\>/, '')" | tee xslt_feature.html
|
data/config/cli/options.rb
CHANGED
@@ -37,7 +37,8 @@ module Cuporter
|
|
37
37
|
opts.on("-f", "--format [xml|html|csv|text]", %Q{Output format.
|
38
38
|
Default: text (it's pretty, though!)
|
39
39
|
}) do |f|
|
40
|
-
@options[:format] =
|
40
|
+
@options[:format] = [] unless @options[:format]
|
41
|
+
@options[:format] << f
|
41
42
|
end
|
42
43
|
|
43
44
|
opts.on("-i", "--input-dir DIR", %Q{Root directory of *.feature files.
|
@@ -59,15 +60,16 @@ module Cuporter
|
|
59
60
|
|
60
61
|
opts.on("-o", "--output-file FILE", %Q{Output file path, like 'tmp/cucumber/tag_report.html'.
|
61
62
|
}) do |o|
|
62
|
-
@options[:output_file] =
|
63
|
+
@options[:output_file] = [] unless @options[:output_file]
|
64
|
+
@options[:output_file] << o
|
63
65
|
end
|
64
66
|
|
65
|
-
@options[:tags] = []
|
66
67
|
opts.on("-t", "--tags TAG_EXPRESSION", %Q{Filter on tags for name report.
|
67
68
|
TAG_EXPRESSION rules:
|
68
69
|
1. $ cucumber --help
|
69
70
|
2. http://github.com/aslakhellesoy/cucumber/wiki/Tags
|
70
71
|
}) do |t|
|
72
|
+
@options[:tags] = [] unless @options[:tags]
|
71
73
|
@options[:tags] << t
|
72
74
|
end
|
73
75
|
|
@@ -77,6 +79,27 @@ module Cuporter
|
|
77
79
|
@options[:title] = title
|
78
80
|
end
|
79
81
|
|
82
|
+
opts.on("--config-file PATH", %Q{Specify any of these options in a yml file.
|
83
|
+
Order of precedence:
|
84
|
+
1 - command line
|
85
|
+
2 - yaml file
|
86
|
+
3 - these defaults
|
87
|
+
|
88
|
+
Default: 'cuporter.yml'
|
89
|
+
}) do |path|
|
90
|
+
@options[:config_file] = path
|
91
|
+
end
|
92
|
+
|
93
|
+
opts.on("-d", "--dry-run", %Q{Print the configuration without running any reports.
|
94
|
+
}) do |d|
|
95
|
+
@options[:dry_run] = d
|
96
|
+
end
|
97
|
+
|
98
|
+
opts.on("--text-summary", %Q{Add a summary to the text format.
|
99
|
+
}) do |ts|
|
100
|
+
@options[:text_summary] = ts
|
101
|
+
end
|
102
|
+
|
80
103
|
opts.separator "CSS and Javascript asset options:\n\n"
|
81
104
|
|
82
105
|
opts.on("-l", "--link-assets", %Q{Do not inline CSS and js in <style/> and <script/> tags, but link to external files instead.
|
@@ -107,17 +130,6 @@ module Cuporter
|
|
107
130
|
@options[:use_copied_public_assets] = u
|
108
131
|
end
|
109
132
|
|
110
|
-
opts.on("--config-file PATH", %Q{Specify any of these options in a yml file.
|
111
|
-
Order of precedence:
|
112
|
-
1 - command line
|
113
|
-
2 - yaml file
|
114
|
-
3 - these defaults
|
115
|
-
|
116
|
-
Default: 'cuporter.yml'
|
117
|
-
}) do |path|
|
118
|
-
@options[:config_file] = path
|
119
|
-
end
|
120
|
-
|
121
133
|
opts.separator "Reporting options: on by default but can be turned off:\n\n"
|
122
134
|
opts.on("--no-sort", "Do not sort tags, features, scenarios, or outlines\n") do |n|
|
123
135
|
@options[:sort] = n
|
data/config/configuration.rb
CHANGED
@@ -7,67 +7,110 @@ require 'cli/filter_args_builder'
|
|
7
7
|
module Cuporter
|
8
8
|
module Config
|
9
9
|
|
10
|
-
|
10
|
+
class OptionSetCollection
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
def self.path
|
13
|
+
Cuporter::Config::CLI::Options[:config_file] || "cuporter.yml"
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.config_file
|
17
|
+
return [] unless File.exists?(path)
|
18
|
+
|
19
|
+
require 'yaml'
|
20
|
+
yaml = YAML.load_file(path)
|
21
|
+
if yaml["option_sets"]
|
22
|
+
yaml["option_sets"].map do |option_set|
|
23
|
+
cast(option_set["options"])
|
24
|
+
end
|
25
|
+
else
|
26
|
+
yaml["defaults"].empty? ? [] : [cast(yaml["defaults"])]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.cast(option_set)
|
31
|
+
pairs = {}
|
32
|
+
option_set.each do |key, value|
|
33
|
+
pairs[key.to_sym] = case key
|
34
|
+
when /^(tags|output_file|format)$/i
|
35
|
+
value.is_a?(Array) ? value : [value]
|
36
|
+
else
|
37
|
+
value
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
return pairs
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class OptionSet
|
46
|
+
|
47
|
+
DEFAULTS = { :report => "tag",
|
48
|
+
:format => ["text"],
|
49
|
+
:input_dir => "features",
|
50
|
+
:output_file => [],
|
51
|
+
:tags => [],
|
52
|
+
:link_assets => false,
|
53
|
+
:copy_public_assets => false,
|
17
54
|
:use_copied_public_assets => false,
|
18
|
-
:
|
19
|
-
:
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:
|
55
|
+
:dry_run => false,
|
56
|
+
:sort => true,
|
57
|
+
:number => true,
|
58
|
+
:total => true,
|
59
|
+
:show_tags => true,
|
60
|
+
:show_files => true,
|
61
|
+
:leaves => true
|
24
62
|
}
|
25
63
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
64
|
+
attr_reader :options
|
65
|
+
|
66
|
+
def initialize(file_config = {})
|
67
|
+
# CLI options replace any found in the file
|
68
|
+
cli_options_over_file_options = file_config.merge(Cuporter::Config::CLI::Options.options)
|
30
69
|
|
31
|
-
|
32
|
-
|
70
|
+
# defaults will be used for anything not so far specified in the file
|
71
|
+
# or CLI
|
72
|
+
@options = post_process(DEFAULTS.merge(cli_options_over_file_options))
|
73
|
+
end
|
74
|
+
|
75
|
+
def [](key)
|
76
|
+
@options[key]
|
77
|
+
end
|
33
78
|
|
34
|
-
|
35
|
-
|
36
|
-
|
79
|
+
def output_file(format)
|
80
|
+
if (file = @options[:output_file].find {|f| f =~ ext_for(format) })
|
81
|
+
File.open(file, "w")
|
37
82
|
end
|
38
|
-
@options
|
39
83
|
end
|
40
84
|
|
41
|
-
def
|
85
|
+
def dump
|
86
|
+
col_1_max = @options.keys.max_by {|i| i.to_s.length }.to_s.size
|
87
|
+
@options.each do |key, value|
|
88
|
+
puts ":#{key.to_s.ljust(col_1_max, ' ')} => #{value.inspect}"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def dry_run?
|
93
|
+
@options[:dry_run]
|
94
|
+
end
|
95
|
+
|
96
|
+
private
|
97
|
+
|
98
|
+
def post_process(options)
|
42
99
|
options[:input_file_pattern] = options.delete(:input_file) || "#{options.delete(:input_dir)}/**/*.feature"
|
43
100
|
options[:root_dir] = options[:input_file_pattern].split(File::SEPARATOR).first
|
44
101
|
options[:filter_args] = Cuporter::Config::CLI::FilterArgsBuilder.new(options.delete(:tags)).args
|
45
|
-
|
46
|
-
options[:output_file] = full_path(
|
47
|
-
else
|
48
|
-
options[:copy_public_assets] = false
|
49
|
-
options[:use_copied_public_assets] = false
|
102
|
+
options[:output_file].each_with_index do |file_path, i|
|
103
|
+
options[:output_file][i] = full_path(file_path.dup)
|
50
104
|
end
|
51
|
-
options
|
52
|
-
end
|
53
|
-
|
54
|
-
def self.config_file(path)
|
55
|
-
return {} unless File.exists?(path)
|
56
105
|
|
57
|
-
|
58
|
-
|
59
|
-
YAML.load_file(path).each do |key, value|
|
60
|
-
pairs[key.to_sym] = case value
|
61
|
-
when /^true$/i
|
62
|
-
true
|
63
|
-
when /^false$/i
|
64
|
-
false
|
65
|
-
end || value
|
106
|
+
unless options[:output_file].find {|f| f =~ /\.html$/ }
|
107
|
+
options[:copy_public_assets] = options[:use_copied_public_assets] = false
|
66
108
|
end
|
67
|
-
|
109
|
+
|
110
|
+
options
|
68
111
|
end
|
69
112
|
|
70
|
-
def
|
113
|
+
def full_path(path)
|
71
114
|
expanded_path = File.expand_path(path)
|
72
115
|
path_nodes = expanded_path.split(File::SEPARATOR)
|
73
116
|
file = path_nodes.pop
|
@@ -75,20 +118,24 @@ module Cuporter
|
|
75
118
|
expanded_path
|
76
119
|
end
|
77
120
|
|
121
|
+
def ext_for(format)
|
122
|
+
case format
|
123
|
+
when 'text', 'pretty'
|
124
|
+
/\.txt$/
|
125
|
+
else
|
126
|
+
/\.#{format}$/
|
127
|
+
end
|
128
|
+
end
|
78
129
|
end
|
79
130
|
end
|
80
131
|
|
81
|
-
def self.
|
82
|
-
Config::
|
132
|
+
def self.option_sets
|
133
|
+
if (yaml_hashes = Config::OptionSetCollection.config_file).any?
|
134
|
+
yaml_hashes.map {|set| Config::OptionSet.new(set) }
|
135
|
+
else
|
136
|
+
[Config::OptionSet.new]
|
137
|
+
end
|
83
138
|
end
|
84
139
|
|
85
|
-
def self.options
|
86
|
-
Config::Options.options
|
87
|
-
end
|
88
140
|
|
89
|
-
def self.output_file
|
90
|
-
if options[:output_file]
|
91
|
-
File.open(options[:output_file], "w")
|
92
|
-
end
|
93
|
-
end
|
94
141
|
end
|
data/lib/cuporter/document.rb
CHANGED
@@ -11,8 +11,7 @@ module Cuporter
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.new_html(view, link_assets, use_copied_public_assets)
|
14
|
-
|
15
|
-
doc = Nokogiri::XML::Document.new
|
14
|
+
doc = Cuporter::Document::Html.new
|
16
15
|
doc.view = view
|
17
16
|
doc.link_assets = link_assets
|
18
17
|
doc.assets_src = Assets::PUBLIC_SOURCE_PATH
|
@@ -13,11 +13,7 @@ module Cuporter
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def total_column_spacer
|
16
|
-
@@total_column_spacer ||=
|
17
|
-
end
|
18
|
-
|
19
|
-
def total_column
|
20
|
-
@@total_column ||= total_column_spacer
|
16
|
+
@@total_column_spacer ||= NodeFormatters.total ? tab_stop : ""
|
21
17
|
end
|
22
18
|
|
23
19
|
def total(node)
|
@@ -14,8 +14,12 @@ module Cuporter
|
|
14
14
|
end
|
15
15
|
|
16
16
|
module NodeFormatters
|
17
|
+
class << self
|
18
|
+
attr_accessor :total, :text_summary
|
19
|
+
end
|
20
|
+
|
17
21
|
def report(l, node)
|
18
|
-
return l unless
|
22
|
+
return l unless NodeFormatters.text_summary
|
19
23
|
l += total(node)
|
20
24
|
l += cuke_name(node['cuke_name'])
|
21
25
|
l += title(node['title'])
|
@@ -89,7 +93,6 @@ module Cuporter
|
|
89
93
|
module Text
|
90
94
|
extend Util
|
91
95
|
extend NodeFormatters
|
92
|
-
|
93
96
|
|
94
97
|
SPACER = " "
|
95
98
|
def tab_stop
|
@@ -97,16 +100,12 @@ module Cuporter
|
|
97
100
|
end
|
98
101
|
|
99
102
|
def total_column_spacer
|
100
|
-
@@total_column_spacer ||=
|
101
|
-
end
|
102
|
-
|
103
|
-
def total_column
|
104
|
-
@@total_column ||= Cuporter.options[:total] ? tab_stop * 2: ""
|
103
|
+
@@total_column_spacer ||= NodeFormatters.total ? tab_stop : ""
|
105
104
|
end
|
106
105
|
|
107
106
|
def total(node)
|
108
107
|
format_number(node, 'total') do |indent_length, value|
|
109
|
-
"[#{value}]".ljust(
|
108
|
+
"[#{value}]".ljust(indent_length, SPACER)
|
110
109
|
end
|
111
110
|
end
|
112
111
|
|
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:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 10
|
10
|
+
version: 0.3.10
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tim Camper
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-06-
|
18
|
+
date: 2011-06-28 00:00:00 -04:00
|
19
19
|
default_executable: cuporter
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -41,6 +41,7 @@ executables:
|
|
41
41
|
extensions: []
|
42
42
|
|
43
43
|
extra_rdoc_files:
|
44
|
+
- bin/cuporter
|
44
45
|
- README.textile
|
45
46
|
- LICENSE
|
46
47
|
files:
|