receipts 1.1.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|