invoice_printer 2.3.0 → 2.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2f98cb9145f19c42e95490c56afbb156408c5049c766d9ddcb1c776ee112c5fe
4
- data.tar.gz: 77c6280ab4566b41ad6b040113f3ccf99b0c4bf5e2bccce28c3d0740644a1e57
3
+ metadata.gz: 0b35b038445eb5790a3241093f031314db880f037dbabd1800cff2a5548081ea
4
+ data.tar.gz: bd668a85987b9c72793724ce3a6d13d37478f7a747ae0d1e75f1b8a013809b6c
5
5
  SHA512:
6
- metadata.gz: c1be305d2988483f0912598cbcd523b3f8f020667f61cb253e7b5c3f455ed188efebcec20fe4d1f77148ce984c9866c723c3e645a9e4515b50a67aceb85d45a5
7
- data.tar.gz: f4764ce73b9c8f696cdd8bfa975ab1f3cbd8d85bb62a3b335a321eb7fb860b08a03835cc875c3dd774b670af3baeffc48f590e53d0c763ccece20e9e22b74657
6
+ metadata.gz: 1e16688d404cc7097f773babe821c62ddf6d06b87e23a80b1454e87bc6299549521b2e3a9bed556d8e35370a1c78843f6eca192618d4dd66da9e143b17ab60b4
7
+ data.tar.gz: 81f49267c2b967d6b3ac9596d06e330e112bbfb5b8ac51fa200f958e41c1a3a9fe6ad7624df08e069d2f697d625acf3484ca461a7523e32361122e06d23b3a85
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: CI
3
+
4
+ on:
5
+ - pull_request
6
+ - push
7
+
8
+ env:
9
+ TESTOPT: "-v"
10
+
11
+ concurrency:
12
+ group: ${{ github.ref_name }}
13
+ cancel-in-progress: true
14
+
15
+ jobs:
16
+ test:
17
+ name: Ruby
18
+ runs-on: ubuntu-latest
19
+ strategy:
20
+ fail-fast: false
21
+ matrix:
22
+ ruby:
23
+ - "3.1"
24
+ - "3.2"
25
+ # - "ruby-head"
26
+ steps:
27
+ - name: Install system dependencies
28
+ run: sudo apt-get install imagemagick libmagickwand-dev
29
+ - name: Check out code
30
+ uses: actions/checkout@v4
31
+ - name: Install Ruby dependencies
32
+ uses: ruby/setup-ruby@v1
33
+ with:
34
+ ruby-version: ${{ matrix.ruby }}
35
+ bundler-cache: true
36
+ - name: Run tests
37
+ run: bundle exec rake test
data/Dockerfile CHANGED
@@ -26,10 +26,10 @@ RUN apk update && apk upgrade
26
26
  RUN apk add build-base bash ruby ruby-etc ruby-dev
27
27
 
28
28
  # Install builtin fonts
29
- RUN gem install invoice_printer_fonts --version 2.3.0 --no-document
29
+ RUN gem install invoice_printer_fonts --version 2.4.0 --no-document
30
30
 
31
31
  # Install the gem from RubyGems.org
32
- RUN gem install invoice_printer_server --version 2.3.0 --no-document
32
+ RUN gem install invoice_printer_server --version 2.4.0 --no-document
33
33
 
34
34
  # Clean APK cache
