prawn 2.0.2 → 2.1.0

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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/data/images/blend_modes_bottom_layer.jpg +0 -0
  3. data/data/images/blend_modes_top_layer.jpg +0 -0
  4. data/data/images/indexed_transparency.png +0 -0
  5. data/data/images/indexed_transparency_alpha.dat +0 -0
  6. data/data/images/indexed_transparency_color.dat +0 -0
  7. data/lib/prawn.rb +2 -1
  8. data/lib/prawn/document.rb +1 -0
  9. data/lib/prawn/document/internals.rb +10 -2
  10. data/lib/prawn/font.rb +14 -1
  11. data/lib/prawn/graphics.rb +2 -0
  12. data/lib/prawn/graphics/blend_mode.rb +64 -0
  13. data/lib/prawn/graphics/patterns.rb +52 -16
  14. data/lib/prawn/graphics/transformation.rb +3 -0
  15. data/lib/prawn/images/png.rb +43 -5
  16. data/lib/prawn/text/formatted/arranger.rb +25 -17
  17. data/lib/prawn/text/formatted/line_wrap.rb +2 -3
  18. data/lib/prawn/transformation_stack.rb +42 -0
  19. data/lib/prawn/version.rb +1 -1
  20. data/manual/graphics/blend_mode.rb +49 -0
  21. data/manual/graphics/graphics.rb +1 -0
  22. data/manual/graphics/soft_masks.rb +1 -1
  23. data/prawn.gemspec +4 -5
  24. data/spec/acceptance/png_spec.rb +35 -0
  25. data/spec/blend_mode_spec.rb +71 -0
  26. data/spec/document_spec.rb +72 -76
  27. data/spec/font_spec.rb +11 -11
  28. data/spec/formatted_text_arranger_spec.rb +178 -149
  29. data/spec/formatted_text_box_spec.rb +23 -23
  30. data/spec/graphics_spec.rb +67 -28
  31. data/spec/image_handler_spec.rb +7 -7
  32. data/spec/images_spec.rb +1 -1
  33. data/spec/png_spec.rb +26 -4
  34. data/spec/repeater_spec.rb +9 -9
  35. data/spec/spec_helper.rb +1 -4
  36. data/spec/text_at_spec.rb +2 -2
  37. data/spec/text_box_spec.rb +20 -16
  38. data/spec/text_spec.rb +8 -14
  39. data/spec/transformation_stack_spec.rb +63 -0
  40. data/spec/view_spec.rb +10 -10
  41. metadata +27 -31
  42. data/data/images/pal_bk.png +0 -0
  43. data/spec/acceptance/png.rb +0 -24
  44. data/spec/extensions/mocha.rb +0 -45
@@ -21,6 +21,8 @@ module Prawn
21
21
 
22
22
  # The number of spaces in the last wrapped line
23
23
  attr_reader :space_count
24
+ attr_reader :soft_hyphen
25
+ attr_reader :zero_width_space
24
26
 
25
27
  # Whether this line is the last line in the paragraph
26
28
  def paragraph_finished?
@@ -150,9 +152,6 @@ module Prawn
150
152
  "-"
151
153
  end
152
154
 
153
- attr_reader :soft_hyphen
154
- attr_reader :zero_width_space
155
-
156
155
  def line_empty?
157
156
  @line_empty && @accumulated_width == 0
