prawn 2.0.1 → 2.0.2
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.
- checksums.yaml +4 -4
- data/Rakefile +7 -5
- data/lib/prawn.rb +4 -4
- data/lib/prawn/document.rb +47 -46
- data/lib/prawn/document/bounding_box.rb +13 -19
- data/lib/prawn/document/column_box.rb +3 -5
- data/lib/prawn/document/internals.rb +0 -1
- data/lib/prawn/document/span.rb +12 -12
- data/lib/prawn/errors.rb +32 -33
- data/lib/prawn/font.rb +29 -36
- data/lib/prawn/font/afm.rb +20 -20
- data/lib/prawn/font/dfont.rb +0 -1
- data/lib/prawn/font/ttf.rb +30 -27
- data/lib/prawn/font_metric_cache.rb +4 -8
- data/lib/prawn/graphics.rb +37 -42
- data/lib/prawn/graphics/cap_style.rb +1 -1
- data/lib/prawn/graphics/color.rb +21 -23
- data/lib/prawn/graphics/dash.rb +5 -6
- data/lib/prawn/graphics/join_style.rb +1 -2
- data/lib/prawn/graphics/patterns.rb +25 -21
- data/lib/prawn/graphics/transformation.rb +4 -5
- data/lib/prawn/graphics/transparency.rb +6 -8
- data/lib/prawn/grid.rb +21 -14
- data/lib/prawn/image_handler.rb +2 -2
- data/lib/prawn/images.rb +29 -31
- data/lib/prawn/images/image.rb +1 -1
- data/lib/prawn/images/jpg.rb +10 -12
- data/lib/prawn/images/png.rb +13 -13
- data/lib/prawn/measurements.rb +7 -14
- data/lib/prawn/outline.rb +6 -6
- data/lib/prawn/repeater.rb +1 -5
- data/lib/prawn/security.rb +17 -25
- data/lib/prawn/security/arcfour.rb +1 -1
- data/lib/prawn/soft_mask.rb +11 -12
- data/lib/prawn/stamp.rb +16 -8
- data/lib/prawn/text.rb +23 -20
- data/lib/prawn/text/box.rb +3 -6
- data/lib/prawn/text/formatted/arranger.rb +9 -12
- data/lib/prawn/text/formatted/box.rb +23 -22
- data/lib/prawn/text/formatted/fragment.rb +0 -4
- data/lib/prawn/text/formatted/line_wrap.rb +13 -24
- data/lib/prawn/text/formatted/parser.rb +16 -20
- data/lib/prawn/text/formatted/wrap.rb +2 -7
- data/lib/prawn/utilities.rb +6 -3
- data/lib/prawn/version.rb +1 -1
- data/manual/basic_concepts/basic_concepts.rb +0 -2
- data/manual/basic_concepts/view.rb +1 -1
- data/manual/bounding_box/bounding_box.rb +0 -3
- data/manual/bounding_box/russian_boxes.rb +7 -8
- data/manual/bounding_box/stretchy.rb +0 -1
- data/manual/contents.rb +2 -2
- data/manual/cover.rb +11 -12
- data/manual/document_and_page_options/document_and_page_options.rb +2 -5
- data/manual/document_and_page_options/metadata.rb +10 -10
- data/manual/document_and_page_options/page_size.rb +0 -1
- data/manual/graphics/fill_rules.rb +5 -4
- data/manual/graphics/graphics.rb +0 -3
- data/manual/graphics/lines_and_curves.rb +1 -1
- data/manual/graphics/rotate.rb +0 -2
- data/manual/graphics/scale.rb +4 -2
- data/manual/graphics/soft_masks.rb +0 -1
- data/manual/graphics/stroke_cap.rb +1 -1
- data/manual/graphics/stroke_join.rb +1 -1
- data/manual/graphics/translate.rb +3 -3
- data/manual/graphics/transparency.rb +0 -1
- data/manual/how_to_read_this_manual.rb +0 -1
- data/manual/images/images.rb +0 -3
- data/manual/layout/boxes.rb +5 -5
- data/manual/layout/content.rb +2 -2
- data/manual/layout/layout.rb +0 -3
- data/manual/outline/outline.rb +0 -3
- data/manual/repeatable_content/page_numbering.rb +1 -1
- data/manual/repeatable_content/repeatable_content.rb +0 -3
- data/manual/repeatable_content/repeater.rb +6 -6
- data/manual/security/encryption.rb +0 -2
- data/manual/security/permissions.rb +0 -2
- data/manual/security/security.rb +0 -3
- data/manual/text/alignment.rb +3 -3
- data/manual/text/color.rb +0 -1
- data/manual/text/column_box.rb +0 -1
- data/manual/text/fallback_fonts.rb +2 -2
- data/manual/text/formatted_callbacks.rb +3 -2
- data/manual/text/paragraph_indentation.rb +2 -3
- data/manual/text/registering_families.rb +13 -9
- data/manual/text/rotation.rb +0 -1
- data/manual/text/text.rb +0 -3
- data/manual/text/text_box_overflow.rb +7 -5
- data/manual/text/utf8.rb +1 -1
- data/manual/text/win_ansi_charset.rb +2 -2
- data/prawn.gemspec +4 -4
- data/spec/acceptance/png.rb +6 -7
- data/spec/annotations_spec.rb +21 -28
- data/spec/bounding_box_spec.rb +100 -109
- data/spec/column_box_spec.rb +26 -32
- data/spec/destinations_spec.rb +2 -4
- data/spec/document_spec.rb +145 -151
- data/spec/extensions/mocha.rb +0 -1
- data/spec/font_metric_cache_spec.rb +7 -7
- data/spec/font_spec.rb +103 -102
- data/spec/formatted_text_arranger_spec.rb +76 -74
- data/spec/formatted_text_box_spec.rb +170 -159
- data/spec/formatted_text_fragment_spec.rb +57 -56
- data/spec/graphics_spec.rb +158 -175
- data/spec/grid_spec.rb +28 -29
- data/spec/image_handler_spec.rb +4 -5
- data/spec/images_spec.rb +50 -36
- data/spec/inline_formatted_text_parser_spec.rb +397 -393
- data/spec/jpg_spec.rb +4 -6
- data/spec/line_wrap_spec.rb +54 -55
- data/spec/measurement_units_spec.rb +12 -15
- data/spec/outline_spec.rb +77 -98
- data/spec/png_spec.rb +55 -65
- data/spec/reference_spec.rb +3 -3
- data/spec/repeater_spec.rb +20 -26
- data/spec/security_spec.rb +42 -49
- data/spec/soft_mask_spec.rb +4 -5
- data/spec/span_spec.rb +5 -6
- data/spec/spec_helper.rb +2 -4
- data/spec/stamp_spec.rb +41 -22
- data/spec/stroke_styles_spec.rb +36 -39
- data/spec/text_at_spec.rb +28 -29
- data/spec/text_box_spec.rb +160 -165
- data/spec/text_rendering_mode_spec.rb +9 -9
- data/spec/text_spacing_spec.rb +13 -13
- data/spec/text_spec.rb +116 -124
- data/spec/text_with_inline_formatting_spec.rb +5 -5
- data/spec/transparency_spec.rb +20 -20
- data/spec/view_spec.rb +0 -1
- metadata +7 -7
@@ -16,14 +16,12 @@
|
|
16
16
|
require File.expand_path(File.join(File.dirname(__FILE__),
|
17
17
|
%w[.. example_helper]))
|
18
18
|
|
19
|
-
|
20
19
|
# Bare encryption. No password needed.
|
21
20
|
Prawn::ManualBuilder::Example.generate("bare_encryption.pdf") do
|
22
21
|
text "See, no password was asked but the document is still encrypted."
|
23
22
|
encrypt_document
|
24
23
|
end
|
25
24
|
|
26
|
-
|
27
25
|
# Simple password. All permissions granted.
|
28
26
|
Prawn::ManualBuilder::Example.generate("simple_password.pdf") do
|
29
27
|
text "You was asked for a password."
|
@@ -18,7 +18,6 @@
|
|
18
18
|
require File.expand_path(File.join(File.dirname(__FILE__),
|
19
19
|
%w[.. example_helper]))
|
20
20
|
|
21
|
-
|
22
21
|
# User cannot print the document.
|
23
22
|
Prawn::ManualBuilder::Example.generate("cannot_print.pdf") do
|
24
23
|
text "If you used the user password you won't be able to print the doc."
|
@@ -26,7 +25,6 @@ Prawn::ManualBuilder::Example.generate("cannot_print.pdf") do
|
|
26
25
|
:permissions => { :print_document => false })
|
27
26
|
end
|
28
27
|
|
29
|
-
|
30
28
|
# All permissions revoked and owner password set to random
|
31
29
|
Prawn::ManualBuilder::Example.generate("no_permissions.pdf") do
|
32
30
|
text "You may only view this and won't be able to use the owner password."
|
data/manual/security/security.rb
CHANGED
@@ -6,9 +6,7 @@ require File.expand_path(File.join(File.dirname(__FILE__),
|
|
6
6
|
%w[.. example_helper]))
|
7
7
|
|
8
8
|
Prawn::ManualBuilder::Example.generate("security.pdf", :page_size => "FOLIO") do
|
9
|
-
|
10
9
|
package "security" do |p|
|
11
|
-
|
12
10
|
p.example "encryption", :eval_source => false, :full_source => true
|
13
11
|
p.example "permissions", :eval_source => false, :full_source => true
|
14
12
|
|
@@ -23,6 +21,5 @@ Prawn::ManualBuilder::Example.generate("security.pdf", :page_size => "FOLIO") do
|
|
23
21
|
"How to set a owner password that bypass the document permissions"
|
24
22
|
)
|
25
23
|
end
|
26
|
-
|
27
24
|
end
|
28
25
|
end
|
data/manual/text/alignment.rb
CHANGED
@@ -22,16 +22,16 @@ Prawn::ManualBuilder::Example.generate(filename) do
|
|
22
22
|
text "This text should be right aligned", :align => :right
|
23
23
|
|
24
24
|
bounding_box([0, 220], :width => 250, :height => 220) do
|
25
|
-
text "This text is flowing from the left. "
|
25
|
+
text "This text is flowing from the left. " * 4
|
26
26
|
|
27
27
|
move_down 15
|
28
28
|
text "This text is flowing from the center. " * 3, :align => :center
|
29
29
|
|
30
30
|
move_down 15
|
31
|
-
text "This text is flowing from the right. "
|
31
|
+
text "This text is flowing from the right. " * 4, :align => :right
|
32
32
|
|
33
33
|
move_down 15
|
34
|
-
text "This text is justified. "
|
34
|
+
text "This text is justified. " * 6, :align => :justify
|
35
35
|
transparent(0.5) { stroke_bounds }
|
36
36
|
end
|
37
37
|
|
data/manual/text/color.rb
CHANGED
data/manual/text/column_box.rb
CHANGED
@@ -16,7 +16,7 @@ Prawn::ManualBuilder::Example.generate(filename) do
|
|
16
16
|
|
17
17
|
file = "#{Prawn::DATADIR}/fonts/Panic+Sans.dfont"
|
18
18
|
font_families["Panic Sans"] = {
|
19
|
-
:normal => { :file => file, :font => "PanicSans" }
|
19
|
+
:normal => { :file => file, :font => "PanicSans" }
|
20
20
|
}
|
21
21
|
|
22
22
|
font("Panic Sans") do
|
@@ -31,7 +31,7 @@ Prawn::ManualBuilder::Example.generate(filename) do
|
|
31
31
|
move_down 20
|
32
32
|
|
33
33
|
formatted_text([ { :text => "Fallback fonts can even override" },
|
34
|
-
{ :text => "fragment fonts (你好)", :font => "Times-Roman" }
|
34
|
+
{ :text => "fragment fonts (你好)", :font => "Times-Roman" }
|
35
35
|
],
|
36
36
|
:fallback_fonts => ["Times-Roman", "Kai"])
|
37
37
|
end
|
@@ -25,8 +25,9 @@ Prawn::ManualBuilder::Example.generate(filename) do
|
|
25
25
|
def render_behind(fragment)
|
26
26
|
original_color = @document.fill_color
|
27
27
|
@document.fill_color = @color
|
28
|
-
@document.fill_rectangle(fragment.top_left,
|
29
|
-
|
28
|
+
@document.fill_rectangle(fragment.top_left,
|
29
|
+
fragment.width,
|
30
|
+
fragment.height)
|
30
31
|
@document.fill_color = original_color
|
31
32
|
end
|
32
33
|
end
|
@@ -28,7 +28,6 @@ Prawn::ManualBuilder::Example.generate(filename) do
|
|
28
28
|
|
29
29
|
text "FROM RIGHT TO LEFT:"
|
30
30
|
text "This paragraph will be indented. " * 10 +
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
"\n" + "This one will too. " * 10,
|
32
|
+
:indent_paragraphs => 60, :direction => :rtl
|
34
33
|
end
|
@@ -14,9 +14,11 @@ require File.expand_path(File.join(File.dirname(__FILE__),
|
|
14
14
|
filename = File.basename(__FILE__).gsub('.rb', '.pdf')
|
15
15
|
Prawn::ManualBuilder::Example.generate(filename) do
|
16
16
|
# Registering a single TTF font
|
17
|
-
font_families.update(
|
18
|
-
|
19
|
-
|
17
|
+
font_families.update(
|
18
|
+
"DejaVu Sans" => {
|
19
|
+
:normal => "#{Prawn::DATADIR}/fonts/DejaVuSans.ttf"
|
20
|
+
}
|
21
|
+
)
|
20
22
|
|
21
23
|
font("DejaVu Sans") do
|
22
24
|
text "Using the DejaVu Sans font providing only its name to the font method"
|
@@ -25,12 +27,14 @@ Prawn::ManualBuilder::Example.generate(filename) do
|
|
25
27
|
|
26
28
|
# Registering a DFONT package
|
27
29
|
font_path = "#{Prawn::DATADIR}/fonts/Panic+Sans.dfont"
|
28
|
-
font_families.update(
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
font_families.update(
|
31
|
+
"Panic Sans" => {
|
32
|
+
:normal => { :file => font_path, :font => "PanicSans" },
|
33
|
+
:italic => { :file => font_path, :font => "PanicSans-Italic" },
|
34
|
+
:bold => { :file => font_path, :font => "PanicSans-Bold" },
|
35
|
+
:bold_italic => { :file => font_path, :font => "PanicSans-BoldItalic" }
|
36
|
+
}
|
37
|
+
)
|
34
38
|
|
35
39
|
font "Panic Sans"
|
36
40
|
text "Also using Panic Sans by providing only its name"
|
data/manual/text/rotation.rb
CHANGED
@@ -30,7 +30,6 @@ Prawn::ManualBuilder::Example.generate(filename) do
|
|
30
30
|
|
31
31
|
[:lower_left, :upper_left,
|
32
32
|
:lower_right, :upper_right].each_with_index do |corner, index|
|
33
|
-
|
34
33
|
y = y - 100 if index == 2
|
35
34
|
stroke_rectangle [x + (index % 2) * 200, y], width, height
|
36
35
|
text_box("This text was rotated around the #{corner} corner.",
|
data/manual/text/text.rb
CHANGED
@@ -6,9 +6,7 @@ require File.expand_path(File.join(File.dirname(__FILE__),
|
|
6
6
|
%w[.. example_helper]))
|
7
7
|
|
8
8
|
Prawn::ManualBuilder::Example.generate("text.pdf", :page_size => "FOLIO") do
|
9
|
-
|
10
9
|
package "text" do |p|
|
11
|
-
|
12
10
|
p.section "Basics" do |s|
|
13
11
|
s.example "free_flowing_text"
|
14
12
|
s.example "positioned_text"
|
@@ -68,6 +66,5 @@ Prawn::ManualBuilder::Example.generate("text.pdf", :page_size => "FOLIO") do
|
|
68
66
|
"What happens when rendering text in different languages"
|
69
67
|
)
|
70
68
|
end
|
71
|
-
|
72
69
|
end
|
73
70
|
end
|
@@ -29,8 +29,9 @@ Prawn::ManualBuilder::Example.generate(filename) do
|
|
29
29
|
y_position = cursor - 20
|
30
30
|
[:truncate, :expand, :shrink_to_fit].each_with_index do |mode, i|
|
31
31
|
text_box string, :at => [i * 150, y_position],
|
32
|
-
|
33
|
-
|
32
|
+
:width => 100,
|
33
|
+
:height => 50,
|
34
|
+
:overflow => mode
|
34
35
|
end
|
35
36
|
|
36
37
|
string = "If the box is too small for the text, :shrink_to_fit " +
|
@@ -41,8 +42,9 @@ Prawn::ManualBuilder::Example.generate(filename) do
|
|
41
42
|
y_position = cursor - 20
|
42
43
|
[nil, 8, 10, 12].each_with_index do |value, index|
|
43
44
|
text_box string, :at => [index * 150, y_position],
|
44
|
-
|
45
|
-
|
46
|
-
|
45
|
+
:width => 50,
|
46
|
+
:height => 50,
|
47
|
+
:overflow => :shrink_to_fit,
|
48
|
+
:min_font_size => value
|
47
49
|
end
|
48
50
|
end
|
data/manual/text/utf8.rb
CHANGED
@@ -13,7 +13,7 @@ Prawn::ManualBuilder::Example.generate(filename) do
|
|
13
13
|
text "€", :size => 32
|
14
14
|
move_down 20
|
15
15
|
|
16
|
-
text "This works, because € is one of the few "+
|
16
|
+
text "This works, because € is one of the few " +
|
17
17
|
"non-ASCII glyphs supported in PDF built-in fonts."
|
18
18
|
|
19
19
|
move_down 20
|
@@ -47,11 +47,11 @@ Prawn::ManualBuilder::Example.generate(filename) do
|
|
47
47
|
case align
|
48
48
|
when :left then offset = 0
|
49
49
|
when :right then offset = total_width - width
|
50
|
-
when :center then offset = (total_width - width)/2
|
50
|
+
when :center then offset = (total_width - width) / 2
|
51
51
|
end
|
52
52
|
|
53
53
|
text_box(field.force_encoding("windows-1252").encode("UTF-8"),
|
54
|
-
|
54
|
+
:at => [dx + offset, y])
|
55
55
|
end
|
56
56
|
|
57
57
|
dx += total_width
|
data/prawn.gemspec
CHANGED
@@ -19,13 +19,13 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.required_rubygems_version = ">= 1.3.6"
|
20
20
|
|
21
21
|
spec.test_files = Dir[ "spec/*_spec.rb" ]
|
22
|
-
spec.authors = ["Gregory Brown","Brad Ediger","Daniel Nelson","Jonathan Greenberg","James Healy"]
|
23
|
-
spec.email = ["gregory.t.brown@gmail.com","brad@bradediger.com","dnelson@bluejade.com","greenberg@entryway.net","jimmy@deefa.com"]
|
22
|
+
spec.authors = ["Gregory Brown", "Brad Ediger", "Daniel Nelson", "Jonathan Greenberg", "James Healy"]
|
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
25
|
spec.licenses = ['RUBY', 'GPL-2', 'GPL-3']
|
26
26
|
|
27
27
|
spec.add_dependency('ttfunk', '~> 1.4.0')
|
28
|
-
spec.add_dependency('pdf-core', "~> 0.
|
28
|
+
spec.add_dependency('pdf-core', "~> 0.6.0")
|
29
29
|
|
30
30
|
spec.add_development_dependency('pdf-inspector', '~> 1.2.0')
|
31
31
|
spec.add_development_dependency('yard')
|
@@ -35,7 +35,7 @@ Gem::Specification.new do |spec|
|
|
35
35
|
spec.add_development_dependency('simplecov')
|
36
36
|
spec.add_development_dependency('prawn-manual_builder', ">= 0.2.0")
|
37
37
|
spec.add_development_dependency('pdf-reader', '~>1.2')
|
38
|
-
spec.add_development_dependency('rubocop', '0.
|
38
|
+
spec.add_development_dependency('rubocop', '0.30.1')
|
39
39
|
spec.add_development_dependency('code_statistics', '0.2.13')
|
40
40
|
|
41
41
|
spec.homepage = "http://prawn.majesticseacreature.com"
|
data/spec/acceptance/png.rb
CHANGED
@@ -3,11 +3,11 @@
|
|
3
3
|
require_relative "../../lib/prawn"
|
4
4
|
|
5
5
|
images = [
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
["Type 0", "#{Prawn::BASEDIR}/data/images/web-links.png"],
|
7
|
+
["Type 2", "#{Prawn::BASEDIR}/data/images/ruport.png"],
|
8
|
+
["Type 3", "#{Prawn::BASEDIR}/data/images/indexed_color.png"],
|
9
|
+
["Type 4", "#{Prawn::BASEDIR}/data/images/page_white_text.png"],
|
10
|
+
["Type 6", "#{Prawn::BASEDIR}/data/images/dice.png"]
|
11
11
|
]
|
12
12
|
|
13
13
|
Prawn::Document.generate("png_types.pdf", :page_size => "A5") do
|
@@ -19,7 +19,6 @@ Prawn::Document.generate("png_types.pdf", :page_size => "A5") do
|
|
19
19
|
fill_rectangle bounds.top_left, bounds.width, bounds.height
|
20
20
|
text header
|
21
21
|
|
22
|
-
image file, :at => [50,450]
|
22
|
+
image file, :at => [50, 450]
|
23
23
|
end
|
24
24
|
end
|
25
|
-
|
data/spec/annotations_spec.rb
CHANGED
@@ -2,73 +2,66 @@
|
|
2
2
|
|
3
3
|
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
4
|
|
5
|
-
|
6
5
|
describe "When creating annotations" do
|
7
|
-
|
8
6
|
before(:each) { create_pdf }
|
9
7
|
|
10
8
|
it "should append annotation to current page" do
|
11
9
|
@pdf.start_new_page
|
12
|
-
@pdf.annotate(:Rect => [0,0,10,10], :Subtype => :Text, :Contents => "Hello world!")
|
10
|
+
@pdf.annotate(:Rect => [0, 0, 10, 10], :Subtype => :Text, :Contents => "Hello world!")
|
13
11
|
PDF::Reader.open(StringIO.new(@pdf.render)) do |pdf|
|
14
|
-
pdf.page(1).attributes[:Annots].
|
15
|
-
pdf.page(2).attributes[:Annots].size.
|
12
|
+
expect(pdf.page(1).attributes[:Annots]).to be_nil
|
13
|
+
expect(pdf.page(2).attributes[:Annots].size).to eq(1)
|
16
14
|
end
|
17
15
|
end
|
18
16
|
|
19
17
|
it "should force :Type to be :Annot" do
|
20
|
-
opts = @pdf.annotate(:Rect => [0,0,10,10], :Subtype => :Text, :Contents => "Hello world!")
|
21
|
-
opts[:Type].
|
22
|
-
opts = @pdf.annotate(:Type => :Bogus, :Rect => [0,0,10,10], :Subtype => :Text, :Contents => "Hello world!")
|
23
|
-
opts[:Type].
|
18
|
+
opts = @pdf.annotate(:Rect => [0, 0, 10, 10], :Subtype => :Text, :Contents => "Hello world!")
|
19
|
+
expect(opts[:Type]).to eq(:Annot)
|
20
|
+
opts = @pdf.annotate(:Type => :Bogus, :Rect => [0, 0, 10, 10], :Subtype => :Text, :Contents => "Hello world!")
|
21
|
+
expect(opts[:Type]).to eq(:Annot)
|
24
22
|
end
|
25
|
-
|
26
23
|
end
|
27
24
|
|
28
25
|
describe "When creating text annotations" do
|
29
|
-
|
30
26
|
before(:each) do
|
31
|
-
@rect = [0,0,10,10]
|
27
|
+
@rect = [0, 0, 10, 10]
|
32
28
|
@content = "Hello, world!"
|
33
29
|
create_pdf
|
34
30
|
end
|
35
31
|
|
36
32
|
it "should build appropriate annotation" do
|
37
33
|
opts = @pdf.text_annotation(@rect, @content)
|
38
|
-
opts[:Type].
|
39
|
-
opts[:Subtype].
|
40
|
-
opts[:Rect].
|
41
|
-
opts[:Contents].
|
34
|
+
expect(opts[:Type]).to eq(:Annot)
|
35
|
+
expect(opts[:Subtype]).to eq(:Text)
|
36
|
+
expect(opts[:Rect]).to eq(@rect)
|
37
|
+
expect(opts[:Contents]).to eq(@content)
|
42
38
|
end
|
43
39
|
|
44
40
|
it "should merge extra options" do
|
45
41
|
opts = @pdf.text_annotation(@rect, @content, :Open => true, :Subtype => :Bogus)
|
46
|
-
opts[:Subtype].
|
47
|
-
opts[:Open].
|
42
|
+
expect(opts[:Subtype]).to eq(:Text)
|
43
|
+
expect(opts[:Open]).to eq(true)
|
48
44
|
end
|
49
|
-
|
50
45
|
end
|
51
46
|
|
52
47
|
describe "When creating link annotations" do
|
53
|
-
|
54
48
|
before(:each) do
|
55
|
-
@rect = [0,0,10,10]
|
49
|
+
@rect = [0, 0, 10, 10]
|
56
50
|
@dest = "home"
|
57
51
|
create_pdf
|
58
52
|
end
|
59
53
|
|
60
54
|
it "should build appropriate annotation" do
|
61
55
|
opts = @pdf.link_annotation(@rect, :Dest => @dest)
|
62
|
-
opts[:Type].
|
63
|
-
opts[:Subtype].
|
64
|
-
opts[:Rect].
|
65
|
-
opts[:Dest].
|
56
|
+
expect(opts[:Type]).to eq(:Annot)
|
57
|
+
expect(opts[:Subtype]).to eq(:Link)
|
58
|
+
expect(opts[:Rect]).to eq(@rect)
|
59
|
+
expect(opts[:Dest]).to eq(@dest)
|
66
60
|
end
|
67
61
|
|
68
62
|
it "should merge extra options" do
|
69
63
|
opts = @pdf.link_annotation(@rect, :Dest => @dest, :Subtype => :Bogus)
|
70
|
-
opts[:Subtype].
|
71
|
-
opts[:Dest].
|
64
|
+
expect(opts[:Subtype]).to eq(:Link)
|
65
|
+
expect(opts[:Dest]).to eq(@dest)
|
72
66
|
end
|
73
|
-
|
74
67
|
end
|
data/spec/bounding_box_spec.rb
CHANGED
@@ -3,101 +3,101 @@
|
|
3
3
|
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
4
|
|
5
5
|
describe "A bounding box" do
|
6
|
-
|
7
6
|
before(:each) do
|
8
7
|
@x = 100
|
9
8
|
@y = 125
|
10
9
|
@width = 50
|
11
10
|
@height = 75
|
12
|
-
@box = Prawn::Document::BoundingBox.new(nil,
|
13
|
-
|
11
|
+
@box = Prawn::Document::BoundingBox.new(nil,
|
12
|
+
nil,
|
13
|
+
[@x, @y],
|
14
|
+
:width => @width,
|
15
|
+
:height => @height)
|
14
16
|
end
|
15
17
|
|
16
18
|
it "should have an anchor at (x, y - height)" do
|
17
|
-
@box.anchor.
|
19
|
+
expect(@box.anchor).to eq([@x, @y - @height])
|
18
20
|
end
|
19
21
|
|
20
22
|
it "should have a left boundary of 0" do
|
21
|
-
@box.left.
|
23
|
+
expect(@box.left).to eq(0)
|
22
24
|
end
|
23
25
|
|
24
26
|
it "should have a right boundary equal to the width" do
|
25
|
-
@box.right.
|
27
|
+
expect(@box.right).to eq(@width)
|
26
28
|
end
|
27
29
|
|
28
30
|
it "should have a top boundary of height" do
|
29
|
-
@box.top.
|
31
|
+
expect(@box.top).to eq(@height)
|
30
32
|
end
|
31
33
|
|
32
34
|
it "should have a bottom boundary of 0" do
|
33
|
-
@box.bottom.
|
35
|
+
expect(@box.bottom).to eq(0)
|
34
36
|
end
|
35
37
|
|
36
38
|
it "should have a top-left of [0,height]" do
|
37
|
-
@box.top_left.
|
39
|
+
expect(@box.top_left).to eq([0, @height])
|
38
40
|
end
|
39
41
|
|
40
42
|
it "should have a top-right of [width,height]" do
|
41
|
-
@box.top_right.
|
43
|
+
expect(@box.top_right).to eq([@width, @height])
|
42
44
|
end
|
43
45
|
|
44
46
|
it "should have a bottom-left of [0,0]" do
|
45
|
-
@box.bottom_left.
|
47
|
+
expect(@box.bottom_left).to eq([0, 0])
|
46
48
|
end
|
47
49
|
|
48
50
|
it "should have a bottom-right of [width,0]" do
|
49
|
-
@box.bottom_right.
|
51
|
+
expect(@box.bottom_right).to eq([@width, 0])
|
50
52
|
end
|
51
53
|
|
52
54
|
it "should have an absolute left boundary of x" do
|
53
|
-
@box.absolute_left.
|
55
|
+
expect(@box.absolute_left).to eq(@x)
|
54
56
|
end
|
55
57
|
|
56
58
|
it "should have an absolute right boundary of x + width" do
|
57
|
-
@box.absolute_right.
|
59
|
+
expect(@box.absolute_right).to eq(@x + @width)
|
58
60
|
end
|
59
61
|
|
60
62
|
it "should have an absolute top boundary of y" do
|
61
|
-
@box.absolute_top.
|
63
|
+
expect(@box.absolute_top).to eq(@y)
|
62
64
|
end
|
63
65
|
|
64
66
|
it "should have an absolute bottom boundary of y - height" do
|
65
|
-
@box.absolute_bottom.
|
67
|
+
expect(@box.absolute_bottom).to eq(@y - @height)
|
66
68
|
end
|
67
69
|
|
68
70
|
it "should have an absolute bottom-left of [x,y-height]" do
|
69
|
-
@box.absolute_bottom_left.
|
71
|
+
expect(@box.absolute_bottom_left).to eq([@x, @y - @height])
|
70
72
|
end
|
71
73
|
|
72
74
|
it "should have an absolute bottom-right of [x+width,y-height]" do
|
73
|
-
@box.absolute_bottom_right.
|
75
|
+
expect(@box.absolute_bottom_right).to eq([@x + @width , @y - @height])
|
74
76
|
end
|
75
77
|
|
76
78
|
it "should have an absolute top-left of [x,y]" do
|
77
|
-
@box.absolute_top_left.
|
79
|
+
expect(@box.absolute_top_left).to eq([@x, @y])
|
78
80
|
end
|
79
81
|
|
80
82
|
it "should have an absolute top-right of [x+width,y]" do
|
81
|
-
@box.absolute_top_right.
|
83
|
+
expect(@box.absolute_top_right).to eq([@x + @width, @y])
|
82
84
|
end
|
83
85
|
|
84
86
|
it "should require width to be set" do
|
85
|
-
|
86
|
-
Prawn::Document::BoundingBox.new(nil, nil, [100,100])
|
87
|
-
end.
|
87
|
+
expect do
|
88
|
+
Prawn::Document::BoundingBox.new(nil, nil, [100, 100])
|
89
|
+
end.to raise_error(ArgumentError)
|
88
90
|
end
|
89
91
|
|
90
92
|
it "should raise_error an ArgumentError if a block is not passed" do
|
91
93
|
pdf = Prawn::Document.new
|
92
|
-
|
94
|
+
expect do
|
93
95
|
pdf.bounding_box([0, 0], :width => 200)
|
94
|
-
end.
|
96
|
+
end.to raise_error(ArgumentError)
|
95
97
|
end
|
96
|
-
|
97
98
|
end
|
98
99
|
|
99
100
|
describe "drawing bounding boxes" do
|
100
|
-
|
101
101
|
before(:each) { create_pdf }
|
102
102
|
|
103
103
|
it "should not stomp on the arguments to bounding_box" do
|
@@ -106,7 +106,7 @@ describe "drawing bounding boxes" do
|
|
106
106
|
pdf.bounding_box x, :width => 100 do
|
107
107
|
pdf.text "bork-bork-bork"
|
108
108
|
end
|
109
|
-
x.
|
109
|
+
expect(x).to eq([100, 500])
|
110
110
|
end
|
111
111
|
|
112
112
|
it "should restore Document#bounds to the correct margin box on exit" do
|
@@ -121,26 +121,24 @@ describe "drawing bounding boxes" do
|
|
121
121
|
|
122
122
|
x_min, y_min, x_max, y_max = pdf.page.dimensions
|
123
123
|
|
124
|
-
pdf.bounds.absolute_top_left.
|
125
|
-
pdf.bounds.absolute_bottom_right.
|
124
|
+
expect(pdf.bounds.absolute_top_left).to eq([x_min, y_max])
|
125
|
+
expect(pdf.bounds.absolute_bottom_right).to eq([x_max, y_min])
|
126
126
|
end
|
127
127
|
|
128
128
|
it "should restore the parent bounding box when calls are nested" do
|
129
|
-
@pdf.bounding_box [100,500], :width => 300, :height => 300 do
|
130
|
-
|
131
|
-
@pdf.bounds.
|
132
|
-
@pdf.bounds.absolute_left.should == 100 + @pdf.margin_box.absolute_left
|
129
|
+
@pdf.bounding_box [100, 500], :width => 300, :height => 300 do
|
130
|
+
expect(@pdf.bounds.absolute_top).to eq(500 + @pdf.margin_box.absolute_bottom)
|
131
|
+
expect(@pdf.bounds.absolute_left).to eq(100 + @pdf.margin_box.absolute_left)
|
133
132
|
|
134
133
|
parent_box = @pdf.bounds
|
135
134
|
|
136
|
-
@pdf.bounding_box [50,200], :width => 100, :height => 100 do
|
137
|
-
@pdf.bounds.absolute_top.
|
138
|
-
@pdf.bounds.absolute_left.
|
135
|
+
@pdf.bounding_box [50, 200], :width => 100, :height => 100 do
|
136
|
+
expect(@pdf.bounds.absolute_top).to eq(200 + parent_box.absolute_bottom)
|
137
|
+
expect(@pdf.bounds.absolute_left).to eq(50 + parent_box.absolute_left)
|
139
138
|
end
|
140
139
|
|
141
|
-
@pdf.bounds.absolute_top.
|
142
|
-
@pdf.bounds.absolute_left.
|
143
|
-
|
140
|
+
expect(@pdf.bounds.absolute_top).to eq(500 + @pdf.margin_box.absolute_bottom)
|
141
|
+
expect(@pdf.bounds.absolute_left).to eq(100 + @pdf.margin_box.absolute_left)
|
144
142
|
end
|
145
143
|
end
|
146
144
|
|
@@ -149,7 +147,7 @@ describe "drawing bounding boxes" do
|
|
149
147
|
@pdf.text "The rain in Spain falls mainly on the plains."
|
150
148
|
end
|
151
149
|
|
152
|
-
@pdf.y.
|
150
|
+
expect(@pdf.y).to be_within(0.001).of(458.384)
|
153
151
|
end
|
154
152
|
|
155
153
|
it "should keep track of the max height the box was stretched to" do
|
@@ -158,77 +156,74 @@ describe "drawing bounding boxes" do
|
|
158
156
|
@pdf.move_up 15
|
159
157
|
end
|
160
158
|
|
161
|
-
box.height.
|
159
|
+
expect(box.height).to eq(100)
|
162
160
|
end
|
163
161
|
|
164
162
|
it "should advance the y-position by bbox.height by default" do
|
165
163
|
orig_y = @pdf.y
|
166
|
-
@pdf.bounding_box [0, @pdf.cursor], :width => @pdf.bounds.width,
|
167
|
-
:height => 30 do
|
164
|
+
@pdf.bounding_box [0, @pdf.cursor], :width => @pdf.bounds.width, :height => 30 do
|
168
165
|
@pdf.text "hello"
|
169
166
|
end
|
170
|
-
@pdf.y.
|
167
|
+
expect(@pdf.y).to be_within(0.001).of(orig_y - 30)
|
171
168
|
end
|
172
169
|
|
173
170
|
it "should not advance y-position if passed :hold_position => true" do
|
174
171
|
orig_y = @pdf.y
|
175
|
-
@pdf.bounding_box [0, @pdf.cursor], :width => @pdf.bounds.width,
|
176
|
-
:hold_position => true do
|
172
|
+
@pdf.bounding_box [0, @pdf.cursor], :width => @pdf.bounds.width, :hold_position => true do
|
177
173
|
@pdf.text "hello"
|
178
174
|
end
|
179
175
|
# y only advances by height of one line ("hello")
|
180
|
-
@pdf.y.
|
176
|
+
expect(@pdf.y).to be_within(0.001).of(orig_y - @pdf.height_of("hello"))
|
181
177
|
end
|
182
178
|
|
183
|
-
it "should not advance y-position of a stretchy bbox if it would stretch "
|
179
|
+
it "should not advance y-position of a stretchy bbox if it would stretch " \
|
184
180
|
"the bbox further" do
|
185
181
|
bottom = @pdf.y = @pdf.margin_box.absolute_bottom
|
186
182
|
@pdf.bounding_box [0, @pdf.margin_box.top], :width => @pdf.bounds.width do
|
187
183
|
@pdf.y = bottom
|
188
184
|
@pdf.text "hello" # starts a new page
|
189
185
|
end
|
190
|
-
@pdf.page_count.
|
186
|
+
expect(@pdf.page_count).to eq(2)
|
191
187
|
|
192
188
|
# Restoring the position (to the absolute bottom) would stretch the bbox to
|
193
189
|
# the bottom of the page, which we don't want. This should be equivalent to
|
194
190
|
# a bbox with :hold_position => true, where we only advance by the amount
|
195
191
|
# that was actually drawn.
|
196
|
-
@pdf.y.
|
192
|
+
expect(@pdf.y).to be_within(0.001).of(
|
197
193
|
@pdf.margin_box.absolute_top - @pdf.height_of("hello")
|
198
194
|
)
|
199
195
|
end
|
200
|
-
|
201
196
|
end
|
202
197
|
|
203
198
|
describe "Indentation" do
|
204
199
|
before(:each) { create_pdf }
|
205
200
|
|
206
201
|
it "should temporarily shift the x coordinate and width" do
|
207
|
-
@pdf.bounding_box([100,100], :width => 200) do
|
202
|
+
@pdf.bounding_box([100, 100], :width => 200) do
|
208
203
|
@pdf.indent(20) do
|
209
|
-
@pdf.bounds.absolute_left.
|
210
|
-
@pdf.bounds.width.
|
204
|
+
expect(@pdf.bounds.absolute_left).to eq(120)
|
205
|
+
expect(@pdf.bounds.width).to eq(180)
|
211
206
|
end
|
212
207
|
end
|
213
208
|
end
|
214
209
|
|
215
210
|
it "should restore the x coordinate and width after block exits" do
|
216
|
-
@pdf.bounding_box([100,100], :width => 200) do
|
211
|
+
@pdf.bounding_box([100, 100], :width => 200) do
|
217
212
|
@pdf.indent(20) do
|
218
213
|
# no-op
|
219
214
|
end
|
220
|
-
@pdf.bounds.absolute_left.
|
221
|
-
@pdf.bounds.width.
|
215
|
+
expect(@pdf.bounds.absolute_left).to eq(100)
|
216
|
+
expect(@pdf.bounds.width).to eq(200)
|
222
217
|
end
|
223
218
|
end
|
224
219
|
|
225
220
|
it "should restore the x coordinate and width on error" do
|
226
|
-
@pdf.bounding_box([100,100], :width => 200) do
|
221
|
+
@pdf.bounding_box([100, 100], :width => 200) do
|
227
222
|
begin
|
228
|
-
@pdf.indent(20) {
|
223
|
+
@pdf.indent(20) { fail }
|
229
224
|
rescue
|
230
|
-
@pdf.bounds.absolute_left.
|
231
|
-
@pdf.bounds.width.
|
225
|
+
expect(@pdf.bounds.absolute_left).to eq(100)
|
226
|
+
expect(@pdf.bounds.width).to eq(200)
|
232
227
|
end
|
233
228
|
end
|
234
229
|
end
|
@@ -237,54 +232,52 @@ describe "Indentation" do
|
|
237
232
|
original_left = @pdf.bounds.absolute_left
|
238
233
|
|
239
234
|
@pdf.indent(20) do
|
240
|
-
@pdf.bounds.absolute_left.
|
235
|
+
expect(@pdf.bounds.absolute_left).to eq(original_left + 20)
|
241
236
|
@pdf.start_new_page
|
242
|
-
@pdf.bounds.absolute_left.
|
237
|
+
expect(@pdf.bounds.absolute_left).to eq(original_left + 20)
|
243
238
|
end
|
244
239
|
|
245
|
-
@pdf.bounds.absolute_left.
|
240
|
+
expect(@pdf.bounds.absolute_left).to eq(original_left)
|
246
241
|
end
|
247
242
|
|
248
243
|
it "should maintain right indentation across a page break" do
|
249
244
|
original_width = @pdf.bounds.width
|
250
245
|
|
251
246
|
@pdf.indent(0, 20) do
|
252
|
-
@pdf.bounds.width.
|
247
|
+
expect(@pdf.bounds.width).to eq(original_width - 20)
|
253
248
|
@pdf.start_new_page
|
254
|
-
@pdf.bounds.width.
|
249
|
+
expect(@pdf.bounds.width).to eq(original_width - 20)
|
255
250
|
end
|
256
251
|
|
257
|
-
@pdf.bounds.width.
|
252
|
+
expect(@pdf.bounds.width).to eq(original_width)
|
258
253
|
end
|
259
254
|
|
260
255
|
it "optionally allows adjustment of the right bound as well" do
|
261
|
-
@pdf.bounding_box([100,100], :width => 200) do
|
256
|
+
@pdf.bounding_box([100, 100], :width => 200) do
|
262
257
|
@pdf.indent(20, 30) do
|
263
|
-
@pdf.bounds.absolute_left.
|
264
|
-
@pdf.bounds.width.
|
258
|
+
expect(@pdf.bounds.absolute_left).to eq(120)
|
259
|
+
expect(@pdf.bounds.width).to eq(150)
|
265
260
|
end
|
266
|
-
@pdf.bounds.absolute_left.
|
267
|
-
@pdf.bounds.width.
|
261
|
+
expect(@pdf.bounds.absolute_left).to eq(100)
|
262
|
+
expect(@pdf.bounds.width).to eq(200)
|
268
263
|
end
|
269
264
|
end
|
270
265
|
|
271
266
|
describe "in a ColumnBox" do
|
272
267
|
it "should subtract the given indentation from the available width" do
|
273
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width,
|
274
|
-
:height => 200, :columns => 2, :spacer => 20) do
|
268
|
+
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width, :height => 200, :columns => 2, :spacer => 20) do
|
275
269
|
width = @pdf.bounds.width
|
276
270
|
@pdf.indent(20) do
|
277
|
-
@pdf.bounds.width.
|
271
|
+
expect(@pdf.bounds.width).to be_within(0.01).of(width - 20)
|
278
272
|
end
|
279
273
|
end
|
280
274
|
end
|
281
275
|
|
282
276
|
it "should subtract right padding from the available width" do
|
283
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width,
|
284
|
-
:height => 200, :columns => 2, :spacer => 20) do
|
277
|
+
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width, :height => 200, :columns => 2, :spacer => 20) do
|
285
278
|
width = @pdf.bounds.width
|
286
279
|
@pdf.indent(20, 30) do
|
287
|
-
@pdf.bounds.width.
|
280
|
+
expect(@pdf.bounds.width).to be_within(0.01).of(width - 50)
|
288
281
|
end
|
289
282
|
end
|
290
283
|
end
|
@@ -294,7 +287,7 @@ describe "Indentation" do
|
|
294
287
|
3.times do |column|
|
295
288
|
x = @pdf.bounds.left_side
|
296
289
|
@pdf.indent(20) do
|
297
|
-
@pdf.bounds.left_side.
|
290
|
+
expect(@pdf.bounds.left_side).to eq(x + 20)
|
298
291
|
end
|
299
292
|
@pdf.bounds.move_past_bottom
|
300
293
|
end
|
@@ -306,7 +299,7 @@ describe "Indentation" do
|
|
306
299
|
3.times do |column|
|
307
300
|
x = @pdf.bounds.right_side
|
308
301
|
@pdf.indent(20) do
|
309
|
-
@pdf.bounds.right_side.
|
302
|
+
expect(@pdf.bounds.right_side).to eq(x)
|
310
303
|
end
|
311
304
|
@pdf.bounds.move_past_bottom
|
312
305
|
end
|
@@ -318,7 +311,7 @@ describe "Indentation" do
|
|
318
311
|
3.times do |column|
|
319
312
|
x = @pdf.bounds.right_side
|
320
313
|
@pdf.indent(20, 10) do
|
321
|
-
@pdf.bounds.right_side.
|
314
|
+
expect(@pdf.bounds.right_side).to eq(x - 10)
|
322
315
|
end
|
323
316
|
@pdf.bounds.move_past_bottom
|
324
317
|
end
|
@@ -334,7 +327,7 @@ describe "Indentation" do
|
|
334
327
|
# ...and no right indent here...
|
335
328
|
@pdf.indent(20) do
|
336
329
|
# right indent is inherited from the parent!
|
337
|
-
@pdf.bounds.right_side.
|
330
|
+
expect(@pdf.bounds.right_side).to eq(x)
|
338
331
|
end
|
339
332
|
end
|
340
333
|
@pdf.bounds.move_past_bottom
|
@@ -350,7 +343,7 @@ describe "Indentation" do
|
|
350
343
|
# requesting a negative right-indent of equivalent size...
|
351
344
|
@pdf.indent(20, -10) do
|
352
345
|
# ...resets the right margin to that of the column!
|
353
|
-
@pdf.bounds.right_side.
|
346
|
+
expect(@pdf.bounds.right_side).to eq(x)
|
354
347
|
end
|
355
348
|
end
|
356
349
|
@pdf.bounds.move_past_bottom
|
@@ -364,7 +357,7 @@ describe "Indentation" do
|
|
364
357
|
w = @pdf.bounds.width
|
365
358
|
@pdf.indent(20, 10) do
|
366
359
|
@pdf.indent(20, 10) do
|
367
|
-
@pdf.bounds.width.
|
360
|
+
expect(@pdf.bounds.width).to eq(w - 60)
|
368
361
|
end
|
369
362
|
end
|
370
363
|
@pdf.bounds.move_past_bottom
|
@@ -379,9 +372,9 @@ describe "A canvas" do
|
|
379
372
|
|
380
373
|
it "should use whatever the last set y position is" do
|
381
374
|
@pdf.canvas do
|
382
|
-
@pdf.bounding_box([100,500]
|
375
|
+
@pdf.bounding_box([100, 500], :width => 200) { @pdf.move_down 50 }
|
383
376
|
end
|
384
|
-
@pdf.y.
|
377
|
+
expect(@pdf.y).to eq(450)
|
385
378
|
end
|
386
379
|
|
387
380
|
it "should restore the original ypos after execution", :issue => 523 do
|
@@ -392,9 +385,8 @@ describe "A canvas" do
|
|
392
385
|
|
393
386
|
doc.canvas {}
|
394
387
|
|
395
|
-
doc.y.
|
388
|
+
expect(doc.y).to eq(original_ypos)
|
396
389
|
end
|
397
|
-
|
398
390
|
end
|
399
391
|
|
400
392
|
describe "Deep-copying" do
|
@@ -403,8 +395,8 @@ describe "Deep-copying" do
|
|
403
395
|
orig = pdf.bounds
|
404
396
|
copy = orig.deep_copy
|
405
397
|
|
406
|
-
copy.
|
407
|
-
copy.document.
|
398
|
+
expect(copy).not_to eq(pdf.bounds)
|
399
|
+
expect(copy.document).to be_nil
|
408
400
|
end
|
409
401
|
end
|
410
402
|
|
@@ -415,11 +407,11 @@ describe "Deep-copying" do
|
|
415
407
|
copy = pdf.bounds.deep_copy
|
416
408
|
|
417
409
|
# the parent bounds should have the same parameters
|
418
|
-
copy.parent.width.
|
419
|
-
copy.parent.height.
|
410
|
+
expect(copy.parent.width).to eq(outside.width)
|
411
|
+
expect(copy.parent.height).to eq(outside.height)
|
420
412
|
|
421
413
|
# but should not be the same object
|
422
|
-
copy.parent.
|
414
|
+
expect(copy.parent).not_to eq(outside)
|
423
415
|
end
|
424
416
|
end
|
425
417
|
end
|
@@ -430,7 +422,7 @@ describe "Prawn::Document#reference_bounds" do
|
|
430
422
|
|
431
423
|
it "should return self for non-stretchy bounds" do
|
432
424
|
@pdf.bounding_box([0, @pdf.cursor], :width => 100, :height => 100) do
|
433
|
-
@pdf.reference_bounds.
|
425
|
+
expect(@pdf.reference_bounds).to eq(@pdf.bounds)
|
434
426
|
end
|
435
427
|
end
|
436
428
|
|
@@ -438,7 +430,7 @@ describe "Prawn::Document#reference_bounds" do
|
|
438
430
|
@pdf.bounding_box([0, @pdf.cursor], :width => 100, :height => 100) do
|
439
431
|
correct_bounds = @pdf.bounds
|
440
432
|
@pdf.bounding_box([0, @pdf.cursor], :width => 100) do
|
441
|
-
@pdf.reference_bounds.
|
433
|
+
expect(@pdf.reference_bounds).to eq(correct_bounds)
|
442
434
|
end
|
443
435
|
end
|
444
436
|
end
|
@@ -448,17 +440,17 @@ describe "Prawn::Document#reference_bounds" do
|
|
448
440
|
correct_bounds = @pdf.bounds
|
449
441
|
@pdf.bounding_box([0, @pdf.cursor], :width => 100) do
|
450
442
|
@pdf.bounding_box([0, @pdf.cursor], :width => 100) do
|
451
|
-
@pdf.reference_bounds.
|
443
|
+
expect(@pdf.reference_bounds).to eq(correct_bounds)
|
452
444
|
end
|
453
445
|
end
|
454
446
|
end
|
455
447
|
end
|
456
448
|
|
457
449
|
it "should return the margin box if there's no explicit bbox" do
|
458
|
-
@pdf.reference_bounds.
|
450
|
+
expect(@pdf.reference_bounds).to eq(@pdf.margin_box)
|
459
451
|
|
460
452
|
@pdf.bounding_box([0, @pdf.cursor], :width => 100) do
|
461
|
-
@pdf.reference_bounds.
|
453
|
+
expect(@pdf.reference_bounds).to eq(@pdf.margin_box)
|
462
454
|
end
|
463
455
|
end
|
464
456
|
|
@@ -466,14 +458,13 @@ describe "Prawn::Document#reference_bounds" do
|
|
466
458
|
@pdf.canvas do
|
467
459
|
canvas_box = @pdf.bounds
|
468
460
|
|
469
|
-
@pdf.reference_bounds.
|
461
|
+
expect(@pdf.reference_bounds).to eq(canvas_box)
|
470
462
|
|
471
463
|
@pdf.bounding_box([0, @pdf.cursor], :width => 100) do
|
472
|
-
@pdf.reference_bounds.
|
464
|
+
expect(@pdf.reference_bounds).to eq(canvas_box)
|
473
465
|
end
|
474
466
|
end
|
475
467
|
end
|
476
|
-
|
477
468
|
end
|
478
469
|
|
479
470
|
describe "BoundingBox#move_past_bottom" do
|
@@ -484,9 +475,9 @@ describe "BoundingBox#move_past_bottom" do
|
|
484
475
|
@pdf.text "Foo"
|
485
476
|
|
486
477
|
pages = PDF::Inspector::Page.analyze(@pdf.render).pages
|
487
|
-
pages.size.
|
488
|
-
pages[0][:strings].
|
489
|
-
pages[1][:strings].
|
478
|
+
expect(pages.size).to eq(2)
|
479
|
+
expect(pages[0][:strings]).to eq([])
|
480
|
+
expect(pages[1][:strings]).to eq(["Foo"])
|
490
481
|
end
|
491
482
|
|
492
483
|
it "should move to the top of the next page if it exists already" do
|
@@ -499,12 +490,12 @@ describe "BoundingBox#move_past_bottom" do
|
|
499
490
|
@pdf.text "Foo"
|
500
491
|
|
501
492
|
@pdf.bounds.move_past_bottom
|
502
|
-
@pdf.y.
|
493
|
+
expect(@pdf.y).to be_within(0.001).of(top_y)
|
503
494
|
@pdf.text "Bar"
|
504
495
|
|
505
496
|
pages = PDF::Inspector::Page.analyze(@pdf.render).pages
|
506
|
-
pages.size.
|
507
|
-
pages[0][:strings].
|
508
|
-
pages[1][:strings].
|
497
|
+
expect(pages.size).to eq(2)
|
498
|
+
expect(pages[0][:strings]).to eq(["Foo"])
|
499
|
+
expect(pages[1][:strings]).to eq(["Bar"])
|
509
500
|
end
|
510
501
|
end
|