prawn 2.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +7 -5
  3. data/lib/prawn.rb +4 -4
  4. data/lib/prawn/document.rb +47 -46
  5. data/lib/prawn/document/bounding_box.rb +13 -19
  6. data/lib/prawn/document/column_box.rb +3 -5
  7. data/lib/prawn/document/internals.rb +0 -1
  8. data/lib/prawn/document/span.rb +12 -12
  9. data/lib/prawn/errors.rb +32 -33
  10. data/lib/prawn/font.rb +29 -36
  11. data/lib/prawn/font/afm.rb +20 -20
  12. data/lib/prawn/font/dfont.rb +0 -1
  13. data/lib/prawn/font/ttf.rb +30 -27
  14. data/lib/prawn/font_metric_cache.rb +4 -8
  15. data/lib/prawn/graphics.rb +37 -42
  16. data/lib/prawn/graphics/cap_style.rb +1 -1
  17. data/lib/prawn/graphics/color.rb +21 -23
  18. data/lib/prawn/graphics/dash.rb +5 -6
  19. data/lib/prawn/graphics/join_style.rb +1 -2
  20. data/lib/prawn/graphics/patterns.rb +25 -21
  21. data/lib/prawn/graphics/transformation.rb +4 -5
  22. data/lib/prawn/graphics/transparency.rb +6 -8
  23. data/lib/prawn/grid.rb +21 -14
  24. data/lib/prawn/image_handler.rb +2 -2
  25. data/lib/prawn/images.rb +29 -31
  26. data/lib/prawn/images/image.rb +1 -1
  27. data/lib/prawn/images/jpg.rb +10 -12
  28. data/lib/prawn/images/png.rb +13 -13
  29. data/lib/prawn/measurements.rb +7 -14
  30. data/lib/prawn/outline.rb +6 -6
  31. data/lib/prawn/repeater.rb +1 -5
  32. data/lib/prawn/security.rb +17 -25
  33. data/lib/prawn/security/arcfour.rb +1 -1
  34. data/lib/prawn/soft_mask.rb +11 -12
  35. data/lib/prawn/stamp.rb +16 -8
  36. data/lib/prawn/text.rb +23 -20
  37. data/lib/prawn/text/box.rb +3 -6
  38. data/lib/prawn/text/formatted/arranger.rb +9 -12
  39. data/lib/prawn/text/formatted/box.rb +23 -22
  40. data/lib/prawn/text/formatted/fragment.rb +0 -4
  41. data/lib/prawn/text/formatted/line_wrap.rb +13 -24
  42. data/lib/prawn/text/formatted/parser.rb +16 -20
  43. data/lib/prawn/text/formatted/wrap.rb +2 -7
  44. data/lib/prawn/utilities.rb +6 -3
  45. data/lib/prawn/version.rb +1 -1
  46. data/manual/basic_concepts/basic_concepts.rb +0 -2
  47. data/manual/basic_concepts/view.rb +1 -1
  48. data/manual/bounding_box/bounding_box.rb +0 -3
  49. data/manual/bounding_box/russian_boxes.rb +7 -8
  50. data/manual/bounding_box/stretchy.rb +0 -1
  51. data/manual/contents.rb +2 -2
  52. data/manual/cover.rb +11 -12
  53. data/manual/document_and_page_options/document_and_page_options.rb +2 -5
  54. data/manual/document_and_page_options/metadata.rb +10 -10
  55. data/manual/document_and_page_options/page_size.rb +0 -1
  56. data/manual/graphics/fill_rules.rb +5 -4
  57. data/manual/graphics/graphics.rb +0 -3
  58. data/manual/graphics/lines_and_curves.rb +1 -1
  59. data/manual/graphics/rotate.rb +0 -2
  60. data/manual/graphics/scale.rb +4 -2
  61. data/manual/graphics/soft_masks.rb +0 -1
  62. data/manual/graphics/stroke_cap.rb +1 -1
  63. data/manual/graphics/stroke_join.rb +1 -1
  64. data/manual/graphics/translate.rb +3 -3
  65. data/manual/graphics/transparency.rb +0 -1
  66. data/manual/how_to_read_this_manual.rb +0 -1
  67. data/manual/images/images.rb +0 -3
  68. data/manual/layout/boxes.rb +5 -5
  69. data/manual/layout/content.rb +2 -2
  70. data/manual/layout/layout.rb +0 -3
  71. data/manual/outline/outline.rb +0 -3
  72. data/manual/repeatable_content/page_numbering.rb +1 -1
  73. data/manual/repeatable_content/repeatable_content.rb +0 -3
  74. data/manual/repeatable_content/repeater.rb +6 -6
  75. data/manual/security/encryption.rb +0 -2
  76. data/manual/security/permissions.rb +0 -2
  77. data/manual/security/security.rb +0 -3
  78. data/manual/text/alignment.rb +3 -3
  79. data/manual/text/color.rb +0 -1
  80. data/manual/text/column_box.rb +0 -1
  81. data/manual/text/fallback_fonts.rb +2 -2
  82. data/manual/text/formatted_callbacks.rb +3 -2
  83. data/manual/text/paragraph_indentation.rb +2 -3
  84. data/manual/text/registering_families.rb +13 -9
  85. data/manual/text/rotation.rb +0 -1
  86. data/manual/text/text.rb +0 -3
  87. data/manual/text/text_box_overflow.rb +7 -5
  88. data/manual/text/utf8.rb +1 -1
  89. data/manual/text/win_ansi_charset.rb +2 -2
  90. data/prawn.gemspec +4 -4
  91. data/spec/acceptance/png.rb +6 -7
  92. data/spec/annotations_spec.rb +21 -28
  93. data/spec/bounding_box_spec.rb +100 -109
  94. data/spec/column_box_spec.rb +26 -32
  95. data/spec/destinations_spec.rb +2 -4
  96. data/spec/document_spec.rb +145 -151
  97. data/spec/extensions/mocha.rb +0 -1
  98. data/spec/font_metric_cache_spec.rb +7 -7
  99. data/spec/font_spec.rb +103 -102
  100. data/spec/formatted_text_arranger_spec.rb +76 -74
  101. data/spec/formatted_text_box_spec.rb +170 -159
  102. data/spec/formatted_text_fragment_spec.rb +57 -56
  103. data/spec/graphics_spec.rb +158 -175
  104. data/spec/grid_spec.rb +28 -29
  105. data/spec/image_handler_spec.rb +4 -5
  106. data/spec/images_spec.rb +50 -36
  107. data/spec/inline_formatted_text_parser_spec.rb +397 -393
  108. data/spec/jpg_spec.rb +4 -6
  109. data/spec/line_wrap_spec.rb +54 -55
  110. data/spec/measurement_units_spec.rb +12 -15
  111. data/spec/outline_spec.rb +77 -98
  112. data/spec/png_spec.rb +55 -65
  113. data/spec/reference_spec.rb +3 -3
  114. data/spec/repeater_spec.rb +20 -26
  115. data/spec/security_spec.rb +42 -49
  116. data/spec/soft_mask_spec.rb +4 -5
  117. data/spec/span_spec.rb +5 -6
  118. data/spec/spec_helper.rb +2 -4
  119. data/spec/stamp_spec.rb +41 -22
  120. data/spec/stroke_styles_spec.rb +36 -39
  121. data/spec/text_at_spec.rb +28 -29
  122. data/spec/text_box_spec.rb +160 -165
  123. data/spec/text_rendering_mode_spec.rb +9 -9
  124. data/spec/text_spacing_spec.rb +13 -13
  125. data/spec/text_spec.rb +116 -124
  126. data/spec/text_with_inline_formatting_spec.rb +5 -5
  127. data/spec/transparency_spec.rb +20 -20
  128. data/spec/view_spec.rb +0 -1
  129. metadata +7 -7
