prawn-swiss_qr_bill 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +5 -0
  3. data/README.md +124 -0
  4. data/config/locales/de.yml +15 -0
  5. data/config/locales/en.yml +15 -0
  6. data/config/locales/fr.yml +15 -0
  7. data/config/locales/it.yml +15 -0
  8. data/lib/prawn/swiss_qr_bill/bill.rb +20 -0
  9. data/lib/prawn/swiss_qr_bill/corner_box.rb +79 -0
  10. data/lib/prawn/swiss_qr_bill/cutting_lines.rb +74 -0
  11. data/lib/prawn/swiss_qr_bill/debug_section.rb +140 -0
  12. data/lib/prawn/swiss_qr_bill/extension.rb +18 -0
  13. data/lib/prawn/swiss_qr_bill/helpers/box_helper.rb +14 -0
  14. data/lib/prawn/swiss_qr_bill/helpers/number_helper.rb +16 -0
  15. data/lib/prawn/swiss_qr_bill/iban.rb +84 -0
  16. data/lib/prawn/swiss_qr_bill/images/scissor.png +0 -0
  17. data/lib/prawn/swiss_qr_bill/images/swiss_cross.png +0 -0
  18. data/lib/prawn/swiss_qr_bill/padded_box.rb +52 -0
  19. data/lib/prawn/swiss_qr_bill/qr/data.rb +105 -0
  20. data/lib/prawn/swiss_qr_bill/sections/payment_amount.rb +88 -0
  21. data/lib/prawn/swiss_qr_bill/sections/payment_further_information.rb +14 -0
  22. data/lib/prawn/swiss_qr_bill/sections/payment_information.rb +59 -0
  23. data/lib/prawn/swiss_qr_bill/sections/payment_title.rb +18 -0
  24. data/lib/prawn/swiss_qr_bill/sections/qr_code.rb +102 -0
  25. data/lib/prawn/swiss_qr_bill/sections/receipt_acceptance.rb +18 -0
  26. data/lib/prawn/swiss_qr_bill/sections/receipt_amount.rb +86 -0
  27. data/lib/prawn/swiss_qr_bill/sections/receipt_information.rb +51 -0
  28. data/lib/prawn/swiss_qr_bill/sections/receipt_title.rb +18 -0
  29. data/lib/prawn/swiss_qr_bill/sections/section.rb +88 -0
  30. data/lib/prawn/swiss_qr_bill/sections.rb +29 -0
  31. data/lib/prawn/swiss_qr_bill/specifications.rb +78 -0
  32. data/lib/prawn/swiss_qr_bill/specs.yml +106 -0
  33. data/lib/prawn/swiss_qr_bill/version.rb +7 -0
  34. data/lib/prawn/swiss_qr_bill.rb +43 -0
  35. data/prawn-swiss_qr_bill.gemspec +40 -0
  36. metadata +218 -0
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Prawn
4
+ module SwissQRBill
5
+ module Sections
6
+ # Section main class which can draw itself at the right position.
7
+ #
8
+ # Subclasses shall implement the draw method with the box block:
9
+ #
10
+ # def draw
11
+ # box do
12
+ # doc.text 'example'
13
+ # draw_something
14
+ # end
15
+ # end
16
+ class Section
17
+ attr_reader :doc
18
+
19
+ # specifications for subclass' section, @see Specification for details
20
+ attr_accessor :specs
21
+
22
+ def initialize(document, data)
23
+ unless self.class.const_defined?(:KEY)
24
+ raise NotImplementedError, "constant KEY not defined in class #{self.class}"
25
+ end
26
+
27
+ @doc = document
28
+ @data = data
29
+
30
+ load_specs
31
+ end
32
+
33
+ def draw
34
+ raise NotImplementedError, 'Subcluss must implement draw method.'
35
+ end
36
+
37
+ private
38
+
39
+ def box(&block)
40
+ doc.bounding_box(specs.point, width: specs.width, height: specs.height, &block)
41
+ end
42
+
43
+ def label(text, options = {})
44
+ options = options.merge(
45
+ size: specs.label_font_size,
46
+ leading: specs.label_font_leading,
47
+ style: specs.label_font_style.to_sym
48
+ )
49
+
50
+ doc.text text, options
51
+ end
52
+
53
+ def content(text, options = {})
54
+ options = options.merge(
55
+ size: specs.content_font_size,
56
+ leading: specs.content_font_leading,
57
+ style: specs.content_font_style.to_sym
58
+ )
59
+
60
+ doc.text text, options
61
+ end
62
+
63
+ def line_spacing
64
+ doc.move_down specs.content_font_size + 1
65
+ end
66
+
67
+ def build_address(address)
68
+ [
69
+ address[:name],
70
+ address[:line1],
71
+ address[:line2],
72
+ [address[:postal_code], address[:city]].compact.join(' ')
73
+ ].compact.join("\n")
74
+ end
75
+
76
+ def load_specs
77
+ spec_factory = Prawn::SwissQRBill::Specifications.new
78
+
79
+ self.specs = spec_factory.get_specs(self.class::KEY)
80
+ end
81
+
82
+ def i18n_scope
83
+ 'swiss_qr_bill'
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Prawn
4
+ module SwissQRBill
5
+ # Sections module manages all different sections.
6
+ module Sections
7
+ # All relevant classes to draw the full bill,
8
+ # ordered by drawing order.
9
+ SECTION_CLASSES = [
10
+ ReceiptTitle,
11
+ ReceiptInformation,
12
+ ReceiptAmount,
13
+ ReceiptAcceptance,
14
+ PaymentTitle,
15
+ PaymentInformation,
16
+ PaymentAmount,
17
+ PaymentFurtherInformation,
18
+ QRCode
19
+ ].freeze
20
+
21
+ # Draw all sections in the right order.
22
+ def self.draw_all(document, data)
23
+ SECTION_CLASSES.each do |klass|
24
+ klass.new(document, data).draw
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Prawn
4
+ module SwissQRBill
5
+ class SpecificationError < StandardError; end
6
+
7
+ # Access common style specifications according to the style guide.
8
+ #
9
+ # Reference:
10
+ # https://www.paymentstandards.ch/dam/downloads/style-guide-en.pdf
11
+ class Specifications
12
+ Spec = Struct.new(:default, :format)
13
+
14
+ SPECS_FILE = 'specs.yml'
15
+
16
+ DEFAULTS = {
17
+ point: Spec.new(nil, ->(v) { from_mm(v) }),
18
+ width: Spec.new(nil, ->(v) { from_mm(v) }),
19
+ height: Spec.new(nil, ->(v) { from_mm(v) }),
20
+ content_font_size: Spec.new,
21
+ content_font_leading: Spec.new(0),
22
+ content_font_style: Spec.new(:normal, ->(v) { v.to_sym }),
23
+ label_font_size: Spec.new,
24
+ label_font_leading: Spec.new(0),
25
+ label_font_style: Spec.new(:bold, ->(v) { v.to_sym })
26
+ }.freeze
27
+
28
+ def initialize
29
+ @specs = load_specs
30
+ end
31
+
32
+ def get(spec_key)
33
+ @specs.dig(*key_path(spec_key)) || {}
34
+ end
35
+
36
+ def get_specs(spec_key)
37
+ # get hash from yaml by path
38
+ spec_values = get(spec_key)
39
+
40
+ values = {}
41
+ DEFAULTS.each_key do |key|
42
+ # set defaults
43
+ values[key] = DEFAULTS[key].default
44
+ # overwrite if set
45
+ values[key] = spec_values[key.to_s] if spec_values.key?(key.to_s)
46
+ # format
47
+ values[key] = DEFAULTS[key][:format].call(values[key]) if DEFAULTS[key][:format].is_a?(Proc)
48
+ end
49
+
50
+ spec_values = values.values_at(*DEFAULTS.keys)
51
+
52
+ Struct.new(*DEFAULTS.keys).new(*spec_values)
53
+ end
54
+
55
+ # Transform a value or an array of values from mm to pt
56
+ def self.from_mm(value)
57
+ case value
58
+ when Numeric
59
+ value.mm
60
+ when Array
61
+ value.map(&:mm)
62
+ else
63
+ value
64
+ end
65
+ end
66
+
67
+ private
68
+
69
+ def load_specs
70
+ @specs = YAML.load_file(File.expand_path(SPECS_FILE, File.dirname(__FILE__)))
71
+ end
72
+
73
+ def key_path(key)
74
+ key.split('.')
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,106 @@
1
+ # Style specifications according to the style guide:
2
+ # https://www.paymentstandards.ch/dam/downloads/style-guide-en.pdf
3
+ #
4
+ # * All measurements in mm
5
+ # * Origin reference point is bottom left
6
+ width: 210
7
+ height: 105
8
+ receipt:
9
+ # x: always 0, or 5
10
+ # y: 105 (height)
11
+ point: [0, 105]
12
+ width: 62
13
+ height: 105
14
+ name: Receipt
15
+ title:
16
+ name: Title section
17
+ # y: 105 - 5
18
+ point: [5, 100]
19
+ width: 52
20
+ height: 7
21
+ content_font_size: 11
22
+ content_font_style: bold
23
+ information:
24
+ name: Information section
25
+ # y: 105 - 5 - 7
26
+ point: [5, 93]
27
+ width: 52
28
+ height: 56
29
+ content_font_size: 8
30
+ content_font_leading: 1
31
+ label_font_size: 6
32
+ label_font_style: bold
33
+ amount:
34
+ name: Amount section
35
+ # y: 105 - 5 - 7 - 56
36
+ point: [5, 37]
37
+ width: 52
38
+ height: 14
39
+ label_font_size: 6
40
+ # label_font_leading: 2
41
+ content_font_size: 8
42
+ acceptance:
43
+ name: Acceptance point section
44
+ # y: 105 - 5 - 7 - 56 - 14
45
+ point: [5, 23]
46
+ width: 52
47
+ height: 18
48
+ label_font_size: 6
49
+ payment:
50
+ # x: 62
51
+ # y: 105 (height)
52
+ point: [62, 105]
53
+ width: 148
54
+ height: 105
55
+ name: Payment
56
+ title:
57
+ name: Title section
58
+ # x: 62 + 5
59
+ # y: 105 - 5
60
+ point: [67, 100]
61
+ width: 51
62
+ height: 7
63
+ content_font_size: 11
64
+ content_font_style: bold
65
+ information:
66
+ name: Information section
67
+ # x: 62 + 5 + 51
68
+ # y: 105 - 5
69
+ point: [118, 100]
70
+ width: 87
71
+ height: 85
72
+ content_font_size: 10
73
+ content_font_leading: 1
74
+ label_font_size: 8
75
+ label_font_weight: bold
76
+ qr_code:
77
+ name: Swiss QR code section
78
+ # x: 62 + 5
79
+ # y: 105 - 5 - 7 - 5
80
+ point: [67, 88]
81
+ width: 46
82
+ height: 46
83
+ qr_cross:
84
+ # Swiss Cross on QR code
85
+ # x: 62 + 5 + ((46 - 7) / 2)
86
+ # y: 105 - 5 - 7 - 5 - ((46 - 7) / 2)
87
+ point: [86.5, 68.5]
88
+ width: 7
89
+ height: 7
90
+ amount:
91
+ name: Amount section
92
+ # x: 62 + 5
93
+ # y: 105 - 5 - 7 - 56
94
+ point: [67, 37]
95
+ width: 51
96
+ height: 22
97
+ label_font_size: 8
98
+ content_font_size: 10
99
+ content_font_leading: 3
100
+ further_information:
101
+ name: Further information section
102
+ # x: 62 + 5
103
+ # y: 105 - 5 - 7 - 56 - 22
104
+ point: [67, 15]
105
+ width: 138
106
+ height: 10
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Prawn
4
+ module SwissQRBill
5
+ VERSION = '0.4.1'
6
+ end
7
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'i18n'
4
+ I18n.load_path << Dir[File.join(File.expand_path("#{File.dirname(__FILE__)}/../../config/locales"), '*.yml')]
5
+ I18n.load_path.flatten!
6
+
7
+ require 'yaml'
8
+ require 'rqrcode'
9
+
10
+ require 'prawn'
11
+ require 'prawn/measurement_extensions'
12
+
13
+ require 'prawn/swiss_qr_bill/version'
14
+
15
+ require 'prawn/swiss_qr_bill/helpers/number_helper'
16
+ require 'prawn/swiss_qr_bill/helpers/box_helper'
17
+
18
+ require 'prawn/swiss_qr_bill/qr/data'
19
+ require 'prawn/swiss_qr_bill/iban'
20
+ require 'prawn/swiss_qr_bill/padded_box'
21
+ require 'prawn/swiss_qr_bill/corner_box'
22
+ require 'prawn/swiss_qr_bill/cutting_lines'
23
+ require 'prawn/swiss_qr_bill/sections/section'
24
+ require 'prawn/swiss_qr_bill/sections/receipt_title'
25
+ require 'prawn/swiss_qr_bill/sections/receipt_information'
26
+ require 'prawn/swiss_qr_bill/sections/receipt_amount'
27
+ require 'prawn/swiss_qr_bill/sections/receipt_acceptance'
28
+ require 'prawn/swiss_qr_bill/sections/payment_title'
29
+ require 'prawn/swiss_qr_bill/sections/payment_information'
30
+ require 'prawn/swiss_qr_bill/sections/payment_amount'
31
+ require 'prawn/swiss_qr_bill/sections/payment_further_information'
32
+ require 'prawn/swiss_qr_bill/sections/qr_code'
33
+ require 'prawn/swiss_qr_bill/sections'
34
+ require 'prawn/swiss_qr_bill/debug_section'
35
+ require 'prawn/swiss_qr_bill/specifications'
36
+ require 'prawn/swiss_qr_bill/extension'
37
+ require 'prawn/swiss_qr_bill/bill'
38
+
39
+ # PrawnPDF: https://github.com/prawnpdf/prawn
40
+ module Prawn
41
+ end
42
+
43
+ Prawn::Document.extensions << Prawn::SwissQRBill::Extension
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('lib/prawn/swiss_qr_bill/version', __dir__)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'prawn-swiss_qr_bill'
7
+ spec.version = Prawn::SwissQRBill::VERSION
8
+ spec.platform = Gem::Platform::RUBY
9
+ spec.required_ruby_version = '>= 2.5.0'
10
+ spec.summary = 'Swiss QR-Bill PDFs in Ruby with Prawn'
11
+ spec.description = 'Ruby library for creating Swiss QR-Bills as PDF with Prawn'
12
+ spec.homepage = 'https://github.com/mitosch/prawn-swiss_qr_bill'
13
+ spec.license = 'MIT'
14
+ spec.authors = ['Mischa Schindowski']
15
+ spec.email = ['mschindowski@gmail.com']
16
+
17
+ spec.files = Dir['lib/**/**/*.rb',
18
+ 'lib/prawn/swiss_qr_bill/specs.yml',
19
+ 'lib/prawn/swiss_qr_bill/images/*.png',
20
+ 'config/locales/*.yml',
21
+ 'prawn-swiss_qr_bill.gemspec',
22
+ 'Gemfile', 'README.md', 'CHANGELOG.mg'
23
+ ]
24
+
25
+ spec.add_dependency 'i18n', '~> 1.8'
26
+ spec.add_dependency 'prawn', '~> 2.0'
27
+ spec.add_dependency 'rqrcode', '~> 2.0'
28
+
29
+ spec.add_development_dependency 'pdf-reader', '~> 2.3'
30
+ spec.add_development_dependency 'rspec', '~> 3.0'
31
+ spec.add_development_dependency 'rubocop', '~> 1.0'
32
+ spec.add_development_dependency 'rubocop-performance', '~> 1.5'
33
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.8'
34
+ spec.add_development_dependency 'simplecov', '~> 0.16'
35
+ spec.add_development_dependency 'simplecov-cobertura', '~> 2.0'
36
+
37
+ spec.metadata = {
38
+ 'rubygems_mfa_required' => 'true'
39
+ }
40
+ end
metadata ADDED
@@ -0,0 +1,218 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: prawn-swiss_qr_bill
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.1
5
+ platform: ruby
6
+ authors:
7
+ - Mischa Schindowski
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-02-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: i18n
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.8'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: prawn
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rqrcode
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pdf-reader
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.3'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-performance
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.5'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.5'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '2.8'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '2.8'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.16'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.16'
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov-cobertura
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '2.0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '2.0'
153
+ description: Ruby library for creating Swiss QR-Bills as PDF with Prawn
154
+ email:
155
+ - mschindowski@gmail.com
156
+ executables: []
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - Gemfile
161
+ - README.md
162
+ - config/locales/de.yml
163
+ - config/locales/en.yml
164
+ - config/locales/fr.yml
165
+ - config/locales/it.yml
166
+ - lib/prawn/swiss_qr_bill.rb
167
+ - lib/prawn/swiss_qr_bill/bill.rb
168
+ - lib/prawn/swiss_qr_bill/corner_box.rb
169
+ - lib/prawn/swiss_qr_bill/cutting_lines.rb
170
+ - lib/prawn/swiss_qr_bill/debug_section.rb
171
+ - lib/prawn/swiss_qr_bill/extension.rb
172
+ - lib/prawn/swiss_qr_bill/helpers/box_helper.rb
173
+ - lib/prawn/swiss_qr_bill/helpers/number_helper.rb
174
+ - lib/prawn/swiss_qr_bill/iban.rb
175
+ - lib/prawn/swiss_qr_bill/images/scissor.png
176
+ - lib/prawn/swiss_qr_bill/images/swiss_cross.png
177
+ - lib/prawn/swiss_qr_bill/padded_box.rb
178
+ - lib/prawn/swiss_qr_bill/qr/data.rb
179
+ - lib/prawn/swiss_qr_bill/sections.rb
180
+ - lib/prawn/swiss_qr_bill/sections/payment_amount.rb
181
+ - lib/prawn/swiss_qr_bill/sections/payment_further_information.rb
182
+ - lib/prawn/swiss_qr_bill/sections/payment_information.rb
183
+ - lib/prawn/swiss_qr_bill/sections/payment_title.rb
184
+ - lib/prawn/swiss_qr_bill/sections/qr_code.rb
185
+ - lib/prawn/swiss_qr_bill/sections/receipt_acceptance.rb
186
+ - lib/prawn/swiss_qr_bill/sections/receipt_amount.rb
187
+ - lib/prawn/swiss_qr_bill/sections/receipt_information.rb
188
+ - lib/prawn/swiss_qr_bill/sections/receipt_title.rb
189
+ - lib/prawn/swiss_qr_bill/sections/section.rb
190
+ - lib/prawn/swiss_qr_bill/specifications.rb
191
+ - lib/prawn/swiss_qr_bill/specs.yml
192
+ - lib/prawn/swiss_qr_bill/version.rb
193
+ - prawn-swiss_qr_bill.gemspec
194
+ homepage: https://github.com/mitosch/prawn-swiss_qr_bill
195
+ licenses:
196
+ - MIT
197
+ metadata:
198
+ rubygems_mfa_required: 'true'
199
+ post_install_message:
200
+ rdoc_options: []
201
+ require_paths:
202
+ - lib
203
+ required_ruby_version: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: 2.5.0
208
+ required_rubygems_version: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: '0'
213
+ requirements: []
214
+ rubygems_version: 3.0.3.1
215
+ signing_key:
216
+ specification_version: 4
217
+ summary: Swiss QR-Bill PDFs in Ruby with Prawn
218
+ test_files: []