invoice_printer 1.3.0 → 2.0.0.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|