@@ -5,30 +5,28 @@ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
5
5
  describe "A column box" do
6
6
  it "has sensible left and right values" do
7
7
  create_pdf
8
- @pdf.column_box [0, @pdf.cursor], :width => @pdf.bounds.width,
9
- :height => 200, :columns => 3, :spacer => 25 do
10
- left = @pdf.bounds.left
11
- right = @pdf.bounds.right
8
+ @pdf.column_box [0, @pdf.cursor], :width => @pdf.bounds.width, :height => 200, :columns => 3, :spacer => 25 do
9
+ left = @pdf.bounds.left
10
+ right = @pdf.bounds.right
12
11
 
13
- @pdf.bounds.move_past_bottom # next column
12
+ @pdf.bounds.move_past_bottom # next column
14
13
 
15
- @pdf.bounds.left.should be > left
16
- @pdf.bounds.left.should be > right
17
- @pdf.bounds.right.should be > @pdf.bounds.left
18
- end
14
+ expect(@pdf.bounds.left).to be > left
15
+ expect(@pdf.bounds.left).to be > right
16
+ expect(@pdf.bounds.right).to be > @pdf.bounds.left
17
+ end
19
18
  end
20
19
 
21
20
  it "includes spacers between columns but not at the end" do
22
21
  create_pdf
23
- @pdf.column_box [0, @pdf.cursor], :width => 500,
24
- :height => 200, :columns => 3, :spacer => 25 do
25
- @pdf.bounds.width.should == 150 # (500 - (25 * 2)) / 3
22
+ @pdf.column_box [0, @pdf.cursor], :width => 500, :height => 200, :columns => 3, :spacer => 25 do
23
+ expect(@pdf.bounds.width).to eq(150) # (500 - (25 * 2)) / 3
26
24
 
27
- @pdf.bounds.move_past_bottom
28
- @pdf.bounds.move_past_bottom
25
+ @pdf.bounds.move_past_bottom
26
+ @pdf.bounds.move_past_bottom
29
27
 
30
- @pdf.bounds.right.should == 500
31
- end
28
+ expect(@pdf.bounds.right).to eq(500)
29
+ end
32
30
  end
33
31
 
34
32
  it "does not reset the top margin on a new page by default" do
@@ -36,15 +34,13 @@ describe "A column box" do
36
34
  page_top = @pdf.cursor
37
35
  @pdf.move_down 50
38
36
  init_column_top = @pdf.cursor
39
- @pdf.column_box [0, @pdf.cursor], :width => 500,
40
- :height => 200, :columns => 2 do
37
+ @pdf.column_box [0, @pdf.cursor], :width => 500, :height => 200, :columns => 2 do
38
+ @pdf.bounds.move_past_bottom
39
+ @pdf.bounds.move_past_bottom
41
40
 
42
- @pdf.bounds.move_past_bottom
43
- @pdf.bounds.move_past_bottom
44
-
45
- @pdf.bounds.absolute_top.should == init_column_top
46
- @pdf.bounds.absolute_top.should_not == page_top
47
- end
41
+ expect(@pdf.bounds.absolute_top).to eq(init_column_top)
42
+ expect(@pdf.bounds.absolute_top).not_to eq(page_top)
43
+ end
48
44
  end
49
45
 
50
46
  it "does reset the top margin when reflow_margins is set" do
@@ -52,14 +48,12 @@ describe "A column box" do
52
48
  page_top = @pdf.cursor
53
49
  @pdf.move_down 50
54
50
  init_column_top = @pdf.cursor
55
- @pdf.column_box [0, @pdf.cursor], :width => 500, :reflow_margins => true,
56
- :height => 200, :columns => 2 do
57
-
58
- @pdf.bounds.move_past_bottom
59
- @pdf.bounds.move_past_bottom
51
+ @pdf.column_box [0, @pdf.cursor], :width => 500, :reflow_margins => true, :height => 200, :columns => 2 do
52
+ @pdf.bounds.move_past_bottom
53
+ @pdf.bounds.move_past_bottom
60
54
 
