prawn-grouping 0.1.1 → 0.2.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.
- checksums.yaml +5 -5
- data/.gitignore +3 -0
- data/.travis.yml +8 -8
- data/CHANGELOG.md +6 -0
- data/Gemfile +3 -0
- data/Guardfile +1 -1
- data/README.md +14 -10
- data/gemfiles/prawn_2_1.gemfile +5 -0
- data/gemfiles/prawn_2_2.gemfile +5 -0
- data/lib/prawn/grouping.rb +11 -10
- data/lib/prawn/grouping/version.rb +1 -1
- data/prawn-grouping.gemspec +6 -8
- data/spec/grouping_spec.rb +40 -22
- data/spec/spec_helper.rb +0 -1
- metadata +35 -60
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: aead835d0b903112a2a55fc086b9062aac77d1d399750791339c94e2fbde1fdf
|
4
|
+
data.tar.gz: 5e10604251eadec6c215d2709ef5b14c5fe6092ae2ef5adb7d947a7371391769
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d90cbb94ac56d9035274f26554247246f68d7592ed3856f202392d5cf477742d2a49da1c4e6e6f13e2751555321aebec99e7550203848d1e96181ad8110547aa
|
7
|
+
data.tar.gz: f718a7b7f64615d53ca9c465d5a367417adb25622e29ea711d91b800f1e3337980ec5da90d1aeb914451931e7916923e478e6c638b035318237185cb0f899f5e
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
-
|
4
|
-
- 2.
|
5
|
-
- 2.1
|
6
|
-
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
3
|
+
- 2.3.7
|
4
|
+
- 2.4.4
|
5
|
+
- 2.5.1
|
6
|
+
- jruby-9.2.0.0
|
7
|
+
|
8
|
+
gemfile:
|
9
|
+
- gemfiles/prawn_2_1.gemfile
|
10
|
+
- gemfiles/prawn_2_2.gemfile
|
data/CHANGELOG.md
ADDED
data/Gemfile
CHANGED
data/Guardfile
CHANGED
data/README.md
CHANGED
@@ -27,8 +27,8 @@ Or install it yourself as:
|
|
27
27
|
```ruby
|
28
28
|
Prawn::Document.new do
|
29
29
|
20.times { text "Regular text" }
|
30
|
-
group do
|
31
|
-
20.times { text "Paragraphs not separated unless
|
30
|
+
group do |g|
|
31
|
+
20.times { g.text "Paragraphs not separated unless necessary" }
|
32
32
|
end
|
33
33
|
end
|
34
34
|
```
|
@@ -38,10 +38,10 @@ end
|
|
38
38
|
```ruby
|
39
39
|
Prawn::Document.new do
|
40
40
|
5.times { text "Regular text" }
|
41
|
-
group do
|
42
|
-
15.times { text "Paragraphs not separated unless
|
43
|
-
group do
|
44
|
-
30.times { text "Subparagraphs not separated unless
|
41
|
+
group do |g|
|
42
|
+
15.times { g.text "Paragraphs not separated unless necessary" }
|
43
|
+
group do |g|
|
44
|
+
30.times { g.text "Subparagraphs not separated unless necessary" }
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
@@ -61,8 +61,8 @@ Currently three callbacks are supported:
|
|
61
61
|
Prawn::Document.new do
|
62
62
|
5.times { text "Regular text" }
|
63
63
|
|
64
|
-
group :too_tall => lambda { start_new_page } do
|
65
|
-
15.times { text "Paragraphs not separated unless
|
64
|
+
group :too_tall => lambda { start_new_page } do |g|
|
65
|
+
15.times { g.text "Paragraphs not separated unless necessary" }
|
66
66
|
end
|
67
67
|
end
|
68
68
|
```
|
@@ -72,18 +72,22 @@ The example above starts a new page if the content is too tall for a single page
|
|
72
72
|
|
73
73
|
## Troubleshooting
|
74
74
|
|
75
|
-
When using JRuby a block parameter has to be supplied. For the other tested Interpreters this
|
75
|
+
#### When using JRuby on a version smaller than 0.2.0 a block parameter has to be supplied. For the other tested Interpreters this was optional.
|
76
76
|
|
77
77
|
```ruby
|
78
78
|
Prawn::Document.new do
|
79
79
|
5.times { text "Regular text" }
|
80
80
|
|
81
81
|
group do |g|
|
82
|
-
15.times { g.text "Paragraphs not separated unless
|
82
|
+
15.times { g.text "Paragraphs not separated unless necessary" }
|
83
83
|
end
|
84
84
|
end
|
85
85
|
```
|
86
86
|
|
87
|
+
#### Manipulating objects within the group block
|
88
|
+
|
89
|
+
The grouping internally works by executing the block one or _multiple_ times and checking the results, because deep copy did not work well for the original implementation in many cases. As a result you should not manipulate your data objects within the block. See issue #7 for details.
|
90
|
+
|
87
91
|
## Contributing
|
88
92
|
|
89
93
|
1. Fork it ( http://github.com/<my-github-username>/prawn-grouping/fork )
|
data/lib/prawn/grouping.rb
CHANGED
@@ -3,9 +3,9 @@ require "prawn/grouping/version"
|
|
3
3
|
|
4
4
|
module Prawn
|
5
5
|
module Grouping
|
6
|
-
|
6
|
+
|
7
7
|
# Groups a given block vertiacally within the current context, if possible.
|
8
|
-
#
|
8
|
+
#
|
9
9
|
# Parameters are:
|
10
10
|
#
|
11
11
|
# <tt>options</tt>:: A hash for grouping options.
|
@@ -16,7 +16,7 @@ module Prawn
|
|
16
16
|
# <tt>:fits_current_context</tt>:: A proc called before the content is
|
17
17
|
# rendered and does fit context.
|
18
18
|
#
|
19
|
-
def group(options = {}
|
19
|
+
def group(options = {})
|
20
20
|
too_tall = options[:too_tall]
|
21
21
|
fits_new_context = options[:fits_new_context]
|
22
22
|
fits_current_context = options[:fits_current_context]
|
@@ -24,27 +24,27 @@ module Prawn
|
|
24
24
|
# create a temporary document with current context and offset
|
25
25
|
pdf = create_box_clone
|
26
26
|
pdf.y = y
|
27
|
-
|
27
|
+
yield pdf
|
28
28
|
|
29
29
|
if pdf.page_count > 1
|
30
30
|
# create a temporary document without offset
|
31
31
|
pdf = create_box_clone
|
32
|
-
|
32
|
+
yield pdf
|
33
33
|
|
34
34
|
if pdf.page_count > 1
|
35
35
|
# does not fit new context
|
36
36
|
too_tall.call if too_tall
|
37
|
-
|
37
|
+
yield self
|
38
38
|
else
|
39
39
|
fits_new_context.call if fits_new_context
|
40
40
|
bounds.move_past_bottom
|
41
|
-
|
41
|
+
yield self
|
42
42
|
end
|
43
43
|
return false
|
44
44
|
else
|
45
45
|
# just render it
|
46
46
|
fits_current_context.call if fits_current_context
|
47
|
-
|
47
|
+
yield self
|
48
48
|
return true
|
49
49
|
end
|
50
50
|
end
|
@@ -56,11 +56,12 @@ module Prawn
|
|
56
56
|
pdf.margin_box = @bounding_box.dup
|
57
57
|
pdf.text_formatter = @text_formatter.dup
|
58
58
|
pdf.font_families.update font_families
|
59
|
-
pdf.font font.
|
59
|
+
pdf.font font.family
|
60
60
|
pdf.font_size font_size
|
61
|
+
pdf.default_leading = default_leading
|
61
62
|
end
|
62
63
|
end
|
63
64
|
end
|
64
65
|
end
|
65
66
|
|
66
|
-
Prawn::Document.extensions << Prawn::Grouping
|
67
|
+
Prawn::Document.extensions << Prawn::Grouping
|
data/prawn-grouping.gemspec
CHANGED
@@ -16,17 +16,15 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
17
17
|
spec.test_files = Dir[ "spec/*_spec.rb" ]
|
18
18
|
spec.require_path = "lib"
|
19
|
-
spec.required_ruby_version = '>=
|
20
|
-
spec.required_rubygems_version = ">=
|
19
|
+
spec.required_ruby_version = '>= 2.3.0'
|
20
|
+
spec.required_rubygems_version = ">= 2.0.0"
|
21
21
|
|
22
|
-
spec.add_dependency "prawn", "
|
22
|
+
spec.add_dependency "prawn", ">= 2.0.0"
|
23
23
|
|
24
|
-
spec.add_development_dependency "bundler"
|
24
|
+
spec.add_development_dependency "bundler"
|
25
25
|
spec.add_development_dependency "rake"
|
26
26
|
spec.add_development_dependency "rspec"
|
27
|
-
spec.add_development_dependency "pdf-inspector", "~> 1.
|
28
|
-
spec.add_development_dependency "pdf-reader", "~>1.
|
29
|
-
spec.add_development_dependency "guard"
|
30
|
-
spec.add_development_dependency "guard-rspec"
|
27
|
+
spec.add_development_dependency "pdf-inspector", "~> 1.3.0"
|
28
|
+
spec.add_development_dependency "pdf-reader", "~>2.1.0"
|
31
29
|
spec.add_development_dependency "growl"
|
32
30
|
end
|
data/spec/grouping_spec.rb
CHANGED
@@ -3,32 +3,32 @@ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
|
3
3
|
describe "Prawn::Grouping" do
|
4
4
|
it "returns true if the content fits in the current context" do
|
5
5
|
pdf = Prawn::Document.new
|
6
|
-
val = pdf.group do |pdf|
|
6
|
+
val = pdf.group do |pdf|
|
7
7
|
pdf.text "FooBar"
|
8
8
|
end
|
9
|
-
(!!val).
|
9
|
+
expect(!!val).to eq(true)
|
10
10
|
|
11
11
|
pages = PDF::Inspector::Page.analyze(pdf.render).pages
|
12
|
-
pages.size.
|
12
|
+
expect(pages.size).to eq(1)
|
13
13
|
end
|
14
14
|
|
15
15
|
it "calls callbacks according to content length" do
|
16
16
|
called = 0
|
17
|
-
pdf = Prawn::Document.new do
|
18
|
-
group :fits_current_context => lambda { called = 1 } do |pdf|
|
17
|
+
pdf = Prawn::Document.new do |pdf|
|
18
|
+
pdf.group :fits_current_context => lambda { called = 1 } do |pdf|
|
19
19
|
20.times { pdf.text "FooBar 1" }
|
20
20
|
end
|
21
|
-
called.
|
21
|
+
expect(called).to eq(1)
|
22
22
|
|
23
|
-
group :fits_new_context => lambda { called = 2 } do |pdf|
|
23
|
+
pdf.group :fits_new_context => lambda { called = 2 } do |pdf|
|
24
24
|
40.times { pdf.text "FooBar 2" }
|
25
25
|
end
|
26
|
-
called.
|
26
|
+
expect(called).to eq(2)
|
27
27
|
|
28
|
-
group :too_tall => lambda { called = 3 } do |pdf|
|
28
|
+
pdf.group :too_tall => lambda { called = 3 } do |pdf|
|
29
29
|
100.times { pdf.text "FooBar 3" }
|
30
30
|
end
|
31
|
-
called.
|
31
|
+
expect(called).to eq(3)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -46,29 +46,29 @@ describe "Prawn::Grouping" do
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
pages = PDF::Inspector::Page.analyze(pdf.render).pages
|
49
|
-
pages.size.
|
49
|
+
expect(pages.size).to eq(2)
|
50
50
|
end
|
51
51
|
|
52
52
|
# the following example were copied to fit the original spec from
|
53
53
|
# https://github.com/prawnpdf/prawn/blob/master/spec/document_spec.rb
|
54
54
|
it "should group a simple block on a single page" do
|
55
|
-
pdf = Prawn::Document.new do
|
56
|
-
|
57
|
-
val = group do |pdf|
|
55
|
+
pdf = Prawn::Document.new do |pdf|
|
56
|
+
pdf.y = 50
|
57
|
+
val = pdf.group do |pdf|
|
58
58
|
pdf.text "Hello"
|
59
59
|
pdf.text "World"
|
60
60
|
end
|
61
61
|
|
62
62
|
# group should return a false value since a new page was started
|
63
|
-
(!!val).
|
63
|
+
expect(!!val).to eq(false)
|
64
64
|
end
|
65
65
|
pages = PDF::Inspector::Page.analyze(pdf.render).pages
|
66
|
-
pages.size.
|
67
|
-
pages[0][:strings].
|
68
|
-
pages[1][:strings].
|
66
|
+
expect(pages.size).to eq(2)
|
67
|
+
expect(pages[0][:strings]).to eq([])
|
68
|
+
expect(pages[1][:strings]).to eq(["Hello", "World"])
|
69
69
|
end
|
70
70
|
|
71
|
-
|
71
|
+
|
72
72
|
|
73
73
|
it "should group within individual column boxes" do
|
74
74
|
pdf = Prawn::Document.new do
|
@@ -84,7 +84,25 @@ describe "Prawn::Grouping" do
|
|
84
84
|
|
85
85
|
# Second page should start with a 0 because it's a new group.
|
86
86
|
pages = PDF::Inspector::Page.analyze(pdf.render).pages
|
87
|
-
pages.size.
|
88
|
-
pages[1][:strings].first.
|
87
|
+
expect(pages.size).to eq(2)
|
88
|
+
expect(pages[1][:strings].first).to eq('0')
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should allow the use of inline formatting" do
|
92
|
+
pdf = Prawn::Document.new do
|
93
|
+
# Set up columns with grouped blocks of 0..49. 0 to 49 is slightly short
|
94
|
+
# of the height of one page / column, so each column should get its own
|
95
|
+
# group (every column should start with zero).
|
96
|
+
group do |pdf|
|
97
|
+
10.times { |i| pdf.text("<b>#{i}</b>", inline_format: true) }
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
# Second page should start with a 0 because it's a new group.
|
102
|
+
pages = PDF::Inspector::Page.analyze(pdf.render).pages
|
103
|
+
expect(pages.size).to eq(1)
|
104
|
+
expect(pages[0][:strings].first).to eq('0')
|
105
|
+
|
106
|
+
pdf.render_file 'test.pdf'
|
89
107
|
end
|
90
|
-
end
|
108
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,139 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prawn-grouping
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Dengler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: prawn
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 2.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 2.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: pdf-inspector
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.
|
75
|
+
version: 1.3.0
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.
|
82
|
+
version: 1.3.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: pdf-reader
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - ~>
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '1.2'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ~>
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '1.2'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: guard
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - '>='
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - '>='
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: guard-rspec
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - '>='
|
87
|
+
- - "~>"
|
116
88
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
89
|
+
version: 2.1.0
|
118
90
|
type: :development
|
119
91
|
prerelease: false
|
120
92
|
version_requirements: !ruby/object:Gem::Requirement
|
121
93
|
requirements:
|
122
|
-
- -
|
94
|
+
- - "~>"
|
123
95
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
96
|
+
version: 2.1.0
|
125
97
|
- !ruby/object:Gem::Dependency
|
126
98
|
name: growl
|
127
99
|
requirement: !ruby/object:Gem::Requirement
|
128
100
|
requirements:
|
129
|
-
- -
|
101
|
+
- - ">="
|
130
102
|
- !ruby/object:Gem::Version
|
131
103
|
version: '0'
|
132
104
|
type: :development
|
133
105
|
prerelease: false
|
134
106
|
version_requirements: !ruby/object:Gem::Requirement
|
135
107
|
requirements:
|
136
|
-
- -
|
108
|
+
- - ">="
|
137
109
|
- !ruby/object:Gem::Version
|
138
110
|
version: '0'
|
139
111
|
description:
|
@@ -143,14 +115,17 @@ executables: []
|
|
143
115
|
extensions: []
|
144
116
|
extra_rdoc_files: []
|
145
117
|
files:
|
146
|
-
- .gitignore
|
147
|
-
- .rspec
|
148
|
-
- .travis.yml
|
118
|
+
- ".gitignore"
|
119
|
+
- ".rspec"
|
120
|
+
- ".travis.yml"
|
121
|
+
- CHANGELOG.md
|
149
122
|
- Gemfile
|
150
123
|
- Guardfile
|
151
124
|
- LICENSE.txt
|
152
125
|
- README.md
|
153
126
|
- Rakefile
|
127
|
+
- gemfiles/prawn_2_1.gemfile
|
128
|
+
- gemfiles/prawn_2_2.gemfile
|
154
129
|
- lib/prawn/grouping.rb
|
155
130
|
- lib/prawn/grouping/version.rb
|
156
131
|
- prawn-grouping.gemspec
|
@@ -166,17 +141,17 @@ require_paths:
|
|
166
141
|
- lib
|
167
142
|
required_ruby_version: !ruby/object:Gem::Requirement
|
168
143
|
requirements:
|
169
|
-
- -
|
144
|
+
- - ">="
|
170
145
|
- !ruby/object:Gem::Version
|
171
|
-
version:
|
146
|
+
version: 2.3.0
|
172
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
148
|
requirements:
|
174
|
-
- -
|
149
|
+
- - ">="
|
175
150
|
- !ruby/object:Gem::Version
|
176
|
-
version:
|
151
|
+
version: 2.0.0
|
177
152
|
requirements: []
|
178
153
|
rubyforge_project:
|
179
|
-
rubygems_version: 2.
|
154
|
+
rubygems_version: 2.7.6
|
180
155
|
signing_key:
|
181
156
|
specification_version: 4
|
182
157
|
summary: Grouping extension for prawn pdf generator
|