35
35
  RUN rm -rf /var/cache/apk/*
data/README.md CHANGED
@@ -26,6 +26,7 @@ See more usecases in the `examples/` directory.
26
26
  - Payment method box showing banking details including SWIFT and IBAN fields
27
27
  - Issue/due dates box
28
28
  - Configurable items' table with item description, breakdown, quantity, unit, price per unit, tax and item's total amount fields
29
+ - Description above the table
29
30
  - Final subtotal/tax/total info box
30
31
  - Page numbers
31
32
  - Configurable field labels & sublabels (optional little labels)
@@ -50,8 +51,22 @@ See more usecases in the `examples/` directory.
50
51
 
51
52
  I am developing InvoicePrinter as a free and MIT-licensed library for several years now.
52
53
 
53
- I would appreciate if you consider [buying my book](https://deploymentfromscratch.com/).
54
+ Please consider [buying my book](https://deploymentfromscratch.com/) or [my Rails starter kit](https://businessclasskit.com/) so I can work more on Open Source.
55
+
56
+ ## Contributing
57
+
58
+ Contributions are welcome. Make sure the tests are passing before submitting a PR:
59
+
60
+ ```bash
61
+ $ bundle && bundle exec rake test
62
+ ```
63
+
64
+ You can also quickly regenerate the examples if necessary:
65
+
66
+ ```bash
67
+ $ ruby regenerate.rb
68
+ ```
54
69
 
55
70
  ## Copyright
56
71
 
57
- Copyright 2015-2021 © [Josef Strzibny](http://strzibny.name/). MIT licensed.
72
+ Copyright 2015-2024 © [Josef Strzibny](http://strzibny.name/). MIT licensed.
@@ -33,8 +33,8 @@ Gem::Specification.new do |spec|
33
33
  package_files = `git ls-files -z`.split("\x0")
34
34
  .reject{ |file| ONLY_SERVER_FILES.include?(file) }
35
35
  .reject{ |file| ONLY_FONTS_FILES.include?(file) }
36
- .reject{ |file| file.match /.*\.png/ }
37
- .reject{ |file| file.match /.*\.pdf/ }
36
+ .reject{ |file| file.match(/.*\.png/) }
37
+ .reject{ |file| file.match(/.*\.pdf/) }
38
38
 
39
39
  spec.files = package_files
40
40
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
@@ -42,7 +42,7 @@ Gem::Specification.new do |spec|
42
42
  spec.require_paths = ['lib']
43
43
  spec.bindir = 'bin'
44
44
 
45
- spec.required_ruby_version = '>= 2.4'
45
+ spec.required_ruby_version = '>= 3.1'
46
46
 
47
47
  spec.add_dependency 'json', '~> 2.1'
48
48
  spec.add_dependency 'prawn', '~> 2.4'
@@ -297,8 +297,10 @@ module InvoicePrinter
297
297
  # ------------------------------------------
298
298
  #
299
299
  def build_purchaser_box
300
+ purchaser = [@document.purchaser_name, @document.purchaser_lines].join("\n")
301
+
300
302
  @pdf.text_box(
301
- @document.purchaser_name,
303
+ purchaser.lines.first,
302
304
  size: 15,
303
305
  at: [x(284), y(640) - @push_down],
304
306
  width: x(240)
@@ -320,9 +322,9 @@ module InvoicePrinter
320
322
  )
321
323
  end
322
324
  # Render purchaser_lines if present
323
- if !@document.purchaser_lines.empty?
325
+ if purchaser.lines.size > 1
324
326
  @pdf.text_box(
325
- @document.purchaser_lines,
327
+ purchaser.lines(chomp: true)[1..].join("\n"),
326
328
  size: 10,
327
329
  at: [x(284), y(618) - @push_down],
328
330
  width: x(246),
@@ -655,7 +657,7 @@ module InvoicePrinter
655
657
  end
656
658
  end
657
659
 
658
- def description_height
660
+ def description_height
659
661
  @description_height ||= begin
660
662
  num_of_lines = @document.description.lines.count
661
663
  (num_of_lines * 13)
@@ -692,7 +694,6 @@ module InvoicePrinter
692
694
 
693
695
  options = {
694
696
  header: true,
695
- row_colors: [nil, 'ededed'],
696
697
  width: x(540, 2),
697
698
  cell_style: {
698
699
  borders: []
@@ -731,10 +732,13 @@ module InvoicePrinter
731
732
 
732
733
  # Include only items params with provided data
733
734
  def build_items_data(items_params)
734
- @document.items.map do |item|
735
+ colspan = items_params.select { |k, v| v }.count
736
+ color_background = false
737
+
738
+ items = []
739
+ @document.items.each do |item|
735
740
  line = []
736
- line << { content: name_cell(item), borders: [:bottom] } if items_params[:names]
737
- #line << { content: item.name, borders: [:bottom], align: :left } if items_params[:names]
741
+ line << { content: item.name, align: :left } if items_params[:names]
738
742
  line << { content: item.variable, align: :right } if items_params[:variables]
739
743
  line << { content: item.quantity, align: :right } if items_params[:quantities]
740
744
  line << { content: item.unit, align: :right } if items_params[:units]
@@ -743,29 +747,19 @@ module InvoicePrinter
743
747
  line << { content: item.tax2, align: :right } if items_params[:taxes2]
744
748
  line << { content: item.tax3, align: :right } if items_params[:taxes3]
745
749
  line << { content: item.amount, align: :right } if items_params[:amounts]
746
- line
747
- end
748
- end
749
750
 
750
- # Display item's name and breakdown if present
751
- def name_cell(item)
752
- data = if used?(item.breakdown)
753
- data = [
754
- [{ content: item.name, padding: [5, 0, 0, 5] }],
755
- [{ content: item.breakdown, size: 8, padding: [2, 0, 5, 5] }]
756
- ]
751
+ line.each {|c| c[:background_color] = 'ededed'} if color_background
757
752
 
758
- options = {
759
- cell_style: {
760
- borders: []
761
- },
762
- position: :left
763
- }
753
+ items << line
764
754
 
765
- @pdf.make_table(data, options)
766
- else
767
- item.name
755
+ if used?(item.breakdown)
756
+ items << [{ content: item.breakdown, align: :left, size: 8, colspan: colspan, padding: [0, 0, 5, 5] }]
757
+ items.last.first[:background_color] = 'ededed' if color_background
758
+ end
759
+
760
+ color_background = !color_background
768
761
  end
762
+ items
769
763
  end
770
764
 
771
765
  # Include only relevant headers
@@ -1,3 +1,3 @@
1
1
  module InvoicePrinter
2
- VERSION = '2.3.0'
2
+ VERSION = '2.4.0'
3
3
  end
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: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josef Strzibny
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-11 00:00:00.000000000 Z
11
+ date: 2024-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -116,10 +116,10 @@ executables:
116
116
  extensions: []
117
117
  extra_rdoc_files: []
118
118
  files:
119
+ - ".github/workflows/ci.yml"
119
120
  - ".gitignore"
120
121
  - Dockerfile
121
122
  - Gemfile
122
- - Gemfile.lock
123
123
  - LICENSE.txt
124
124
  - README.md
125
125
  - Rakefile
@@ -179,14 +179,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
179
179
  requirements:
180
180
  - - ">="
181
181
  - !ruby/object:Gem::Version
182
- version: '2.4'
182
+ version: '3.1'
183
183
  required_rubygems_version: !ruby/object:Gem::Requirement
184
184
  requirements:
185
185
  - - ">="
186
186
  - !ruby/object:Gem::Version
187
187
  version: '0'
188
188
  requirements: []
189
- rubygems_version: 3.3.3
189
+ rubygems_version: 3.4.10
190
190
  signing_key:
191
191
  specification_version: 4
192
192
  summary: Super simple PDF invoicing in pure Ruby
data/Gemfile.lock DELETED
@@ -1,77 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- invoice_printer (2.2.0)
5
- e2mmap
6
- json (~> 2.1)
7
- matrix
8
- prawn (~> 2.4)
9
- prawn-table (~> 0.2.2)
10
- invoice_printer_server (2.2.0)
11
- invoice_printer (= 2.2.0)
12
- json (~> 2.1)
13
- puma (>= 3.9.0)
14
- roda (~> 3.5)
15
-
16
- GEM
17
- remote: https://rubygems.org/
18
- specs:
19
- Ascii85 (1.1.0)
20
- afm (0.2.2)
21
- benchmark_driver (0.15.17)
22
- benchmark_driver-output-gruff (0.3.1)
23
- benchmark_driver (>= 0.12.0)
24
- gruff
25
- e2mmap (0.1.0)
26
- gruff (0.14.0)
27
- histogram
28
- rmagick
29
- hashery (2.1.2)
30
- histogram (0.2.4.1)
31
- json (2.6.3)
32
- matrix (0.1.0)
33
- minitest (5.15.0)
34
- nio4r (2.5.8)
35
- pdf-core (0.9.0)
36
- pdf-inspector (1.3.0)
37
- pdf-reader (>= 1.0, < 3.0.a)
38
- pdf-reader (2.11.0)
39
- Ascii85 (~> 1.0)
40
- afm (~> 0.2.1)
41
- hashery (~> 2.0)
42
- ruby-rc4
43
- ttfunk
44
- pkg-config (1.5.1)
45
- prawn (2.4.0)
46
- pdf-core (~> 0.9.0)
47
- ttfunk (~> 1.7)
48
- prawn-table (0.2.2)
49
- prawn (>= 1.3.0, < 3.0.0)
50
- puma (6.0.2)
51
- nio4r (~> 2.0)
52
- rack (3.0.4.1)
53
- rack-test (2.0.2)
54
- rack (>= 1.3)
55
- rake (13.0.6)
56
- rmagick (5.1.0)
57
- pkg-config (~> 1.4)
58
- roda (3.64.0)
59
- rack
60
- ruby-rc4 (0.1.5)
61
- ttfunk (1.7.0)
62
-
63
- PLATFORMS
64
- x86_64-linux
65
-
66
- DEPENDENCIES
67
- benchmark_driver (= 0.15.17)
68
- benchmark_driver-output-gruff
69
- bundler (>= 1.7)
70
- invoice_printer_server!
71
- minitest
72
- pdf-inspector
73
- rack-test
74
- rake (>= 10.0)
75
-
76
- BUNDLED WITH
77
- 2.4.3