61
- @pdf.bounds.absolute_top.should == page_top
62
- @pdf.bounds.absolute_top.should_not == init_column_top
63
- end
55
+ expect(@pdf.bounds.absolute_top).to eq(page_top)
56
+ expect(@pdf.bounds.absolute_top).not_to eq(init_column_top)
57
+ end
64
58
  end
65
59
  end
@@ -3,13 +3,11 @@
3
3
  require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
4
4
 
5
5
  describe "When creating destinations" do
6
-
7
6
  before(:each) { create_pdf }
8
7
 
9
8
  it "should add entry to Dests name tree" do
10
- @pdf.dests.data.empty?.should == true
9
+ expect(@pdf.dests.data.empty?).to eq(true)
11
10
  @pdf.add_dest "candy", "chocolate"
12
- @pdf.dests.data.size.should == 1
11
+ expect(@pdf.dests.data.size).to eq(1)
13
12
  end
14
-
15
13
  end
@@ -5,27 +5,27 @@ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
5
5
 
6
6
  describe "Prawn::Document.new" do
7
7
  it "should not modify its argument" do
8
- options = {:page_layout => :landscape}
8
+ options = { :page_layout => :landscape }
9
9
  Prawn::Document.new(options)
10
- options.should == {:page_layout => :landscape}
10
+ expect(options).to eq(:page_layout => :landscape)
11
11
  end
12
12
  end
13
13
 
14
14
  describe "The cursor" do
15
15
  it "should == pdf.y - bounds.absolute_bottom" do
16
16
  pdf = Prawn::Document.new
17
- pdf.cursor.should == pdf.bounds.top
17
+ expect(pdf.cursor).to eq(pdf.bounds.top)
18
18
 
19
19
  pdf.y = 300
20
- pdf.cursor.should == pdf.y - pdf.bounds.absolute_bottom
20
+ expect(pdf.cursor).to eq(pdf.y - pdf.bounds.absolute_bottom)
21
21
  end
22
22
 
23
23
  it "should be able to move relative to the bottom margin" do
24
24
  pdf = Prawn::Document.new
25
25
  pdf.move_cursor_to(10)
26
26
 
27
- pdf.cursor.should == 10
28
- pdf.y.should == pdf.cursor + pdf.bounds.absolute_bottom
27
+ expect(pdf.cursor).to eq(10)
28
+ expect(pdf.y).to eq(pdf.cursor + pdf.bounds.absolute_bottom)
29
29
  end
30
30
  end
31
31
 
@@ -51,7 +51,7 @@ describe "when generating a document with a custom text formatter" do
51
51
  pdf = Prawn::Document.new text_formatter: TestTextFormatter
52
52
  pdf.text "Dr. Who?", inline_format: true
53
53
  text = PDF::Inspector::Text.analyze(pdf.render)
54
- text.strings.first.should == "Just 'The Doctor'."
54
+ expect(text.strings.first).to eq("Just 'The Doctor'.")
55
55
  end
56
56
  end
57
57
 
@@ -59,8 +59,8 @@ describe "when generating a document from a subclass" do
59
59
  it "should be an instance of the subclass" do
60
60
  custom_document = Class.new(Prawn::Document)
61
61
  custom_document.generate(Tempfile.new("generate_test").path) do |e|
62
- e.class.should == custom_document
63
- e.should be_a_kind_of(Prawn::Document)
62
+ expect(e.class).to eq(custom_document)
63
+ expect(e).to be_a_kind_of(Prawn::Document)
64
64
  end
65
65
  end
66
66
 
@@ -71,44 +71,40 @@ describe "when generating a document from a subclass" do
71
71
  Prawn::Document.extensions << mod1 << mod2
72
72
 
73
73
  custom_document = Class.new(Prawn::Document)
74
- custom_document.extensions.should == [mod1, mod2]
74
+ expect(custom_document.extensions).to eq([mod1, mod2])
75
75
 
76
76
  # remove the extensions we added to prawn document
77
77
  Prawn::Document.extensions.delete(mod1)
78
78
  Prawn::Document.extensions.delete(mod2)
79
79
 
80
- Prawn::Document.new.respond_to?(:test_extensions1).should be_false
81
- Prawn::Document.new.respond_to?(:test_extensions2).should be_false
80
+ expect(Prawn::Document.new.respond_to?(:test_extensions1)).to be_false
81
+ expect(Prawn::Document.new.respond_to?(:test_extensions2)).to be_false
82
82
 
83
83
  # verify these still exist on custom class
84
- custom_document.extensions.should == [mod1, mod2]
84
+ expect(custom_document.extensions).to eq([mod1, mod2])
85
85
 
86
- custom_document.new.respond_to?(:test_extensions1).should be_true
87
- custom_document.new.respond_to?(:test_extensions2).should be_true
86
+ expect(custom_document.new.respond_to?(:test_extensions1)).to be_true
87
+ expect(custom_document.new.respond_to?(:test_extensions2)).to be_true
88
88
  end
89
-
90
89
  end
91
90
 
92
-
93
91
  describe "When creating multi-page documents" do
94
-
95
92
  before(:each) { create_pdf }
96
93
 
97
94
  it "should initialize with a single page" do
98
95
  page_counter = PDF::Inspector::Page.analyze(@pdf.render)
99
96
 
100
- page_counter.pages.size.should == 1
101
- @pdf.page_count.should == 1
97
+ expect(page_counter.pages.size).to eq(1)
98
+ expect(@pdf.page_count).to eq(1)
102
99
  end
103
100
 
104
101
  it "should provide an accurate page_count" do
105
102
  3.times { @pdf.start_new_page }
106
103
  page_counter = PDF::Inspector::Page.analyze(@pdf.render)
107
104
 
108
- page_counter.pages.size.should == 4
109
- @pdf.page_count.should == 4
105
+ expect(page_counter.pages.size).to eq(4)
106
+ expect(@pdf.page_count).to eq(4)
110
107
  end