158
157
  end
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+ #
3
+ # transformation_stack.rb : Stores the transformations that have been applied to the document
4
+ #
5
+ # Copyright 2015, Roger Nesbitt. All Rights Reserved.
6
+ #
7
+ # This is free software. Please see the LICENSE and COPYING files for details.
8
+ #
9
+
10
+ require 'matrix'
11
+
12
+ module Prawn
13
+ module TransformationStack
14
+ def add_to_transformation_stack(a, b, c, d, e, f)
15
+ @transformation_stack ||= [[]]
16
+ @transformation_stack.last.push([a, b, c, d, e, f].map(&:to_f))
17
+ end
18
+
19
+ def save_transformation_stack
20
+ @transformation_stack ||= [[]]
21
+ @transformation_stack.push(@transformation_stack.last.dup)
22
+ end
23
+
24
+ def restore_transformation_stack
25
+ @transformation_stack.pop if @transformation_stack
26
+ end
27
+
28
+ def current_transformation_matrix_with_translation(x = 0, y = 0)
29
+ transformations = (@transformation_stack || [[]]).last
30
+
31
+ matrix = Matrix.identity(3)
32
+
33
+ transformations.each do |a, b, c, d, e, f|
34
+ matrix *= Matrix[[a, c, e], [b, d, f], [0, 0, 1]]
35
+ end
36
+
37
+ matrix *= Matrix[[1, 0, x], [0, 1, y], [0, 0, 1]]
38
+
39
+ matrix.to_a[0..1].transpose.flatten
40
+ end
41
+ end
42
+ end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Prawn
4
- VERSION = "2.0.2"
4
+ VERSION = "2.1.0"
5
5
  end
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Blend modes can be used to change the way two layers (images, graphics,
4
+ # text, etc.) are blended together. The <code>blend_mode</code> method
5
+ # accepts a single blend mode or an array of blend modes. PDF viewers should
6
+ # blend the layers based on the first recognized blend mode.
7
+ #
8
+ # Valid blend modes in v1.4 of the PDF spec include :Normal, :Multiply, :Screen,
9
+ # :Overlay, :Darken, :Lighten, :ColorDodge, :ColorBurn, :HardLight, :SoftLight,
10
+ # :Difference, :Exclusion, :Hue, :Saturation, :Color, and :Luminosity.
11
+ #
12
+ require File.expand_path(File.join(File.dirname(__FILE__),
13
+ %w[.. example_helper]))
14
+
15
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
16
+ Prawn::ManualBuilder::Example.generate(filename) do
17
+ start_new_page
18
+
19
+ # https://commons.wikimedia.org/wiki/File:Blend_modes_2.-bottom-layer.jpg#/media/File:Blend_modes_2.-bottom-layer.jpg
20
+ bottom_layer = "#{Prawn::DATADIR}/images/blend_modes_bottom_layer.jpg"
21
+
22
+ # https://commons.wikimedia.org/wiki/File:Blend_modes_1.-top-layer.jpg#/media/File:Blend_modes_1.-top-layer.jpg
23
+ top_layer = "#{Prawn::DATADIR}/images/blend_modes_top_layer.jpg"
24
+
25
+ blend_modes = [:Normal, :Multiply, :Screen, :Overlay, :Darken, :Lighten, :ColorDodge, :ColorBurn, :HardLight, :SoftLight, :Difference, :Exclusion, :Hue, :Saturation, :Color, :Luminosity]
26
+ blend_modes.each_with_index do |blend_mode, index|
27
+ x = index % 4 * 135
28
+ y = cursor - (index / 4 * 200)
29
+
30
+ image bottom_layer, :at => [x, y], :fit => [125, 125]
31
+ blend_mode(blend_mode) do
32
+ image top_layer, :at => [x, y], :fit => [125, 125]
33
+ end
34
+
35
+ y -= 130
36
+
37
+ fill_color '009ddc'
38
+ fill_rectangle [x, y], 75, 25
39
+ blend_mode(blend_mode) do
40
+ fill_color 'fdb827'
41
+ fill_rectangle [x + 50, y], 75, 25
42
+ end
43
+
44
+ y -= 30
45
+
46
+ fill_color '000000'
47
+ text_box blend_mode.to_s, :at => [x, y]
48
+ end
49
+ end
@@ -29,6 +29,7 @@ Prawn::ManualBuilder::Example.generate("graphics.pdf", :page_size => "FOLIO") do
29
29
  s.example "gradients"
30
30
  s.example "transparency"
31
31
  s.example "soft_masks"
32
+ s.example "blend_mode"
32
33
  s.example "fill_rules"
33
34
  end
34
35
 
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  #
3
- # Soft masks are user for more complex alpha channel manipulations. You can use
3
+ # Soft masks are used for more complex alpha channel manipulations. You can use
4
4
  # arbitrary drawing functions for creation of soft masks. The resulting alpha
5
5
  # channel is made of greyscale version of the drawing (luminosity channel to be
6
6
  # precise). So while you can use any combination of colors for soft masks it's
@@ -22,15 +22,14 @@ Gem::Specification.new do |spec|
22
22
  spec.authors = ["Gregory Brown", "Brad Ediger", "Daniel Nelson", "Jonathan Greenberg", "James Healy"]
23
23
  spec.email = ["gregory.t.brown@gmail.com", "brad@bradediger.com", "dnelson@bluejade.com", "greenberg@entryway.net", "jimmy@deefa.com"]
24
24
  spec.rubyforge_project = "prawn"
25
- spec.licenses = ['RUBY', 'GPL-2', 'GPL-3']
25
+ spec.licenses = %w(PRAWN GPL-2.0 GPL-3.0)
26
26
 
27
27
  spec.add_dependency('ttfunk', '~> 1.4.0')
28
- spec.add_dependency('pdf-core', "~> 0.6.0")
28
+ spec.add_dependency('pdf-core', "~> 0.6.1")
29
29
 
30
- spec.add_development_dependency('pdf-inspector', '~> 1.2.0')
30
+ spec.add_development_dependency('pdf-inspector', '~> 1.2.1')
31
31
  spec.add_development_dependency('yard')
32
- spec.add_development_dependency('rspec', '2.14.1')
33
- spec.add_development_dependency('mocha')
32
+ spec.add_development_dependency('rspec', '~> 3.0')
34
33
  spec.add_development_dependency('rake')
35
34
  spec.add_development_dependency('simplecov')
36
35
  spec.add_development_dependency('prawn-manual_builder', ">= 0.2.0")
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative "../../spec/spec_helper"
4
+
5
+ describe "When making a pdf file with png images" do
6
+ image_dir = "#{Prawn::BASEDIR}/data/images"
7
+ images = [
8
+ ["Type 0", "#{image_dir}/web-links.png"],
9
+ ["Type 0 with transparency", "#{image_dir}/ruport_type0.png"],
10
+ ["Type 2", "#{image_dir}/ruport.png"],
11
+ ["Type 2 with transparency", "#{image_dir}/arrow2.png"],
12
+ ["Type 3", "#{image_dir}/indexed_color.png"],
13
+ ["Type 3 with transparency", "#{image_dir}/indexed_transparency.png"],
14
+ ["Type 4", "#{image_dir}/page_white_text.png"],
15
+ ["Type 6", "#{image_dir}/dice.png"],
16
+ ["Type 6 in 16bit", "#{image_dir}/16bit.png"]
17
+ ]
18
+
19
+ images.each do |header, file|
20
+ describe "and the image is #{header}" do
21
+ it "does not error" do
22
+ expect do
23
+ Prawn::Document.generate("#{header}.pdf", :page_size => "A5") do
24
+ fill_color "00FF00"
25
+
26
+ fill_rectangle bounds.top_left, bounds.width, bounds.height
27
+ text header
28
+
29
+ image file, :at => [50, 450]
30
+ end
31
+ end.to_not raise_error
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,71 @@
1
+ # encoding: utf-8
2
+
3
+ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
4
+
5
+ module BlendModeHelper
6
+ def make_blend_mode(blend_mode)
7
+ @pdf.blend_mode(blend_mode) do
8
+ yield if block_given?
9
+ end
10
+ end
11
+ end
12
+
13
+ describe "Document with with blend_mode" do
14
+ include BlendModeHelper
15
+
16
+ it "the PDF version should be at least 1.4" do
17
+ create_pdf
18
+ make_blend_mode(:Multiply)
19
+ str = @pdf.render
20
+ expect(str[0, 8]).to eq("%PDF-1.4")
21
+ end
22
+
23
+ it "a new extended graphics state should be created for " \
24
+ "each unique blend mode setting" do
25
+ create_pdf
26
+ make_blend_mode(:Multiply) do
27
+ make_blend_mode(:Screen)
28
+ end
29
+ extgstates = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates
30
+ expect(extgstates.length).to eq(2)
31
+ end
32
+
33
+ it "a new extended graphics state should not be created for " \
34
+ "each duplicate blend mode setting" do
35
+ create_pdf
36
+ make_blend_mode(:Multiply) do
37
+ make_blend_mode(:Multiply)
38
+ end
39
+ extgstates = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates
40
+ expect(extgstates.length).to eq(1)
41
+ end
42
+
43
+ it "setting the blend mode with only one parameter sets a single blend mode value" do
44
+ create_pdf
45
+ make_blend_mode(:Multiply)
46
+ extgstate = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates.first
47
+ expect(extgstate[:blend_mode]).to eq(:Multiply)
48
+ end
49
+
50
+ it "setting the blend mode with multiple parameters sets an array of blend modes" do
51
+ create_pdf
52
+ make_blend_mode([:Multiply, :Screen, :Overlay])
53
+ extgstate = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates.first
54
+ expect(extgstate[:blend_mode]).to eq([:Multiply, :Screen, :Overlay])
55
+ end
56
+
57
+ describe "with more than one page" do
58
+ include BlendModeHelper
59
+
60
+ it "the extended graphic state resource should be added to both pages" do
61
+ create_pdf
62
+ make_blend_mode(:Multiply)
63
+ @pdf.start_new_page
64
+ make_blend_mode(:Multiply)
65
+ extgstates = PDF::Inspector::ExtGState.analyze(@pdf.render).extgstates
66
+ extgstate = extgstates[0]
67
+ expect(extgstates.length).to eq(2)
68
+ expect(extgstate[:blend_mode]).to eq(:Multiply)
69
+ end
70
+ end
71
+ end
@@ -77,14 +77,14 @@ describe "when generating a document from a subclass" do
77
77
  Prawn::Document.extensions.delete(mod1)
78
78
  Prawn::Document.extensions.delete(mod2)
79
79
 
80
- expect(Prawn::Document.new.respond_to?(:test_extensions1)).to be_false
81
- expect(Prawn::Document.new.respond_to?(:test_extensions2)).to be_false
80
+ expect(Prawn::Document.new.respond_to?(:test_extensions1)).to eq false
81
+ expect(Prawn::Document.new.respond_to?(:test_extensions2)).to eq false
82
82
 
83
83
  # verify these still exist on custom class
84
84
  expect(custom_document.extensions).to eq([mod1, mod2])
85
85
 
86
- expect(custom_document.new.respond_to?(:test_extensions1)).to be_true
87
- expect(custom_document.new.respond_to?(:test_extensions2)).to be_true
86
+ expect(custom_document.new.respond_to?(:test_extensions1)).to eq true
87
+ expect(custom_document.new.respond_to?(:test_extensions2)).to eq true
88
88
  end
89
89
  end
90
90
 
@@ -176,7 +176,7 @@ describe "on_page_create callback" do
176
176
  end
177
177
 
178
178
  it "should be delegated from Document to renderer" do
179
- expect(@pdf.respond_to?(:on_page_create)).to be_true
179
+ expect(@pdf.respond_to?(:on_page_create)).to eq true
180
180
  end
181
181
 
182
182
  it "should be invoked with document" do
@@ -190,8 +190,8 @@ describe "on_page_create callback" do
190
190
  end
191
191
 
192
192
  it "should be invoked for each new page" do
193
- trigger = mock
194
- trigger.expects(:fire).times(5)
193
+ trigger = double("trigger")
194
+ expect(trigger).to receive(:fire).exactly(5).times
195
195
 
196
196
  @pdf.renderer.on_page_create { trigger.fire }
197
197
 
@@ -199,11 +199,11 @@ describe "on_page_create callback" do
199
199
  end
200
200
 
201
201
  it "should be replaceable" do
202
- trigger1 = mock
203
- trigger1.expects(:fire).times(1)
202
+ trigger1 = double("trigger 1")
203
+ expect(trigger1).to receive(:fire).once
204
204
 
205
- trigger2 = mock
206
- trigger2.expects(:fire).times(1)
205
+ trigger2 = double("trigger 2")
206
+ expect(trigger2).to receive(:fire).once
207
207
 
208
208
  @pdf.renderer.on_page_create { trigger1.fire }
209
209
 
@@ -215,8 +215,8 @@ describe "on_page_create callback" do
215
215
  end
216
216
 
217
217
  it "should be clearable by calling on_page_create without a block" do
218
- trigger = mock
219
- trigger.expects(:fire).times(1)
218
+ trigger = double("trigger")
219
+ expect(trigger).to receive(:fire).once
220
220
 
221
221
  @pdf.renderer.on_page_create { trigger.fire }
222
222
 
@@ -231,8 +231,8 @@ end
231
231
  describe "Document compression" do
232
232
  it "should not compress the page content stream if compression is disabled" do
233
233
  pdf = Prawn::Document.new(:compress => false)
234
- pdf.page.content.stream.stubs(:compress!).returns(true)
235
- pdf.page.content.stream.expects(:compress!).never
234
+ allow(pdf.page.content.stream).to receive(:compress!).and_return(true)
235
+ expect(pdf.page.content.stream).to_not receive(:compress!)
236
236
 
237
237
  pdf.text "Hi There" * 20
238
238
  pdf.render
@@ -240,8 +240,8 @@ describe "Document compression" do
240
240
 
241
241
  it "should compress the page content stream if compression is enabled" do
242
242
  pdf = Prawn::Document.new(:compress => true)
243
- pdf.page.content.stream.stubs(:compress!).returns(true)
244
- pdf.page.content.stream.expects(:compress!).once
243
+ allow(pdf.page.content.stream).to receive(:compress!).and_return(true)
244
+ expect(pdf.page.content.stream).to receive(:compress!).once
245
245
 
246
246
  pdf.text "Hi There" * 20
247
247
  pdf.render
@@ -304,30 +304,31 @@ describe "When reopening pages" do
304
304
  end
305
305
 
306
306
  it "should restore the layout of the page" do
307
- Prawn::Document.new do
307
+ doc = Prawn::Document.new do
308
308
  start_new_page :layout => :landscape
309
- lsize = [bounds.width, bounds.height]
310
-
311
- [bounds.width, bounds.height].should == lsize
312
- go_to_page 1
313
- [bounds.width, bounds.height].should == lsize.reverse
314
309
  end
310
+
311
+ lsize = [doc.bounds.width, doc.bounds.height]
312
+
313
+ expect([doc.bounds.width, doc.bounds.height]).to eq lsize
314
+ doc.go_to_page 1
315
+ expect([doc.bounds.width, doc.bounds.height]).to eq lsize.reverse
315
316
  end
316
317
 
317
318
  it "should restore the margin box of the page" do
318
- Prawn::Document.new(:margin => [100, 100]) do
319
- page1_bounds = bounds
319
+ doc = Prawn::Document.new(:margin => [100, 100])
320
+ page1_bounds = doc.bounds
320
321
 
321
- start_new_page(:margin => [200, 200])
322
+ doc.start_new_page(:margin => [200, 200])
322
323
 
323
- [bounds.width, bounds.height].should == [page1_bounds.width - 200,
324
- page1_bounds.height - 200]
324
+ expect([doc.bounds.width, doc.bounds.height]).to eq(
325
+ [page1_bounds.width - 200, page1_bounds.height - 200]
326
+ )
325
327
 
326
- go_to_page(1)
328
+ doc.go_to_page(1)
327
329
 
328
- bounds.width.should == page1_bounds.width
329
- bounds.height.should == page1_bounds.height
330
- end
330
+ expect(doc.bounds.width).to eq page1_bounds.width
331
+ expect(doc.bounds.height).to eq page1_bounds.height
331
332
  end
332
333
  end
333
334
 
@@ -469,22 +470,17 @@ describe "The render() feature" do
469
470
  it "should trigger before_render callbacks just before rendering" do
470
471
  pdf = Prawn::Document.new
471
472
 
472
- seq = sequence("callback_order")
473
-
474
473
  # Verify the order: finalize -> fire callbacks -> render body
475
- pdf.renderer.expects(:finalize_all_page_contents).in_sequence(seq)
476
- trigger = mock
477
- trigger.expects(:fire).in_sequence(seq)
474
+ expect(pdf.renderer).to receive(:finalize_all_page_contents).and_call_original.ordered
478
475
 
479
- # Store away the render_body method to be called below
480
- render_body = pdf.renderer.method(:render_body)
481
- pdf.renderer.expects(:render_body).in_sequence(seq)
476
+ trigger = double("trigger")
477
+ expect(trigger).to receive(:fire).ordered
482
478
 
483
479
  pdf.renderer.before_render{ trigger.fire }
484
480
 
485
- # Render the body to set up object offsets
486
- render_body.call(StringIO.new)
487
- pdf.render
481
+ expect(pdf.renderer).to receive(:render_body).and_call_original.ordered
482
+
483
+ pdf.render(StringIO.new)
488
484
  end
489
485
 
490
486
  it "should be idempotent" do
@@ -574,31 +570,31 @@ describe "The number_pages method" do
574
570
 
575
571
  it "replaces the '<page>' string with the proper page number" do
576
572
  @pdf.start_new_page
577
- @pdf.expects(:text_box).with("1, test", :height => 50)
573
+ expect(@pdf).to receive(:text_box).with("1, test", :height => 50)
578
574
  @pdf.number_pages "<page>, test", :page_filter => :all
579
575
  end
580
576
 
581
577
  it "replaces the '<total>' string with the total page count" do
582
578
  @pdf.start_new_page
583
- @pdf.expects(:text_box).with("test, 1", :height => 50)
579
+ expect(@pdf).to receive(:text_box).with("test, 1", :height => 50)
584
580
  @pdf.number_pages "test, <total>", :page_filter => :all
585
581
  end
586
582
 
587
583
  it "must print each page if given the :all page_filter" do
588
584
  10.times { @pdf.start_new_page }
589
- @pdf.expects(:text_box).times(10)
585
+ expect(@pdf).to receive(:text_box).exactly(10).times
590
586
  @pdf.number_pages "test", :page_filter => :all
591
587
  end
592
588
 
593
589
  it "must print each page if no :page_filter is specified" do
594
590
  10.times { @pdf.start_new_page }
595
- @pdf.expects(:text_box).times(10)
591
+ expect(@pdf).to receive(:text_box).exactly(10).times
596
592
  @pdf.number_pages "test"
597
593
  end
598
594
 
599
595
  it "must not print the page number if given a nil filter" do
600
596
  10.times { @pdf.start_new_page }
601
- @pdf.expects(:text_box).never
597
+ expect(@pdf).to_not receive(:text_box)
602
598
  @pdf.number_pages "test", :page_filter => nil
603
599
  end
604
600
 
@@ -608,8 +604,8 @@ describe "The number_pages method" do
608
604
  it "increments the pages" do
609
605
  2.times { @pdf.start_new_page }
610
606
  options = { :page_filter => :all, :start_count_at => startat }
611
- @pdf.expects(:text_box).with("#{startat} 2", :height => 50)
612
- @pdf.expects(:text_box).with("#{startat + 1} 2", :height => 50)
607
+ expect(@pdf).to receive(:text_box).with("#{startat} 2", :height => 50)
608
+ expect(@pdf).to receive(:text_box).with("#{startat + 1} 2", :height => 50)
613
609
  @pdf.number_pages "<page> <total>", options
614
610
  end
615
611
  end
@@ -620,9 +616,9 @@ describe "The number_pages method" do
620
616
  it "defaults to start at page 1" do
621
617
  3.times { @pdf.start_new_page }
622
618
  options = { :page_filter => :all, :start_count_at => val }
623
- @pdf.expects(:text_box).with("1 3", :height => 50)
624
- @pdf.expects(:text_box).with("2 3", :height => 50)
625
- @pdf.expects(:text_box).with("3 3", :height => 50)
619
+ expect(@pdf).to receive(:text_box).with("1 3", :height => 50)
620
+ expect(@pdf).to receive(:text_box).with("2 3", :height => 50)
621
+ expect(@pdf).to receive(:text_box).with("3 3", :height => 50)
626
622
  @pdf.number_pages "<page> <total>", options
627
623
  end
628
624
  end
@@ -632,8 +628,8 @@ describe "The number_pages method" do
632
628
  context "total_pages option" do
633
629
  it "allows the total pages count to be overridden" do
634
630
  2.times { @pdf.start_new_page }
635
- @pdf.expects(:text_box).with("1 10", :height => 50)
636
- @pdf.expects(:text_box).with("2 10", :height => 50)
631
+ expect(@pdf).to receive(:text_box).with("1 10", :height => 50)
632
+ expect(@pdf).to receive(:text_box).with("2 10", :height => 50)
637
633
  @pdf.number_pages "<page> <total>", :page_filter => :all, :total_pages => 10
638
634
  end
639
635
  end
@@ -642,16 +638,16 @@ describe "The number_pages method" do
642
638
  context "such as :odd" do
643
639
  it "increments the pages" do
644
640
  3.times { @pdf.start_new_page }
645
- @pdf.expects(:text_box).with("1 3", :height => 50)
646
- @pdf.expects(:text_box).with("3 3", :height => 50)
647
- @pdf.expects(:text_box).with("2 3", :height => 50).never
641
+ expect(@pdf).to receive(:text_box).with("1 3", :height => 50)
642
+ expect(@pdf).to receive(:text_box).with("3 3", :height => 50)
643
+ expect(@pdf).to_not receive(:text_box).with("2 3", :height => 50)
648
644
  @pdf.number_pages "<page> <total>", :page_filter => :odd
649
645
  end
650
646
  end
651
647
  context "missing" do
652
648
  it "does not print any page numbers" do
653
649
  3.times { @pdf.start_new_page }
654
- @pdf.expects(:text_box).never
650
+ expect(@pdf).to_not receive(:text_box)
655
651
  @pdf.number_pages "<page> <total>", :page_filter => nil
656
652
  end
657
653
  end
@@ -661,10 +657,10 @@ describe "The number_pages method" do
661
657
  context "such as :odd and 7" do
662
658
  it "increments the pages" do
663
659
  3.times { @pdf.start_new_page }
664
- @pdf.expects(:text_box).with("1 3", :height => 50).never
665
- @pdf.expects(:text_box).with("5 3", :height => 50) # page 1
666
- @pdf.expects(:text_box).with("6 3", :height => 50).never # page 2
667
- @pdf.expects(:text_box).with("7 3", :height => 50) # page 3
660
+ expect(@pdf).to_not receive(:text_box).with("1 3", :height => 50)
661
+ expect(@pdf).to receive(:text_box).with("5 3", :height => 50) # page 1
662
+ expect(@pdf).to_not receive(:text_box).with("6 3", :height => 50) # page 2
663
+ expect(@pdf).to receive(:text_box).with("7 3", :height => 50) # page 3
668
664
  @pdf.number_pages "<page> <total>", :page_filter => :odd, :start_count_at => 5
669
665
  end
670
666
  end
@@ -672,12 +668,12 @@ describe "The number_pages method" do
672
668
  it "increments the pages" do
673
669
  6.times { @pdf.start_new_page }
674
670
  options = { :page_filter => lambda { |p| p != 2 && p != 5 }, :start_count_at => 4 }
675
- @pdf.expects(:text_box).with("4 6", :height => 50) # page 1
676
- @pdf.expects(:text_box).with("5 6", :height => 50).never # page 2
677
- @pdf.expects(:text_box).with("6 6", :height => 50) # page 3
678
- @pdf.expects(:text_box).with("7 6", :height => 50) # page 4
679
- @pdf.expects(:text_box).with("8 6", :height => 50).never # page 5
680
- @pdf.expects(:text_box).with("9 6", :height => 50) # page 6
671
+ expect(@pdf).to receive(:text_box).with("4 6", :height => 50) # page 1
672
+ expect(@pdf).to_not receive(:text_box).with("5 6", :height => 50) # page 2
673
+ expect(@pdf).to receive(:text_box).with("6 6", :height => 50) # page 3
674
+ expect(@pdf).to receive(:text_box).with("7 6", :height => 50) # page 4
675
+ expect(@pdf).to_not receive(:text_box).with("8 6", :height => 50) # page 5
676
+ expect(@pdf).to receive(:text_box).with("9 6", :height => 50) # page 6
681
677
  @pdf.number_pages "<page> <total>", options
682
678
  end
683
679
  end
@@ -689,17 +685,17 @@ describe "The number_pages method" do
689
685
  end
690
686
 
691
687
  it "with 10 height" do
692
- @pdf.expects(:text_box).with("1 1", :height => 10)
688
+ expect(@pdf).to receive(:text_box).with("1 1", :height => 10)
693
689
  @pdf.number_pages "<page> <total>", :height => 10
694
690
  end
695
691
 
696
692
  it "with nil height" do
697
- @pdf.expects(:text_box).with("1 1", :height => nil)
693
+ expect(@pdf).to receive(:text_box).with("1 1", :height => nil)
698
694
  @pdf.number_pages "<page> <total>", :height => nil
699
695
  end
700
696
 
701
697
  it "with no height" do
702
- @pdf.expects(:text_box).with("1 1", :height => 50)
698
+ expect(@pdf).to receive(:text_box).with("1 1", height: 50)
703
699
  @pdf.number_pages "<page> <total>"
704
700
  end
705
701
  end
@@ -712,17 +708,17 @@ describe "The page_match? method" do
712
708
  end
713
709
 
714
710
  it "returns nil given no filter" do
715
- expect(@pdf.page_match?(:nil, 1)).to be_false
711
+ expect(@pdf.page_match?(:nil, 1)).to be_falsey
716
712
  end
717
713
 
718
714
  it "must provide an :all filter" do
719
- expect((1..@pdf.page_count).all? { |i| @pdf.page_match?(:all, i) }).to be_true
715
+ expect((1..@pdf.page_count).all? { |i| @pdf.page_match?(:all, i) }).to eq true
720
716
  end
721
717
 
722
718
  it "must provide an :odd filter" do
723
719
  odd, even = (1..@pdf.page_count).partition(&:odd?)
724
- expect(odd.all? { |i| @pdf.page_match?(:odd, i) }).to be_true
725
- expect(even.any? { |i| @pdf.page_match?(:odd, i) }).to be_false
720
+ expect(odd.all? { |i| @pdf.page_match?(:odd, i) }).to eq true
721
+ expect(even.any? { |i| @pdf.page_match?(:odd, i) }).to be_falsey
726
722
  end
727
723
 
728
724
  it "must be able to filter by an array of page numbers" do