receipts 1.1.1 → 1.1.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/CHANGELOG.md +4 -0
- data/Rakefile +7 -1
- data/examples/invoice.pdf +0 -0
- data/examples/receipt.pdf +0 -0
- data/examples/statement.pdf +0 -0
- data/lib/receipts/invoice.rb +27 -60
- data/lib/receipts/receipt.rb +14 -30
- data/lib/receipts/statement.rb +26 -54
- data/lib/receipts/version.rb +1 -1
- data/lib/receipts.rb +22 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fead98b1a43ff6d6c86b13f9c8114ebcfa322b809f9f2b068b80e03370c63f65
|
4
|
+
data.tar.gz: e7e29ceceac61563c182626d3d47ab697584e67896aff884097bb955236d44ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de764a9d7466e6680243ac5b2f033534a6140048f99eb5bc15aaad5b38d27063e4ed7e70f2d45167064dec7b3f941d34b0cab29aab1977e876c926ded6e80839
|
7
|
+
data.tar.gz: 7da1873655534b34d80bb735b8fe80da1d84d6f0618f1d1c7be35991e2d5ffeb197aa4b07390a3ba3aba4317ef42c7a874756b075213422d164ed296b9bb7a2b
|
data/CHANGELOG.md
CHANGED
data/Rakefile
CHANGED
@@ -12,6 +12,12 @@ task :console do
|
|
12
12
|
exec "irb -r receipts -I ./lib"
|
13
13
|
end
|
14
14
|
|
15
|
+
task :examples do
|
16
|
+
[:receipt, :invoice, :statement].each { |t| Rake::Task[t].invoke }
|
17
|
+
|
18
|
+
puts "Use `open examples` to view example PDFs."
|
19
|
+
end
|
20
|
+
|
15
21
|
task :receipt do
|
16
22
|
require "./lib/receipts"
|
17
23
|
|
@@ -23,7 +29,7 @@ task :receipt do
|
|
23
29
|
name: "GoRails, LLC",
|
24
30
|
address: "123 Fake Street\nNew York City, NY 10012",
|
25
31
|
email: "support@example.com",
|
26
|
-
logo:
|
32
|
+
logo: "https://www.ruby-lang.org/images/header-ruby-logo@2x.png"
|
27
33
|
},
|
28
34
|
line_items: [
|
29
35
|
["Date", Time.now.to_s],
|
data/examples/invoice.pdf
CHANGED
Binary file
|
data/examples/receipt.pdf
CHANGED
Binary file
|
data/examples/statement.pdf
CHANGED
Binary file
|
data/lib/receipts/invoice.rb
CHANGED
@@ -2,7 +2,7 @@ require "prawn"
|
|
2
2
|
require "prawn/table"
|
3
3
|
|
4
4
|
module Receipts
|
5
|
-
class Invoice <
|
5
|
+
class Invoice < Base
|
6
6
|
attr_reader :attributes, :id, :company, :custom_font, :line_items, :logo, :message, :product, :subheading, :bill_to, :issue_date, :due_date, :status
|
7
7
|
|
8
8
|
def initialize(attributes)
|
@@ -18,7 +18,7 @@ module Receipts
|
|
18
18
|
@due_date = attributes.fetch(:due_date)
|
19
19
|
@status = attributes.fetch(:status)
|
20
20
|
|
21
|
-
super(
|
21
|
+
super(page_size: "LETTER")
|
22
22
|
|
23
23
|
setup_fonts if custom_font.any?
|
24
24
|
generate
|
@@ -34,65 +34,36 @@ module Receipts
|
|
34
34
|
"INVOICE #%{id}"
|
35
35
|
end
|
36
36
|
|
37
|
-
def setup_fonts
|
38
|
-
font_families.update "Primary" => custom_font
|
39
|
-
font "Primary"
|
40
|
-
end
|
41
|
-
|
42
37
|
def generate
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
end
|
49
|
-
end
|
38
|
+
header
|
39
|
+
description
|
40
|
+
invoice_details
|
41
|
+
charge_details
|
42
|
+
footer
|
50
43
|
end
|
51
44
|
|
52
|
-
def header
|
53
|
-
move_down 60
|
54
|
-
|
45
|
+
def header(height: 24)
|
55
46
|
logo = company[:logo]
|
47
|
+
return if logo.nil?
|
48
|
+
image load_image(logo), height: height
|
49
|
+
end
|
56
50
|
|
57
|
-
|
58
|
-
move_down 32
|
59
|
-
elsif logo.is_a?(String)
|
60
|
-
image URI.parse(logo).open, height: 32
|
61
|
-
else
|
62
|
-
image logo, height: 32
|
63
|
-
end
|
64
|
-
|
51
|
+
def description
|
65
52
|
move_down 8
|
66
|
-
label(subheading % {id: id})
|
53
|
+
text label(subheading % {id: id}), inline_format: true, leading: 4
|
54
|
+
end
|
67
55
|
|
56
|
+
def invoice_details
|
68
57
|
move_down 10
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
label
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
bounding_box([250, top], width: 200) do
|
80
|
-
label "INVOICE DATE"
|
81
|
-
|
82
|
-
move_down 5
|
83
|
-
text issue_date.to_s, inline_format: true, size: 12, leading: 4
|
84
|
-
|
85
|
-
move_down 10
|
86
|
-
label "DUE DATE"
|
87
|
-
|
88
|
-
move_down 5
|
89
|
-
text due_date.to_s, inline_format: true, size: 12, leading: 4
|
90
|
-
|
91
|
-
move_down 10
|
92
|
-
label "STATUS"
|
93
|
-
|
94
|
-
move_down 5
|
95
|
-
text status, inline_format: true, size: 12, leading: 4
|
58
|
+
font_size 9
|
59
|
+
|
60
|
+
line_items = [
|
61
|
+
[{content: "#{label("BILL TO")}\n#{bill_to}", rowspan: 3, padding: [0, 12, 0, 0]}, "#{label("INVOICE DATE")}\n#{issue_date}"],
|
62
|
+
["#{label("DUE DATE")}\n#{due_date}"],
|
63
|
+
["#{label("STATUS")}\n#{status}"]
|
64
|
+
]
|
65
|
+
table(line_items, width: bounds.width, cell_style: {inline_format: true, overflow: :shrink_to_fit}) do
|
66
|
+
cells.borders = []
|
96
67
|
end
|
97
68
|
end
|
98
69
|
|
@@ -101,8 +72,8 @@ module Receipts
|
|
101
72
|
|
102
73
|
borders = line_items.length - 2
|
103
74
|
|
104
|
-
table(line_items, width: bounds.width, cell_style: {border_color: "cccccc", inline_format: true}) do
|
105
|
-
cells.padding =
|
75
|
+
table(line_items, width: bounds.width, cell_style: {border_color: "cccccc", inline_format: true, overflow: :shrink_to_fit}) do
|
76
|
+
cells.padding = 10
|
106
77
|
cells.borders = []
|
107
78
|
row(0..borders).borders = [:bottom]
|
108
79
|
end
|
@@ -110,15 +81,11 @@ module Receipts
|
|
110
81
|
|
111
82
|
def footer
|
112
83
|
move_down 30
|
113
|
-
text message, inline_format: true,
|
84
|
+
text message, inline_format: true, leading: 4
|
114
85
|
|
115
86
|
move_down 30
|
116
87
|
text company.fetch(:name), inline_format: true
|
117
88
|
text "<color rgb='888888'>#{company.fetch(:address)}</color>", inline_format: true
|
118
89
|
end
|
119
|
-
|
120
|
-
def label(text)
|
121
|
-
text "<color rgb='a6a6a6'>#{text}</color>", inline_format: true, size: 8
|
122
|
-
end
|
123
90
|
end
|
124
91
|
end
|
data/lib/receipts/receipt.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
|
-
require "prawn"
|
2
|
-
require "prawn/table"
|
3
|
-
|
4
1
|
module Receipts
|
5
|
-
class Receipt <
|
2
|
+
class Receipt < Base
|
6
3
|
attr_reader :attributes, :id, :company, :custom_font, :line_items, :logo, :message, :product, :subheading
|
7
4
|
|
8
5
|
def initialize(attributes)
|
@@ -14,7 +11,7 @@ module Receipts
|
|
14
11
|
@message = attributes.fetch(:message) { default_message }
|
15
12
|
@subheading = attributes.fetch(:subheading) { default_subheading }
|
16
13
|
|
17
|
-
super(
|
14
|
+
super(page_size: "LETTER")
|
18
15
|
|
19
16
|
setup_fonts if custom_font.any?
|
20
17
|
generate
|
@@ -30,48 +27,35 @@ module Receipts
|
|
30
27
|
"RECEIPT FOR CHARGE #%{id}"
|
31
28
|
end
|
32
29
|
|
33
|
-
def setup_fonts
|
34
|
-
font_families.update "Primary" => custom_font
|
35
|
-
font "Primary"
|
36
|
-
end
|
37
|
-
|
38
30
|
def generate
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
footer
|
44
|
-
end
|
45
|
-
end
|
31
|
+
header
|
32
|
+
description
|
33
|
+
charge_details
|
34
|
+
footer
|
46
35
|
end
|
47
36
|
|
48
|
-
def header
|
49
|
-
move_down 60
|
50
|
-
|
37
|
+
def header(height: 24)
|
51
38
|
logo = company[:logo]
|
39
|
+
return if logo.nil?
|
40
|
+
image load_image(logo), height: height
|
41
|
+
end
|
52
42
|
|
53
|
-
|
54
|
-
move_down 32
|
55
|
-
elsif logo.is_a?(String)
|
56
|
-
image URI.parse(logo).open, height: 32
|
57
|
-
else
|
58
|
-
image logo, height: 32
|
59
|
-
end
|
60
|
-
|
43
|
+
def description
|
61
44
|
move_down 8
|
62
45
|
text "<color rgb='a6a6a6'>#{subheading % {id: id}}</color>", inline_format: true
|
63
46
|
|
64
47
|
move_down 30
|
65
|
-
text message, inline_format: true,
|
48
|
+
text message, inline_format: true, leading: 4
|
66
49
|
end
|
67
50
|
|
68
51
|
def charge_details
|
69
52
|
move_down 30
|
53
|
+
font_size 9
|
70
54
|
|
71
55
|
borders = line_items.length - 2
|
72
56
|
|
73
57
|
table(line_items, width: bounds.width, cell_style: {border_color: "cccccc", inline_format: true}) do
|
74
|
-
cells.padding =
|
58
|
+
cells.padding = 10
|
75
59
|
cells.borders = []
|
76
60
|
row(0..borders).borders = [:bottom]
|
77
61
|
end
|
data/lib/receipts/statement.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
|
-
require "prawn"
|
2
|
-
require "prawn/table"
|
3
|
-
|
4
1
|
module Receipts
|
5
|
-
class Statement <
|
2
|
+
class Statement < Base
|
6
3
|
attr_reader :attributes, :id, :company, :custom_font, :line_items, :logo, :message, :product, :subheading, :bill_to, :issue_date, :start_date, :end_date
|
7
4
|
|
8
5
|
def initialize(attributes)
|
@@ -18,7 +15,7 @@ module Receipts
|
|
18
15
|
@start_date = attributes.fetch(:start_date)
|
19
16
|
@end_date = attributes.fetch(:end_date)
|
20
17
|
|
21
|
-
super(
|
18
|
+
super(page_size: "LETTER")
|
22
19
|
|
23
20
|
setup_fonts if custom_font.any?
|
24
21
|
generate
|
@@ -34,57 +31,36 @@ module Receipts
|
|
34
31
|
"STATEMENT #%{id}"
|
35
32
|
end
|
36
33
|
|
37
|
-
def setup_fonts
|
38
|
-
font_families.update "Primary" => custom_font
|
39
|
-
font "Primary"
|
40
|
-
end
|
41
|
-
|
42
34
|
def generate
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
end
|
49
|
-
end
|
35
|
+
header
|
36
|
+
description
|
37
|
+
statement_details
|
38
|
+
charge_details
|
39
|
+
footer
|
50
40
|
end
|
51
41
|
|
52
|
-
def header
|
53
|
-
move_down 60
|
54
|
-
|
42
|
+
def header(height: 24)
|
55
43
|
logo = company[:logo]
|
44
|
+
return if logo.nil?
|
45
|
+
image load_image(logo), height: height
|
46
|
+
end
|
56
47
|
|
57
|
-
|
58
|
-
move_down 32
|
59
|
-
elsif logo.is_a?(String)
|
60
|
-
image URI.parse(logo).open, height: 32
|
61
|
-
else
|
62
|
-
image logo, height: 32
|
63
|
-
end
|
64
|
-
|
48
|
+
def description
|
65
49
|
move_down 8
|
66
|
-
label(subheading % {id: id})
|
50
|
+
text label(subheading % {id: id}), inline_format: true, leading: 4
|
51
|
+
end
|
67
52
|
|
53
|
+
def statement_details
|
68
54
|
move_down 10
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
label "STATEMENT DATE"
|
79
|
-
|
80
|
-
move_down 5
|
81
|
-
text issue_date.to_s, inline_format: true, size: 12, leading: 4
|
82
|
-
|
83
|
-
move_down 10
|
84
|
-
label "STATEMENT PERIOD"
|
85
|
-
|
86
|
-
move_down 5
|
87
|
-
text "#{start_date} - #{end_date}", inline_format: true, size: 12, leading: 4
|
55
|
+
font_size 9
|
56
|
+
|
57
|
+
line_items = [
|
58
|
+
[{content: "#{label("BILL TO")}\n#{bill_to}", rowspan: 3, padding: [0, 12, 0, 0]}, "#{label("INVOICE DATE")}\n#{issue_date}"],
|
59
|
+
["#{label("STATEMENT DATE")}\n#{issue_date}"],
|
60
|
+
["#{label("STATEMENT PERIOD")}\n#{start_date} - #{end_date}"]
|
61
|
+
]
|
62
|
+
table(line_items, width: bounds.width, cell_style: {inline_format: true, overflow: :shrink_to_fit}) do
|
63
|
+
cells.borders = []
|
88
64
|
end
|
89
65
|
end
|
90
66
|
|
@@ -94,7 +70,7 @@ module Receipts
|
|
94
70
|
borders = line_items.length - 2
|
95
71
|
|
96
72
|
table(line_items, width: bounds.width, cell_style: {border_color: "cccccc", inline_format: true}) do
|
97
|
-
cells.padding =
|
73
|
+
cells.padding = 10
|
98
74
|
cells.borders = []
|
99
75
|
row(0..borders).borders = [:bottom]
|
100
76
|
end
|
@@ -102,15 +78,11 @@ module Receipts
|
|
102
78
|
|
103
79
|
def footer
|
104
80
|
move_down 30
|
105
|
-
text message, inline_format: true,
|
81
|
+
text message, inline_format: true, leading: 4
|
106
82
|
|
107
83
|
move_down 30
|
108
84
|
text company.fetch(:name), inline_format: true
|
109
85
|
text "<color rgb='888888'>#{company.fetch(:address)}</color>", inline_format: true
|
110
86
|
end
|
111
|
-
|
112
|
-
def label(text)
|
113
|
-
text "<color rgb='a6a6a6'>#{text}</color>", inline_format: true, size: 8
|
114
|
-
end
|
115
87
|
end
|
116
88
|
end
|
data/lib/receipts/version.rb
CHANGED
data/lib/receipts.rb
CHANGED
@@ -1,8 +1,29 @@
|
|
1
|
-
require "open-uri"
|
2
1
|
require "receipts/version"
|
2
|
+
require "open-uri"
|
3
|
+
require "prawn"
|
4
|
+
require "prawn/table"
|
3
5
|
|
4
6
|
module Receipts
|
5
7
|
autoload :Invoice, "receipts/invoice"
|
6
8
|
autoload :Receipt, "receipts/receipt"
|
7
9
|
autoload :Statement, "receipts/statement"
|
10
|
+
|
11
|
+
class Base < Prawn::Document
|
12
|
+
def setup_fonts
|
13
|
+
font_families.update "Primary" => custom_font
|
14
|
+
font "Primary"
|
15
|
+
end
|
16
|
+
|
17
|
+
def load_image(logo)
|
18
|
+
if logo.is_a? String
|
19
|
+
logo.start_with?("http") ? URI.parse(logo).open : File.open(logo)
|
20
|
+
else
|
21
|
+
logo
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def label(text)
|
26
|
+
"<font size='8'><color rgb='a6a6a6'>#{text}</color></font>"
|
27
|
+
end
|
28
|
+
end
|
8
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: receipts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Oliver
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -161,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
161
|
- !ruby/object:Gem::Version
|
162
162
|
version: '0'
|
163
163
|
requirements: []
|
164
|
-
rubygems_version: 3.2.
|
164
|
+
rubygems_version: 3.2.22
|
165
165
|
signing_key:
|
166
166
|
specification_version: 4
|
167
167
|
summary: Receipts for your Rails application that works with any payment provider.
|