111
-
112
108
  end
113
109
 
114
110
  describe "When beginning each new page" do
@@ -121,11 +117,11 @@ describe "When beginning each new page" do
121
117
  output = @pdf.render
122
118
  images = PDF::Inspector::XObject.analyze(output)
123
119
  # there should be 2 images in the page resources
124
- images.page_xobjects.first.size.should == 1
120
+ expect(images.page_xobjects.first.size).to eq(1)
125
121
  end
126
122
  it "should place a background image if it is in options block" do
127
- @pdf.instance_variable_defined?(:@background).should == true
128
- @pdf.instance_variable_get(:@background).should == @filename
123
+ expect(@pdf.instance_variable_defined?(:@background)).to eq(true)
124
+ expect(@pdf.instance_variable_get(:@background)).to eq(@filename)
129
125
  end
130
126
  end
131
127
  end
@@ -135,7 +131,7 @@ describe "Prawn::Document#float" do
135
131
  create_pdf
136
132
  orig_y = @pdf.y
137
133
  @pdf.float { @pdf.text "Foo" }
138
- @pdf.y.should == orig_y
134
+ expect(@pdf.y).to eq(orig_y)
139
135
  end
140
136
 
141
137
  it "should teleport across pages if necessary" do
@@ -149,30 +145,29 @@ describe "Prawn::Document#float" do
149
145
  @pdf.text "Baz"
150
146
 
151
147
  pages = PDF::Inspector::Page.analyze(@pdf.render).pages
152
- pages.size.should == 2
153
- pages[0][:strings].should == ["Foo", "Baz"]
154
- pages[1][:strings].should == ["Bar"]
148
+ expect(pages.size).to eq(2)
149
+ expect(pages[0][:strings]).to eq(["Foo", "Baz"])
150
+ expect(pages[1][:strings]).to eq(["Bar"])
155
151
  end
156
152
  end
157
153
 
158
154
  describe "The page_number method" do
159
155
  it "should be 1 for a new document" do
160
156
  pdf = Prawn::Document.new
161
- pdf.page_number.should == 1
157
+ expect(pdf.page_number).to eq(1)
162
158
  end
163
159
 
164
160
  it "should be 0 for documents with no pages" do
165
161
  pdf = Prawn::Document.new(:skip_page_creation => true)
166
- pdf.page_number.should == 0
162
+ expect(pdf.page_number).to eq(0)
167
163
  end
168
164
 
169
165
  it "should be changed by go_to_page" do
170
166
  pdf = Prawn::Document.new
171
167
  10.times { pdf.start_new_page }
172
168
  pdf.go_to_page 3
173
- pdf.page_number.should == 3
169
+ expect(pdf.page_number).to eq(3)
174
170
  end
175
-
176
171
  end
177
172
 
178
173
  describe "on_page_create callback" do
@@ -191,11 +186,11 @@ describe "on_page_create callback" do
191
186
 
192
187
  @pdf.start_new_page
193
188
 
194
- called_with.should == [@pdf]
189
+ expect(called_with).to eq([@pdf])
195
190
  end
196
191
 
197
192
  it "should be invoked for each new page" do
198
- trigger = mock()
193
+ trigger = mock
199
194
  trigger.expects(:fire).times(5)
200
195
 
201
196
  @pdf.renderer.on_page_create { trigger.fire }
@@ -204,40 +199,37 @@ describe "on_page_create callback" do
204
199
  end
205
200
 
206
201
  it "should be replaceable" do
207
- trigger1 = mock()
208
- trigger1.expects(:fire).times(1)
202
+ trigger1 = mock
203
+ trigger1.expects(:fire).times(1)
209
204
 
210
- trigger2 = mock()
211
- trigger2.expects(:fire).times(1)
205
+ trigger2 = mock
206
+ trigger2.expects(:fire).times(1)
212
207
 
213
- @pdf.renderer.on_page_create { trigger1.fire }
208
+ @pdf.renderer.on_page_create { trigger1.fire }
214
209
 
215
- @pdf.start_new_page
210
+ @pdf.start_new_page
216
211
 
217
- @pdf.renderer.on_page_create { trigger2.fire }
212
+ @pdf.renderer.on_page_create { trigger2.fire }
218
213
 
219
- @pdf.start_new_page
214
+ @pdf.start_new_page
220
215
  end
221
216
 
222
217
  it "should be clearable by calling on_page_create without a block" do
223
- trigger = mock()
224
- trigger.expects(:fire).times(1)
218
+ trigger = mock
219
+ trigger.expects(:fire).times(1)
225
220
 
226
- @pdf.renderer.on_page_create { trigger.fire }
221
+ @pdf.renderer.on_page_create { trigger.fire }
227
222
 
228
- @pdf.start_new_page
223
+ @pdf.start_new_page
229
224
 
230
- @pdf.renderer.on_page_create
225
+ @pdf.renderer.on_page_create
231
226
 
232
- @pdf.start_new_page
227
+ @pdf.start_new_page
233
228
  end
234
-
235
229
  end
236
230
 
237
231
  describe "Document compression" do
238
-
239
232
  it "should not compress the page content stream if compression is disabled" do
240
-
241
233
  pdf = Prawn::Document.new(:compress => false)
242
234
  pdf.page.content.stream.stubs(:compress!).returns(true)
243
235
  pdf.page.content.stream.expects(:compress!).never
@@ -247,7 +239,6 @@ describe "Document compression" do
247
239
  end
248
240
 
249
241
  it "should compress the page content stream if compression is enabled" do
250
-
251
242
  pdf = Prawn::Document.new(:compress => true)
252
243
  pdf.page.content.stream.stubs(:compress!).returns(true)
253
244
  pdf.page.content.stream.expects(:compress!).once
@@ -260,21 +251,21 @@ describe "Document compression" do
260
251
  doc_uncompressed = Prawn::Document.new
261
252
  doc_compressed = Prawn::Document.new(:compress => true)
