invoice_printer 1.3.0 → 2.0.0.alpha1
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/Gemfile +2 -2
- data/Gemfile.lock +12 -17
- data/LICENSE.txt +1 -1
- data/Rakefile +3 -2
- data/bin/invoice_printer +2 -1
- data/docs/COMMAND_LINE.md +4 -0
- data/docs/LIBRARY.md +10 -12
- data/docs/SERVER.md +1 -1
- data/examples/clients/node.js +2 -12
- data/examples/complex_invoice.rb +2 -8
- data/examples/czech_invoice.rb +13 -9
- data/examples/czech_invoice_long.rb +13 -9
- data/examples/international_invoice.rb +14 -10
- data/examples/long_invoice.rb +2 -8
- data/examples/provider_purchaser_lines.rb +111 -0
- data/examples/simple_invoice.rb +4 -0
- data/invoice_printer.gemspec +11 -6
- data/invoice_printer_server.gemspec +35 -0
- data/lib/invoice_printer/document.rb +14 -12
- data/lib/invoice_printer/pdf_document.rb +113 -51
- data/lib/invoice_printer/version.rb +1 -1
- data/test/cli_test.rb +4 -1
- data/test/test_ext.rb +6 -10
- data/test/test_helper.rb +18 -12
- metadata +15 -45
- data/bin/invoice_printer_server +0 -69
- data/lib/invoice_printer/server.rb +0 -90
data/test/test_helper.rb
CHANGED
@@ -16,21 +16,11 @@ module InvoicePrinterHelpers
|
|
16
16
|
provider_name: 'Business s.r.o.',
|
17
17
|
provider_tax_id: '56565656',
|
18
18
|
provider_tax_id2: '465454',
|
19
|
-
|
20
|
-
provider_street_number: '1',
|
21
|
-
provider_postcode: '747 05',
|
22
|
-
provider_city: 'Opava',
|
23
|
-
provider_city_part: 'Katerinky',
|
24
|
-
provider_extra_address_line: 'Czech Republic',
|
19
|
+
provider_lines: default_provider_address,
|
25
20
|
purchaser_name: 'Adam',
|
26
21
|
purchaser_tax_id: nil,
|
27
22
|
purchaser_tax_id2: nil,
|
28
|
-
|
29
|
-
purchaser_street_number: '1',
|
30
|
-
purchaser_postcode: '747 70',
|
31
|
-
purchaser_city: 'Opava',
|
32
|
-
purchaser_city_part: '',
|
33
|
-
purchaser_extra_address_line: '',
|
23
|
+
purchaser_lines: default_purchaser_address,
|
34
24
|
issue_date: '19/03/3939',
|
35
25
|
due_date: '19/03/3939',
|
36
26
|
subtotal: '175',
|
@@ -49,6 +39,22 @@ module InvoicePrinterHelpers
|
|
49
39
|
}
|
50
40
|
end
|
51
41
|
|
42
|
+
def default_provider_address
|
43
|
+
<<~ADDRESS
|
44
|
+
Rolnicka 1
|
45
|
+
747 05 Opava
|
46
|
+
Katerinky
|
47
|
+
Czech Republic
|
48
|
+
ADDRESS
|
49
|
+
end
|
50
|
+
|
51
|
+
def default_purchaser_address
|
52
|
+
<<~ADDRESS
|
53
|
+
Ostravska 1
|
54
|
+
747 70 Opava
|
55
|
+
ADDRESS
|
56
|
+
end
|
57
|
+
|
52
58
|
def default_document_item_params
|
53
59
|
{
|
54
60
|
name: 'Web consultation',
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: invoice_printer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.alpha1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josef Strzibny
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -24,88 +24,60 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.1'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: roda
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - '='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 3.5.0
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - '='
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 3.5.0
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: puma
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '3.9'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '3.9'
|
55
27
|
- !ruby/object:Gem::Dependency
|
56
28
|
name: prawn
|
57
29
|
requirement: !ruby/object:Gem::Requirement
|
58
30
|
requirements:
|
59
|
-
- -
|
31
|
+
- - "~>"
|
60
32
|
- !ruby/object:Gem::Version
|
61
33
|
version: 2.1.0
|
62
34
|
type: :runtime
|
63
35
|
prerelease: false
|
64
36
|
version_requirements: !ruby/object:Gem::Requirement
|
65
37
|
requirements:
|
66
|
-
- -
|
38
|
+
- - "~>"
|
67
39
|
- !ruby/object:Gem::Version
|
68
40
|
version: 2.1.0
|
69
41
|
- !ruby/object:Gem::Dependency
|
70
42
|
name: prawn-layout
|
71
43
|
requirement: !ruby/object:Gem::Requirement
|
72
44
|
requirements:
|
73
|
-
- -
|
45
|
+
- - "~>"
|
74
46
|
- !ruby/object:Gem::Version
|
75
47
|
version: 0.8.4
|
76
48
|
type: :runtime
|
77
49
|
prerelease: false
|
78
50
|
version_requirements: !ruby/object:Gem::Requirement
|
79
51
|
requirements:
|
80
|
-
- -
|
52
|
+
- - "~>"
|
81
53
|
- !ruby/object:Gem::Version
|
82
54
|
version: 0.8.4
|
83
55
|
- !ruby/object:Gem::Dependency
|
84
56
|
name: bundler
|
85
57
|
requirement: !ruby/object:Gem::Requirement
|
86
58
|
requirements:
|
87
|
-
- - "
|
59
|
+
- - ">="
|
88
60
|
- !ruby/object:Gem::Version
|
89
61
|
version: '1.7'
|
90
62
|
type: :development
|
91
63
|
prerelease: false
|
92
64
|
version_requirements: !ruby/object:Gem::Requirement
|
93
65
|
requirements:
|
94
|
-
- - "
|
66
|
+
- - ">="
|
95
67
|
- !ruby/object:Gem::Version
|
96
68
|
version: '1.7'
|
97
69
|
- !ruby/object:Gem::Dependency
|
98
70
|
name: rake
|
99
71
|
requirement: !ruby/object:Gem::Requirement
|
100
72
|
requirements:
|
101
|
-
- - "
|
73
|
+
- - ">="
|
102
74
|
- !ruby/object:Gem::Version
|
103
75
|
version: '10.0'
|
104
76
|
type: :development
|
105
77
|
prerelease: false
|
106
78
|
version_requirements: !ruby/object:Gem::Requirement
|
107
79
|
requirements:
|
108
|
-
- - "
|
80
|
+
- - ">="
|
109
81
|
- !ruby/object:Gem::Version
|
110
82
|
version: '10.0'
|
111
83
|
description: Super simple and fast PDF invoicing in pure Ruby (based on Prawn library).
|
@@ -113,7 +85,6 @@ email:
|
|
113
85
|
- strzibny@strzibny.name
|
114
86
|
executables:
|
115
87
|
- invoice_printer
|
116
|
-
- invoice_printer_server
|
117
88
|
extensions: []
|
118
89
|
extra_rdoc_files: []
|
119
90
|
files:
|
@@ -126,7 +97,6 @@ files:
|
|
126
97
|
- assets/logo.png
|
127
98
|
- benchmarks/render.yml
|
128
99
|
- bin/invoice_printer
|
129
|
-
- bin/invoice_printer_server
|
130
100
|
- docs/COMMAND_LINE.md
|
131
101
|
- docs/INSTALLATION.md
|
132
102
|
- docs/LIBRARY.md
|
@@ -142,14 +112,15 @@ files:
|
|
142
112
|
- examples/picture.jpg
|
143
113
|
- examples/prawn.png
|
144
114
|
- examples/promo.rb
|
115
|
+
- examples/provider_purchaser_lines.rb
|
145
116
|
- examples/simple_invoice.rb
|
146
117
|
- examples/stamp.png
|
147
118
|
- invoice_printer.gemspec
|
119
|
+
- invoice_printer_server.gemspec
|
148
120
|
- lib/invoice_printer.rb
|
149
121
|
- lib/invoice_printer/document.rb
|
150
122
|
- lib/invoice_printer/document/item.rb
|
151
123
|
- lib/invoice_printer/pdf_document.rb
|
152
|
-
- lib/invoice_printer/server.rb
|
153
124
|
- lib/invoice_printer/version.rb
|
154
125
|
- test/api_test.rb
|
155
126
|
- test/background_test.rb
|
@@ -180,12 +151,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
180
151
|
version: '0'
|
181
152
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
182
153
|
requirements:
|
183
|
-
- - "
|
154
|
+
- - ">"
|
184
155
|
- !ruby/object:Gem::Version
|
185
|
-
version:
|
156
|
+
version: 1.3.1
|
186
157
|
requirements: []
|
187
|
-
|
188
|
-
rubygems_version: 2.6.14.1
|
158
|
+
rubygems_version: 3.0.3
|
189
159
|
signing_key:
|
190
160
|
specification_version: 4
|
191
161
|
summary: Super simple PDF invoicing in pure Ruby
|
data/bin/invoice_printer_server
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
$LOAD_PATH << File.expand_path('lib')
|
3
|
-
|
4
|
-
require 'optparse'
|
5
|
-
require 'rack/handler/puma'
|
6
|
-
require 'invoice_printer/server'
|
7
|
-
|
8
|
-
def show_version
|
9
|
-
puts "InvoicePrinter v#{InvoicePrinter::VERSION}"
|
10
|
-
|
11
|
-
exit 0
|
12
|
-
end
|
13
|
-
|
14
|
-
def show_help
|
15
|
-
puts <<~HELP
|
16
|
-
Usage: invoice_printer_server [options]
|
17
|
-
|
18
|
-
Options:
|
19
|
-
|
20
|
-
-h, --host hostname to listen on (default is 0.0.0.0)
|
21
|
-
-p, --port port to listen on (default is 9393)
|
22
|
-
-w, --workers number of Puma workers (default is 2)
|
23
|
-
|
24
|
-
HELP
|
25
|
-
|
26
|
-
exit 0
|
27
|
-
end
|
28
|
-
|
29
|
-
options = {}
|
30
|
-
|
31
|
-
parser = OptionParser.new do|opts|
|
32
|
-
opts.on('-h', '--hostname ADDRESS') do |address|
|
33
|
-
options[:Host] = address
|
34
|
-
end
|
35
|
-
|
36
|
-
opts.on('-p', '--port NUMBER') do |number|
|
37
|
-
options[:Port] = number
|
38
|
-
end
|
39
|
-
|
40
|
-
opts.on('-w', '--workers NUMBER') do |number|
|
41
|
-
options[:workers] = number.to_i
|
42
|
-
end
|
43
|
-
|
44
|
-
opts.on('--debug') do
|
45
|
-
options[:debug] = true
|
46
|
-
end
|
47
|
-
|
48
|
-
opts.on('-h', '--help') do
|
49
|
-
show_help
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
parser.parse!
|
54
|
-
|
55
|
-
puma_options = { :Host => '0.0.0.0', :Port => 9393, :workers => 2 }.merge(options)
|
56
|
-
|
57
|
-
begin
|
58
|
-
puts 'Starting InvoicePrinter Server...'
|
59
|
-
Rack::Handler::Puma.run(InvoicePrinter::Server.freeze.app, puma_options)
|
60
|
-
rescue => e
|
61
|
-
STDERR.puts "ERROR: #{e.message}"
|
62
|
-
|
63
|
-
if options[:debug]
|
64
|
-
STDERR.puts
|
65
|
-
STDERR.puts e.backtrace
|
66
|
-
end
|
67
|
-
|
68
|
-
exit 1
|
69
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
require 'base64'
|
2
|
-
require 'roda'
|
3
|
-
require 'invoice_printer'
|
4
|
-
|
5
|
-
class InvoicePrinter::Server < Roda
|
6
|
-
route do |r|
|
7
|
-
response['Content-Type'] = 'application/json'
|
8
|
-
|
9
|
-
# Assign params
|
10
|
-
if r.content_type == 'application/json'
|
11
|
-
begin
|
12
|
-
params = JSON.parse(r.body.read, symbolize_names: true)
|
13
|
-
rescue => e
|
14
|
-
response.status = 400
|
15
|
-
response.write({ result: 'error', error: 'Invalid JSON.' }.to_json)
|
16
|
-
r.halt
|
17
|
-
end
|
18
|
-
|
19
|
-
document = params[:document]
|
20
|
-
labels = params[:labels]
|
21
|
-
font = params[:font]
|
22
|
-
stamp = params[:stamp]
|
23
|
-
logo = params[:logo]
|
24
|
-
background = params[:background]
|
25
|
-
page_size = params[:page_size]
|
26
|
-
else
|
27
|
-
response.status = 400
|
28
|
-
response.write({ result: 'error', error: 'No JSON. Did you set Content-Type to application/json?' }.to_json)
|
29
|
-
r.halt
|
30
|
-
end
|
31
|
-
|
32
|
-
# Initialize InvoicePrinter::Document from given JSON
|
33
|
-
begin
|
34
|
-
document[:items] ||= []
|
35
|
-
items = document[:items].map { |item| InvoicePrinter::Document::Item.new(**item) }
|
36
|
-
document[:items] = items
|
37
|
-
|
38
|
-
document = InvoicePrinter::Document.new(**document)
|
39
|
-
rescue => e
|
40
|
-
response.status = 400
|
41
|
-
response.write({ result: 'error', error: 'Invalid JSON document.' }.to_json)
|
42
|
-
r.halt
|
43
|
-
end
|
44
|
-
|
45
|
-
# POST /print
|
46
|
-
r.post 'print' do
|
47
|
-
filename = params[:filename] || 'document.pdf'
|
48
|
-
|
49
|
-
begin
|
50
|
-
InvoicePrinter.print(
|
51
|
-
document: document,
|
52
|
-
labels: labels,
|
53
|
-
font: font,
|
54
|
-
stamp: stamp,
|
55
|
-
logo: logo,
|
56
|
-
background: background,
|
57
|
-
page_size: page_size,
|
58
|
-
file_name: filename
|
59
|
-
)
|
60
|
-
|
61
|
-
{ result: 'ok', path: filename }.to_json
|
62
|
-
rescue => e
|
63
|
-
response.status = 400
|
64
|
-
response.write({ result: 'error', error: e.message }.to_json)
|
65
|
-
r.halt
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
# POST /render
|
70
|
-
r.post 'render' do
|
71
|
-
begin
|
72
|
-
stream = InvoicePrinter.render(
|
73
|
-
document: document,
|
74
|
-
labels: labels,
|
75
|
-
font: font,
|
76
|
-
stamp: stamp,
|
77
|
-
logo: logo,
|
78
|
-
background: background,
|
79
|
-
page_size: page_size
|
80
|
-
)
|
81
|
-
|
82
|
-
{ result: 'ok', data: Base64.encode64(stream) }.to_json
|
83
|
-
rescue => e
|
84
|
-
response.status = 400
|
85
|
-
response.write({ result: 'error', error: e.message }.to_json)
|
86
|
-
r.halt
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|