Parent

Included Modules

Class Index [+]

Quicksearch

Cucumber::Formatter::Pdf

Attributes

indent[W]

Public Class Methods

new(step_mother, path_or_io, options) click to toggle source
    # File lib/cucumber/formatter/pdf.rb, line 26
26:       def initialize(step_mother, path_or_io, options)
27:         @step_mother = step_mother
28:         @file = ensure_file(path_or_io, "pdf")
29: 
30:         if(options[:dry_run])
31:           @status_colors = { :passed => BLACK, :skipped => BLACK, :undefined => BLACK, :failed => BLACK, :announced => GREY}
32:         else
33:           @status_colors = { :passed => '055902', :skipped => GREY, :undefined => 'F27405', :failed => '730202', :announced => GREY}
34:         end
35: 
36:         @pdf = Prawn::Document.new
37:         @scrap = Prawn::Document.new
38:         @doc = @scrap
39:         @options = options
40:         @exceptions = []
41:         @indent = 0
42:         @buffer = []
43:         load_cover_page_image
44:         @pdf.text "\n\n\nCucumber features", :align => :center, :size => 32
45:         @pdf.draw_text "Generated: #{Time.now.strftime("%Y-%m-%d %H:%M")}", :size => 10, :at => [0, 24]
46:         @pdf.draw_text "$ cucumber #{ARGV.join(" ")}", :size => 10, :at => [0,10]
47:         unless options[:dry_run]
48:           @pdf.bounding_box [450,100] , :width => 100 do  
49:             @pdf.text 'Legend', :size => 10
50:             @status_colors.each do |k,v|
51:               @pdf.fill_color v
52:               @pdf.text k.to_s, :size => 10
53:               @pdf.fill_color BLACK
54:             end
55:           end
56:         end
57:       end

Public Instance Methods

after_background(background) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 153
153:       def after_background(background)
154:         @in_background = nil
155:       end
after_feature(feature) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 108
108:       def after_feature(feature)
109:         flush
110:       end
after_feature_element(feature_element) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 104
104:       def after_feature_element(feature_element)
105:         flush
106:       end
after_features(features) click to toggle source
    # File lib/cucumber/formatter/pdf.rb, line 81
81:       def after_features(features)
82:         @pdf.render_file(@file.path)
83:         puts "\ndone"
84:       end
announce(announcement) click to toggle source
    # File lib/cucumber/formatter/pdf.rb, line 74
74:       def announce(announcement)
75:         @pdf.fill_color(@status_colors[:announced])  
76:         @pdf.text announcement, :size => 10
77:         @pdf.fill_color BLACK
78:       end
background_name(keyword, name, file_colon_line, source_indent) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 190
190:       def background_name(keyword, name, file_colon_line, source_indent)
191:         feature_element_name(keyword, name)
192:       end
before_background(background) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 149
149:       def before_background(background)
150:         @in_background = true
151:       end
before_multiline_arg(table) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 157
157:       def before_multiline_arg(table)
158:         return if @hide_this_step
159:         if(table.kind_of? Cucumber::Ast::Table)
160:           keep_with do
161:             print_table(table, ['ffffff', 'f0f0f0'])
162:           end
163:         end
164:       end
before_outline_table(table) click to toggle source

using row_color hack to highlight each row correctly

     # File lib/cucumber/formatter/pdf.rb, line 167