262
253
  [doc_compressed, doc_uncompressed].each do |pdf|
263
- pdf.font "#{Prawn::DATADIR}/fonts/gkai00mp.ttf"
264
- pdf.text "更可怕的是,同质化竞争对手可以按照URL中后面这个ID来遍历" * 10
254
+ pdf.font "#{Prawn::DATADIR}/fonts/gkai00mp.ttf"
255
+ pdf.text "更可怕的是,同质化竞争对手可以按照URL中后面这个ID来遍历" * 10
265
256
  end
266
257
 
267
- doc_compressed.render.length.should be < doc_uncompressed.render.length
258
+ expect(doc_compressed.render.length).to be < doc_uncompressed.render.length
268
259
  end
269
-
270
260
  end
271
261
 
272
262
  describe "Document metadata" do
273
263
  it "should output strings as UTF-16 with a byte order mark" do
274
- pdf = Prawn::Document.new(:info => {:Author => "Lóránt"})
275
- pdf.state.store.info.object.should =~
264
+ pdf = Prawn::Document.new(:info => { :Author => "Lóránt" })
265
+ expect(pdf.state.store.info.object).to match(
276
266
  # UTF-16: BOM L ó r á n t
277
267
  %r{/Author\s*<feff004c00f3007200e1006e0074>}i
268
+ )
278
269
  end
279
270
  end
280
271
 
@@ -295,17 +286,21 @@ describe "When reopening pages" do
295
286
 
296
287
  it "should insert pages after the current page when calling start_new_page" do
297
288
  pdf = Prawn::Document.new
298
- 3.times { |i| pdf.text "Old page #{i+1}"; pdf.start_new_page }
289
+ 3.times do |i|
290
+ pdf.text "Old page #{i + 1}"
291
+ pdf.start_new_page
292
+ end
293
+
299
294
  pdf.go_to_page 1
300
295
  pdf.start_new_page
301
296
  pdf.text "New page 2"
302
297
 
303
- pdf.page_number.should == 2
298
+ expect(pdf.page_number).to eq(2)
304
299
 
305
300
  pages = PDF::Inspector::Page.analyze(pdf.render).pages
306
- pages.size.should == 5
307
- pages[1][:strings].should == ["New page 2"]
308
- pages[2][:strings].should == ["Old page 2"]
301
+ expect(pages.size).to eq(5)
302
+ expect(pages[1][:strings]).to eq(["New page 2"])
303
+ expect(pages[2][:strings]).to eq(["Old page 2"])
309
304
  end
310
305
 
311
306
  it "should restore the layout of the page" do
@@ -325,7 +320,7 @@ describe "When reopening pages" do
325
320
 
326
321
  start_new_page(:margin => [200, 200])
327
322
 
328
- [bounds.width, bounds.height].should == [page1_bounds.width - 200,
323
+ [bounds.width, bounds.height].should == [page1_bounds.width - 200,
329
324
  page1_bounds.height - 200]
330
325
 
331
326
  go_to_page(1)
@@ -333,7 +328,6 @@ describe "When reopening pages" do
333
328
  bounds.width.should == page1_bounds.width
334
329
  bounds.height.should == page1_bounds.height
335
330
  end
336
-
337
331
  end
338
332
  end
339
333
 
@@ -341,40 +335,38 @@ describe "When setting page size" do
341
335
  it "should default to LETTER" do
342
336
  @pdf = Prawn::Document.new
343
337
  pages = PDF::Inspector::Page.analyze(@pdf.render).pages
344
- pages.first[:size].should == PDF::Core::PageGeometry::SIZES["LETTER"]
338
+ expect(pages.first[:size]).to eq(PDF::Core::PageGeometry::SIZES["LETTER"])
345
339
  end
346
340
 
347
341
  (PDF::Core::PageGeometry::SIZES.keys - ["LETTER"]).each do |k|
348
342
  it "should provide #{k} geometry" do
349
343
  @pdf = Prawn::Document.new(:page_size => k)
350
344
  pages = PDF::Inspector::Page.analyze(@pdf.render).pages
351
- pages.first[:size].should == PDF::Core::PageGeometry::SIZES[k]
345
+ expect(pages.first[:size]).to eq(PDF::Core::PageGeometry::SIZES[k])
352
346
  end
353
347
  end
354
348
 
355
349
  it "should allow custom page size" do
356
- @pdf = Prawn::Document.new(:page_size => [1920, 1080] )
350
+ @pdf = Prawn::Document.new(:page_size => [1920, 1080])
357
351
  pages = PDF::Inspector::Page.analyze(@pdf.render).pages
358
- pages.first[:size].should == [1920, 1080]
352
+ expect(pages.first[:size]).to eq([1920, 1080])
359
353
  end
360
354
 
361
-
362
355
  it "should retain page size by default when starting a new page" do
363
356
  @pdf = Prawn::Document.new(:page_size => "LEGAL")
364
357
  @pdf.start_new_page
365
358
  pages = PDF::Inspector::Page.analyze(@pdf.render).pages
366
359
  pages.each do |page|
367
- page[:size].should == PDF::Core::PageGeometry::SIZES["LEGAL"]
360
+ expect(page[:size]).to eq(PDF::Core::PageGeometry::SIZES["LEGAL"])
368
361
  end
369
362
  end
370
-
371
363
  end
372
364
 
373
365
  describe "When setting page layout" do
374
366
  it "should reverse coordinates for landscape" do
375
367
  @pdf = Prawn::Document.new(:page_size => "A4", :page_layout => :landscape)
376
368
  pages = PDF::Inspector::Page.analyze(@pdf.render).pages
377
- pages.first[:size].should == PDF::Core::PageGeometry::SIZES["A4"].reverse
369
+ expect(pages.first[:size]).to eq(PDF::Core::PageGeometry::SIZES["A4"].reverse)
378
370
  end
379
371
 
380
372
  it "should retain page layout by default when starting a new page" do
@@ -382,7 +374,7 @@ describe "When setting page layout" do
382
374
  @pdf.start_new_page(:trace => true)
383
375
  pages = PDF::Inspector::Page.analyze(@pdf.render).pages
384
376
  pages.each do |page|
385
- page[:size].should == PDF::Core::PageGeometry::SIZES["LETTER"].reverse
377
+ expect(page[:size]).to eq(PDF::Core::PageGeometry::SIZES["LETTER"].reverse)
386
378
  end
387
379
  end
388
380
 
@@ -390,7 +382,7 @@ describe "When setting page layout" do
390
382
  @pdf = Prawn::Document.new
391
383
  size = [@pdf.bounds.width, @pdf.bounds.height]
392
384
  @pdf.start_new_page(:layout => :landscape)
393
- [@pdf.bounds.width, @pdf.bounds.height].should == size.reverse
385
+ expect([@pdf.bounds.width, @pdf.bounds.height]).to eq(size.reverse)
394
386
  end
395
387
  end
396
388
 
@@ -401,19 +393,22 @@ describe "The mask() feature" do
401
393
  @pdf.mask(:y, :line_width) do
402
394
  @pdf.y = y + 1
403
395
  @pdf.line_width = line_width + 1
404
- @pdf.y.should_not == y
405
- @pdf.line_width.should_not == line_width
396
+ expect(@pdf.y).not_to eq(y)
397
+ expect(@pdf.line_width).not_to eq(line_width)
406
398
  end
407
- @pdf.y.should == y
408
- @pdf.line_width.should == line_width
399
+ expect(@pdf.y).to eq(y)
400
+ expect(@pdf.line_width).to eq(line_width)
409
401
  end
410
402
  end
411
403
 
412
404
  describe "The group() feature" do
413
405
  xit "should return a true value if the content fits on one page" do
414
406
  pdf = Prawn::Document.new do
415
- val = group { text "Hello"; text "World" }
416
- (!!val).should == true
407
+ val = group {
408
+ text "Hello"
409
+ text "World"
410
+ }
411
+ expect(!!val).to eq(true)
417
412
  end
418
413
  end
419
414
 
@@ -426,25 +421,25 @@ describe "The group() feature" do
426
421
  end
427
422
 
428
423
  # group should return a false value since a new page was started
429
- (!!val).should == false
424
+ expect(!!val).to eq(false)
430
425
  end
431
426
  pages = PDF::Inspector::Page.analyze(pdf.render).pages
432
- pages.size.should == 2
433
- pages[0][:strings].should == []
434
- pages[1][:strings].should == ["Hello", "World"]
427
+ expect(pages.size).to eq(2)
428
+ expect(pages[0][:strings]).to eq([])
429
+ expect(pages[1][:strings]).to eq(["Hello", "World"])
435
430
  end
436
431
 
437
432
  xit "should raise_error CannotGroup if the content is too tall" do
438
- lambda {
433
+ expect {
439
434
  Prawn::Document.new do
440
435
  group do
441
436
  100.times { text "Too long" }
442
437
  end
443
438
  end.render
444
- }.should raise_error(Prawn::Errors::CannotGroup)
439
+ }.to raise_error(Prawn::Errors::CannotGroup)
445
440
  end
446
441
 
447
- xit "should group within individual column boxes" do
442
+ xit "should group within individual column boxes" do
448
443
  pdf = Prawn::Document.new do
449
444
  # Set up columns with grouped blocks of 0..49. 0 to 49 is slightly short
450
445
  # of the height of one page / column, so each column should get its own
@@ -458,18 +453,17 @@ describe "The group() feature" do
458
453
 
459
454
  # Second page should start with a 0 because it's a new group.
460
455
  pages = PDF::Inspector::Page.analyze(pdf.render).pages
461
- pages.size.should == 2
462
- pages[1][:strings].first.should == '0'
456
+ expect(pages.size).to eq(2)
457
+ expect(pages[1][:strings].first).to eq('0')
463
458
  end
464
-
465
459
  end
466
460
 
467
461
  describe "The render() feature" do
468
462
  it "should return a 8 bit encoded string on a m17n aware VM" do
469
463
  @pdf = Prawn::Document.new(:page_size => "A4", :page_layout => :landscape)
470
- @pdf.line [100,100], [200,200]
464
+ @pdf.line [100, 100], [200, 200]
471
465
  str = @pdf.render
472
- str.encoding.to_s.should == "ASCII-8BIT"
466
+ expect(str.encoding.to_s).to eq("ASCII-8BIT")
473
467
  end
474
468
 
475
469
  it "should trigger before_render callbacks just before rendering" do
@@ -479,7 +473,7 @@ describe "The render() feature" do
479
473
 
480
474
  # Verify the order: finalize -> fire callbacks -> render body
481
475
  pdf.renderer.expects(:finalize_all_page_contents).in_sequence(seq)
482
- trigger = mock()
476
+ trigger = mock
483
477
  trigger.expects(:fire).in_sequence(seq)
484
478
 
485
479
  # Store away the render_body method to be called below
@@ -498,7 +492,7 @@ describe "The render() feature" do
498
492
 
499
493
  contents = pdf.render
500
494
  contents2 = pdf.render
501
- contents2.should == contents
495
+ expect(contents2).to eq(contents)
502
496
  end
503
497
  end
504
498
 
@@ -506,19 +500,19 @@ describe "PDF file versions" do
506
500
  it "should default to 1.3" do
507
501
  @pdf = Prawn::Document.new
508
502
  str = @pdf.render
509
- str[0,8].should == "%PDF-1.3"
503
+ expect(str[0, 8]).to eq("%PDF-1.3")
510
504
  end
511
505
 
512
506
  it "should allow the default to be changed" do
513
507
  @pdf = Prawn::Document.new
514
508
  @pdf.renderer.min_version(1.4)
515
509
  str = @pdf.render
516
- str[0,8].should == "%PDF-1.4"
510
+ expect(str[0, 8]).to eq("%PDF-1.4")
517
511
  end
518
512
  end
519
513
 
520
514
  describe "Documents that use go_to_page" do
521
- it "should have 2 pages after calling start_new_page and go_to_page" do
515
+ it "should have 2 pages after calling start_new_page and go_to_page" do
522
516
  @pdf = Prawn::Document.new
523
517
  @pdf.text "James"
524
518
  @pdf.start_new_page
@@ -527,7 +521,7 @@ describe "Documents that use go_to_page" do
527
521
  @pdf.text "Healy"
528
522
 
529
523
  page_counter = PDF::Inspector::Page.analyze(@pdf.render)
530
- page_counter.pages.size.should == 2
524
+ expect(page_counter.pages.size).to eq(2)
531
525
  end
532
526
 
533
527
  it "should correctly add text to pages" do
@@ -540,15 +534,15 @@ describe "Documents that use go_to_page" do
540
534
 
541
535
  text = PDF::Inspector::Text.analyze(@pdf.render)
542
536
 
543
- text.strings.size.should == 3
544
- text.strings.include?("James").should == true
545
- text.strings.include?("Anthony").should == true
546
- text.strings.include?("Healy").should == true
537
+ expect(text.strings.size).to eq(3)
538
+ expect(text.strings.include?("James")).to eq(true)
539
+ expect(text.strings.include?("Anthony")).to eq(true)
540
+ expect(text.strings.include?("Healy")).to eq(true)
547
541
  end
548
542
  end
549
543
 
550
544
  describe "content stream characteristics" do
551
- it "should have 1 single content stream for a single page PDF" do
545
+ it "should have 1 single content stream for a single page PDF" do
552
546
  @pdf = Prawn::Document.new
553
547
  @pdf.text "James"
554
548
  output = StringIO.new(@pdf.render)
@@ -556,10 +550,10 @@ describe "content stream characteristics" do
556
550
 
557
551
  streams = hash.values.select { |obj| obj.kind_of?(PDF::Reader::Stream) }
558
552
 
559
- streams.size.should == 1
553
+ expect(streams.size).to eq(1)
560
554
  end
561
555
 
562
- it "should have 1 single content stream for a single page PDF, even if go_to_page is used" do
556
+ it "should have 1 single content stream for a single page PDF, even if go_to_page is used" do
563
557
  @pdf = Prawn::Document.new
564
558
  @pdf.text "James"
565
559
  @pdf.go_to_page(1)
@@ -569,7 +563,7 @@ describe "content stream characteristics" do
569
563
 
570
564
  streams = hash.values.select { |obj| obj.kind_of?(PDF::Reader::Stream) }
571
565
 
572
- streams.size.should == 1
566
+ expect(streams.size).to eq(1)
573
567
  end
574
568
  end
575
569
 
@@ -580,20 +574,20 @@ describe "The number_pages method" do
580
574
 
581
575
  it "replaces the '<page>' string with the proper page number" do
582
576
  @pdf.start_new_page
583
- @pdf.expects(:text_box).with("1, test", { :height => 50 })
584
- @pdf.number_pages "<page>, test", {:page_filter => :all}
577
+ @pdf.expects(:text_box).with("1, test", :height => 50)
578
+ @pdf.number_pages "<page>, test", :page_filter => :all
585
579
  end
586
580
 
587
581
  it "replaces the '<total>' string with the total page count" do
588
582
  @pdf.start_new_page
589
- @pdf.expects(:text_box).with("test, 1", { :height => 50 })
590
- @pdf.number_pages "test, <total>", {:page_filter => :all}
583
+ @pdf.expects(:text_box).with("test, 1", :height => 50)
584
+ @pdf.number_pages "test, <total>", :page_filter => :all
591
585
  end
592
586
 
593
587
  it "must print each page if given the :all page_filter" do
594
588
  10.times { @pdf.start_new_page }
595
589
  @pdf.expects(:text_box).times(10)
596
- @pdf.number_pages "test", {:page_filter => :all}
590
+ @pdf.number_pages "test", :page_filter => :all
597
591
  end
598
592
 
599
593
  it "must print each page if no :page_filter is specified" do
@@ -605,7 +599,7 @@ describe "The number_pages method" do
605
599
  it "must not print the page number if given a nil filter" do
606
600
  10.times { @pdf.start_new_page }
607
601
  @pdf.expects(:text_box).never
608
- @pdf.number_pages "test", {:page_filter => nil}
602
+ @pdf.number_pages "test", :page_filter => nil
609
603
  end
610
604
 
611
605
  context "start_count_at option" do
@@ -613,9 +607,9 @@ describe "The number_pages method" do
613
607
  context "equal to #{startat}" do
614
608
  it "increments the pages" do
615
609
  2.times { @pdf.start_new_page }
616
- options = {:page_filter => :all, :start_count_at => startat}
617
- @pdf.expects(:text_box).with("#{startat} 2", { :height => 50 })
618
- @pdf.expects(:text_box).with("#{startat+1} 2", { :height => 50 })
610
+ 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)
619
613
  @pdf.number_pages "<page> <total>", options