167:       def before_outline_table(table)
168:         return if @hide_this_step
169:         row_colors = table.example_rows.map { |r| @status_colors[r.status] unless r.status == :skipped}
170:         keep_with do
171:           print_table(table, row_colors)
172:         end
173:       end
before_py_string(string) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 175
175:       def before_py_string(string)
176:         return if @hide_this_step
177:         s = %{"""\n#{string}\n"""}.indent(10)
178:         s = s.split("\n").map{|l| l =~ /^\s+$/ ? '' : l}
179:         s.each do |line|
180:           keep_with { @doc.text(line, :size => 8) }
181:         end
182:       end
examples_name(keyword, name) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 194
194:       def examples_name(keyword, name)
195:         feature_element_name(keyword, name)
196:       end
feature_element_name(keyword, name) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 112
112:       def feature_element_name(keyword, name)
113:         names = name.empty? ? [name] : name.split("\n")
114:         print "."
115:         STDOUT.flush
116: 
117:         keep_with do
118:           @doc.move_down(20)
119:           @doc.fill_color GREY
120:           @doc.text("#{keyword}", :size => 8)
121:           @doc.fill_color BLACK
122:           @doc.text("#{names[0]}", :size => 16)
123:           names[1..1].each { |s| @doc.text(s, :size => 12) }
124:           @doc.text("\n")
125:         end
126:       end
feature_name(keyword, name) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 86
 86:       def feature_name(keyword, name)
 87:         @pdf.start_new_page
 88:         names = name.split("\n")
 89:         @pdf.fill_color GREY
 90:         @pdf.text(keyword, :align => :center)
 91:         @pdf.fill_color BLACK
 92:         names.each_with_index do |nameline, i|
 93:           case i
 94:           when 0
 95:             @pdf.text(nameline.strip, :size => 30, :align => :center )
 96:             @pdf.text("\n")
 97:           else
 98:             @pdf.text(nameline.strip, :size => 12)
 99:           end
100:         end
101:         @pdf.move_down(30)
102:       end
load_cover_page_image() click to toggle source
    # File lib/cucumber/formatter/pdf.rb, line 59
59:       def load_cover_page_image()
60:         if (!load_image("features/support/logo.png"))
61:           load_image("features/support/logo.jpg")
62:         end
63:       end
load_image(image_path) click to toggle source
    # File lib/cucumber/formatter/pdf.rb, line 65
65:       def load_image(image_path)
66:         begin
67:           @pdf.image open(image_path, "rb"), :position => :center, :width => 500
68:           true
69:         rescue Errno::ENOENT
70:           false
71:         end
72:       end
scenario_name(keyword, name, file_colon_line, source_indent) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 198
198:       def scenario_name(keyword, name, file_colon_line, source_indent)
199:         feature_element_name(keyword, name)
200:       end
step_name(keyword, step_match, status, source_indent, background) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 143
143:       def step_name(keyword, step_match, status, source_indent, background)
144:         return if @hide_this_step
145:         line = "#{keyword} #{step_match.format_args("%s")}"
146:         colorize(line, status)
147:       end
step_result(keyword, step_match, multiline_arg, status, exception, source_indent, background) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 128
128:       def step_result(keyword, step_match, multiline_arg, status, exception, source_indent, background)
129:         @hide_this_step = false
130:         if exception
131:           if @exceptions.include?(exception)
132:             @hide_this_step = true
133:             return
134:           end
135:           @exceptions << exception
136:         end
137:         if status != :failed && @in_background ^ background
138:           @hide_this_step = true
139:           return
140:         end
141:       end
tag_name(tag_name) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 184
184:       def tag_name(tag_name)
185:         return if @hide_this_step
186:         tag = format_string(tag_name, :tag).indent(@indent)
187:         # TODO should we render tags at all? skipped for now. difficult to place due to page breaks
188:       end

Private Instance Methods

colorize(text, status) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 204
204:       def colorize(text, status)
205:         keep_with do
206:           @doc.fill_color(@status_colors[status] || BLACK)
207:           @doc.text(text)
208:           @doc.fill_color(BLACK)
209:         end
210:       end
flush() click to toggle source

This method does a ‘test’ rendering on a blank page, to see the rendered height of the buffer if that too high for the space left on the age in the real document, we do a page break. This obviously doesn’t work if a scenario is longer than a whole page (God forbid)

     # File lib/cucumber/formatter/pdf.rb, line 226
226:       def flush
227:         @scrap.start_new_page
228:         oldy = @scrap.y
229:         render @scrap
230:         height = (oldy - @scrap.y) + 36 # whops magic number
231:         if ((@pdf.y - height) < @pdf.bounds.bottom)
232:           @pdf.start_new_page
233:         end
234:         render @pdf
235:         @pdf.move_down(20)
236:         @buffer = []
237:       end
keep_with(&block) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 212
212:       def keep_with(&block)
213:         @buffer << block
214:       end
render(doc) click to toggle source
     # File lib/cucumber/formatter/pdf.rb, line 216
216:       def render(doc)
217:         @doc = doc
218:         @buffer.each do |proc|
219:           proc.call
220:         end
221:       end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.