620
614
  end
621
615
  end
@@ -625,10 +619,10 @@ describe "The number_pages method" do
625
619
  context "equal to #{val}" do
626
620
  it "defaults to start at page 1" do
627
621
  3.times { @pdf.start_new_page }
628
- options = {:page_filter => :all, :start_count_at => val}
629
- @pdf.expects(:text_box).with("1 3", { :height => 50 })
630
- @pdf.expects(:text_box).with("2 3", { :height => 50 })
631
- @pdf.expects(:text_box).with("3 3", { :height => 50 })
622
+ 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)
632
626
  @pdf.number_pages "<page> <total>", options
633
627
  end
634
628
  end
@@ -638,8 +632,8 @@ describe "The number_pages method" do
638
632
  context "total_pages option" do
639
633
  it "allows the total pages count to be overridden" do
640
634
  2.times { @pdf.start_new_page }
641
- @pdf.expects(:text_box).with("1 10", { :height => 50 })
642
- @pdf.expects(:text_box).with("2 10", { :height => 50 })
635
+ @pdf.expects(:text_box).with("1 10", :height => 50)
636
+ @pdf.expects(:text_box).with("2 10", :height => 50)
643
637
  @pdf.number_pages "<page> <total>", :page_filter => :all, :total_pages => 10
644
638
  end
645
639
  end
@@ -648,9 +642,9 @@ describe "The number_pages method" do
648
642
  context "such as :odd" do
649
643
  it "increments the pages" do
650
644
  3.times { @pdf.start_new_page }
651
- @pdf.expects(:text_box).with("1 3", { :height => 50 })
652
- @pdf.expects(:text_box).with("3 3", { :height => 50 })
653
- @pdf.expects(:text_box).with("2 3", { :height => 50 }).never
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
654
648
  @pdf.number_pages "<page> <total>", :page_filter => :odd
655
649
  end
656
650
  end
@@ -667,23 +661,23 @@ describe "The number_pages method" do
667
661
  context "such as :odd and 7" do
668
662
  it "increments the pages" do
669
663
  3.times { @pdf.start_new_page }
670
- @pdf.expects(:text_box).with("1 3", { :height => 50 }).never
671
- @pdf.expects(:text_box).with("5 3", { :height => 50 }) # page 1
672
- @pdf.expects(:text_box).with("6 3", { :height => 50 }).never # page 2
673
- @pdf.expects(:text_box).with("7 3", { :height => 50 }) # page 3
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
674
668
  @pdf.number_pages "<page> <total>", :page_filter => :odd, :start_count_at => 5
675
669
  end
676
670
  end
677
671
  context "some crazy proc and 2" do
678
672
  it "increments the pages" do
679
673
  6.times { @pdf.start_new_page }
680
- options = {:page_filter => lambda {|p| p != 2 && p != 5}, :start_count_at => 4}
681
- @pdf.expects(:text_box).with("4 6", { :height => 50 }) # page 1
682
- @pdf.expects(:text_box).with("5 6", { :height => 50 }).never # page 2
683
- @pdf.expects(:text_box).with("6 6", { :height => 50 }) # page 3
684
- @pdf.expects(:text_box).with("7 6", { :height => 50 }) # page 4
685
- @pdf.expects(:text_box).with("8 6", { :height => 50 }).never # page 5
686
- @pdf.expects(:text_box).with("9 6", { :height => 50 }) # page 6
674
+ 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
687
681
  @pdf.number_pages "<page> <total>", options
688
682
  end
689
683
  end
@@ -695,17 +689,17 @@ describe "The number_pages method" do
695
689
  end
696
690
 
697
691
  it "with 10 height" do
698
- @pdf.expects(:text_box).with("1 1", { :height => 10 })
692
+ @pdf.expects(:text_box).with("1 1", :height => 10)
699
693
  @pdf.number_pages "<page> <total>", :height => 10
700
694
  end
701
695
 
702
696
  it "with nil height" do
703
- @pdf.expects(:text_box).with("1 1", { :height => nil })
697
+ @pdf.expects(:text_box).with("1 1", :height => nil)
704
698
  @pdf.number_pages "<page> <total>", :height => nil
705
699
  end
706
700
 
707
701
  it "with no height" do
708
- @pdf.expects(:text_box).with("1 1", { :height => 50 })
702
+ @pdf.expects(:text_box).with("1 1", :height => 50)
709
703
  @pdf.number_pages "<page> <total>"
710
704
  end
711
705
  end
@@ -714,35 +708,35 @@ end
714
708
  describe "The page_match? method" do
715
709
  before do
716
710
  @pdf = Prawn::Document.new(:skip_page_creation => true)
717
- 10.times {@pdf.start_new_page}
711
+ 10.times { @pdf.start_new_page }
718
712
  end
719
713
 
720
714
  it "returns nil given no filter" do
721
- @pdf.page_match?(:nil, 1).should be_false
715
+ expect(@pdf.page_match?(:nil, 1)).to be_false
722
716
  end
723
717
 
724
718
  it "must provide an :all filter" do
725
- (1..@pdf.page_count).all? { |i| @pdf.page_match?(:all, i) }.should be_true
719
+ expect((1..@pdf.page_count).all? { |i| @pdf.page_match?(:all, i) }).to be_true
726
720
  end
727
721
 
728
722
  it "must provide an :odd filter" do
729
- odd, even = (1..@pdf.page_count).partition { |e| e % 2 == 1 }
730
- odd.all? { |i| @pdf.page_match?(:odd, i) }.should be_true
731
- even.any? { |i| @pdf.page_match?(:odd, i) }.should be_false
723
+ 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
732
726
  end
733
727
 
734
728
  it "must be able to filter by an array of page numbers" do
735
- fltr = [1,2,7]
736
- (1..10).select { |i| @pdf.page_match?(fltr, i) }.should == [1,2,7]
729
+ fltr = [1, 2, 7]
730
+ expect((1..10).select { |i| @pdf.page_match?(fltr, i) }).to eq([1, 2, 7])
737
731
  end
738
732
 
739
733
  it "must be able to filter by a range of page numbers" do
740
734
  fltr = 2..4
741
- (1..10).select { |i| @pdf.page_match?(fltr, i) }.should == [2,3,4]
735
+ expect((1..10).select { |i| @pdf.page_match?(fltr, i) }).to eq([2, 3, 4])
742
736
  end
743
737
 
744
738
  it "must be able to filter by an arbitrary proc" do
745
739
  fltr = lambda { |x| x == 1 or x % 3 == 0 }
746
- (1..10).select { |i| @pdf.page_match?(fltr, i) }.should == [1,3,6,9]
740
+ expect((1..10).select { |i| @pdf.page_match?(fltr, i) }).to eq([1, 3, 6, 9])
747
741
  end
748
742
  end