usps_intelligent_barcode 1.0.0 → 1.1.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.
Files changed (47) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +6 -0
  3. data/.ruby-version +1 -0
  4. data/{CHANGELOG.markdown → CHANGELOG.md} +27 -12
  5. data/Gemfile +2 -16
  6. data/Gemfile.lock +74 -85
  7. data/LICENSE.md +7 -0
  8. data/{README.markdown → README.md} +56 -36
  9. data/VERSION +1 -1
  10. data/doc/font_installation.md +55 -0
  11. data/doc/migration.md +47 -0
  12. data/doc/publishing.md +75 -0
  13. data/examples/example.rb +4 -4
  14. data/examples/generate_pdf.rb +70 -0
  15. data/fonts/LICENSE +47 -0
  16. data/fonts/USPSIMBCompact.ttf +0 -0
  17. data/fonts/USPSIMBStandard.ttf +0 -0
  18. data/lib/usps_intelligent_barcode/barcode.rb +33 -30
  19. data/lib/usps_intelligent_barcode/barcode_id.rb +5 -0
  20. data/lib/usps_intelligent_barcode/mailer_id.rb +6 -1
  21. data/lib/usps_intelligent_barcode/project_dirs.rb +19 -0
  22. data/lib/usps_intelligent_barcode/routing_code.rb +20 -10
  23. data/lib/usps_intelligent_barcode/serial_number.rb +6 -1
  24. data/lib/usps_intelligent_barcode/service_type.rb +6 -1
  25. data/lib/usps_intelligent_barcode/usps_fonts.rb +48 -0
  26. data/lib/usps_intelligent_barcode.rb +2 -0
  27. data/rake/bundler.rb +1 -0
  28. data/rake/version.rb +33 -0
  29. data/rake/yard.rb +1 -0
  30. data/usps_intelligent_barcode.gemspec +24 -97
  31. metadata +67 -46
  32. data/USPS-intelligent-barcode.gemspec +0 -95
  33. data/rake/jeweler.rb +0 -23
  34. data/spec/bar_map_spec.rb +0 -30
  35. data/spec/bar_position_spec.rb +0 -40
  36. data/spec/bar_symbol_spec.rb +0 -39
  37. data/spec/barcode_id_spec.rb +0 -106
  38. data/spec/barcode_spec.rb +0 -213
  39. data/spec/character_position_spec.rb +0 -25
  40. data/spec/codeword_map_spec.rb +0 -22
  41. data/spec/crc_spec.rb +0 -21
  42. data/spec/mailer_id_spec.rb +0 -124
  43. data/spec/numeric_conversions_spec.rb +0 -23
  44. data/spec/routing_code_spec.rb +0 -180
  45. data/spec/serial_number_spec.rb +0 -117
  46. data/spec/service_type_spec.rb +0 -93
  47. data/spec/spec_helper.rb +0 -9
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib_dir = File.expand_path('../lib', __dir__)
4
+ $LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
5
+ require 'usps_intelligent_barcode'
6
+
7
+ begin
8
+ require 'prawn'
9
+ rescue LoadError
10
+ puts "This example requires the 'prawn' gem."
11
+ puts "Install it with: gem install prawn"
12
+ exit 1
13
+ end
14
+
15
+ # Generate a PDF using a USPS Intelligent Mail Barcode font
16
+ #
17
+ # Uses bundled USPS IMB fonts - no installation required.
18
+
19
+ class BarcodeToPDFFont
20
+ OUTPUT_FILENAME = 'barcode_font.pdf'
21
+ FONT_NAME = 'USPSIMBStandard'
22
+ FONT_FILE = Imb::UspsFonts.standard_font_path
23
+ FONT_SIZE = Imb::UspsFonts.font_size
24
+
25
+ def initialize(barcode)
26
+ @barcode = barcode
27
+ @letters = barcode.barcode_letters
28
+ end
29
+
30
+ def generate(path)
31
+ Prawn::Document.generate(path, page_size: 'LETTER') do |pdf|
32
+ pdf.text "USPS Intelligent Mail Barcode (Font-Based)", size: 16, style: :bold
33
+ pdf.move_down 10
34
+ pdf.text "Barcode ID: #{@barcode.barcode_id.to_s}"
35
+ pdf.text "Service Type: #{@barcode.service_type.to_s}"
36
+ pdf.text "Mailer ID: #{@barcode.mailer_id.to_s}"
37
+ pdf.text "Serial Number: #{@barcode.serial_number.to_s}"
38
+ pdf.text "Routing Code: #{@barcode.routing_code.to_s}"
39
+ pdf.text "\n"
40
+ pdf.text "Barcode string: #{@letters}", size: 8
41
+ pdf.text "\n"
42
+ pdf.text "Barcode string printed with font #{FONT_NAME} #{FONT_SIZE}"
43
+ render_barcode(pdf)
44
+ pdf.move_down 10
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def render_barcode(pdf)
51
+ pdf.font_families.update(FONT_NAME => { normal: FONT_FILE })
52
+ pdf.font(FONT_NAME) do
53
+ pdf.text @letters, size: FONT_SIZE
54
+ end
55
+ end
56
+ end
57
+
58
+ # Example usage
59
+ barcode = Imb::Barcode.new(
60
+ '01', # barcode_id
61
+ '234', # service_type
62
+ '567094', # mailer_id
63
+ '987654321', # serial_number
64
+ '01234567891' # routing_code
65
+ )
66
+
67
+ pdf_generator = BarcodeToPDFFont.new(barcode)
68
+ path = "/tmp/barcode_to_pdf.pdf"
69
+ pdf_generator.generate(path)
70
+ puts "Generated #{path}"
data/fonts/LICENSE ADDED
@@ -0,0 +1,47 @@
1
+ USPS Intelligent Mail Barcode Fonts License
2
+ ============================================
3
+
4
+ Copyright © US Postal Service 2009
5
+
6
+ LICENSE GRANT
7
+
8
+ The Postal Service grants you a world-wide, royalty-free, non-exclusive license
9
+ to use the Software, Documentation, and Fonts in the mailing industry without
10
+ paying a royalty or other fee, including rights to reproduce, display, merge,
11
+ sell, distribute, sublicense, and translate them; and the right to create
12
+ derivative works.
13
+
14
+ CONDITIONS
15
+
16
+ Redistribution of the Software, Documentation, and/or Fonts must contain:
17
+ (a) the copyright notice set forth above
18
+ (b) this list of conditions
19
+ (c) the disclaimer noted below
20
+
21
+ You may redistribute your versions of the Software and/or Fonts if your versions
22
+ were created by making modifications or improvements for a legitimate purpose in
23
+ furtherance of your or another's business.
24
+
25
+ The US Postal Service reserves the right to change this License in any manner
26
+ within reason at its discretion.
27
+
28
+ DISCLAIMER
29
+
30
+ THE POSTAL SERVICE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
31
+ INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
32
+ PURPOSE. IN NO EVENT SHALL THE POSTAL SERVICE BE LIABLE FOR ANY SPECIAL,
33
+ INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
34
+ OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
35
+ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
36
+ THIS SOFTWARE.
37
+
38
+ FONTS INCLUDED
39
+
40
+ - USPSIMBStandard.ttf - Primary USPS Intelligent Mail Barcode font
41
+ - USPSIMBCompact.ttf - Compact variant of the USPS Intelligent Mail Barcode font
42
+
43
+ OFFICIAL SOURCE
44
+
45
+ Official USPS font downloads and documentation:
46
+ https://postalpro.usps.com/mailing/encoder-software-and-fonts
47
+ https://postalpro.usps.com/onecodesolution
Binary file
Binary file
@@ -6,7 +6,8 @@ require 'usps_intelligent_barcode/crc'
6
6
  # The namespace for everything in this library.
7
7
  module Imb
8
8
 
9
- # This class represents a barcode.
9
+ # This class turns a collection of fields into a string of symbols
10
+ # for printing using a barcode font.
10
11
  class Barcode
11
12
 
12
13
  include Memoizer
@@ -26,8 +27,6 @@ module Imb
26
27
  # @return [RoutingCode]
27
28
  attr_reader :routing_code
28
29
 
29
- # @param
30
-
31
30
  # Create a new barcode
32
31
  #
33
32
  # @param barcode_id [String] Nominally a String, but can be
@@ -65,34 +64,8 @@ module Imb
65
64
  def barcode_letters
66
65
  symbols.map(&:letter).join
67
66
  end
68
-
69
- private
70
-
71
- # :stopdoc:
72
- BAR_MAP = BarMap.new
73
- CODEWORD_MAP = CodewordMap.new
74
- CRC = Crc.new
75
- # :startdoc:
76
-
77
- def validate_components
78
- components.each do |component|
79
- component.validate(long_mailer_id?)
80
- end
81
- end
82
67
 
83
- def components
84
- [
85
- @routing_code,
86
- @barcode_id,
87
- @service_type,
88
- @mailer_id,
89
- @serial_number,
90
- ]
91
- end
92
-
93
- def long_mailer_id?
94
- @mailer_id.long?
95
- end
68
+ # @!group Algorithm Steps - Public for testing
96
69
 
97
70
  # The components ("fields" in the spec) are turned into a single
98
71
  # number that the spec calls "binary_data"). This is done through
@@ -181,6 +154,36 @@ module Imb
181
154
  end
182
155
  end
183
156
 
157
+ # @!endgroup
158
+
159
+ private
160
+
161
+ # :stopdoc:
162
+ BAR_MAP = BarMap.new
163
+ CODEWORD_MAP = CodewordMap.new
164
+ CRC = Crc.new
165
+ # :startdoc:
166
+
167
+ def validate_components
168
+ components.each do |component|
169
+ component.validate(long_mailer_id?)
170
+ end
171
+ end
172
+
173
+ def components
174
+ [
175
+ @routing_code,
176
+ @barcode_id,
177
+ @service_type,
178
+ @mailer_id,
179
+ @serial_number,
180
+ ]
181
+ end
182
+
183
+ def long_mailer_id?
184
+ @mailer_id.long?
185
+ end
186
+
184
187
  # Map the "characters" to symbols. Here is where the barcode is made.
185
188
  #
186
189
  # @return [Array<BarSymbol>]
@@ -52,6 +52,11 @@ module Imb
52
52
  @value
53
53
  end
54
54
 
55
+ # @return [String] The string value of the barcode ID
56
+ def to_s
57
+ "%02d" % @value
58
+ end
59
+
55
60
  # @!group Internal
56
61
 
57
62
  # Validate the value.
@@ -47,11 +47,16 @@ module Imb
47
47
  false
48
48
  end
49
49
 
50
- # @return [Integer] The value of the mailer ID
50
+ # @return [Integer] The integer value of the mailer ID
51
51
  def to_i
52
52
  @value
53
53
  end
54
54
 
55
+ # @return [String] The string value of the mailer ID
56
+ def to_s
57
+ @value.to_s
58
+ end
59
+
55
60
  # @!group Internal
56
61
 
57
62
  # Return true if this is a long (9 digit) mailer ID
@@ -0,0 +1,19 @@
1
+ module Imb
2
+
3
+ # Provides paths to gem directories
4
+ module ProjectDirs
5
+
6
+ # Returns the root directory of the gem
7
+ # @return [String] absolute path to gem root
8
+ def self.project_dir
9
+ File.expand_path('../..', __dir__)
10
+ end
11
+
12
+ # Returns the bundled fonts directory
13
+ # @return [String] absolute path to fonts/ directory
14
+ def self.font_dir
15
+ File.join(project_dir, 'fonts')
16
+ end
17
+
18
+ end
19
+ end
@@ -101,23 +101,25 @@ module Imb
101
101
 
102
102
  # @!endgroup
103
103
 
104
- protected
105
-
106
104
  # Convert to an array of [zip, plus4, delivery point]
105
+ # @return [Array<Integer, Integer, Integer>]
106
+ # @note Public for testing
107
107
  def to_a
108
108
  [@zip, @plus4, @delivery_point]
109
109
  end
110
110
 
111
- private
112
-
113
- NUM_DIGITS = 11 #:nodoc:
114
-
115
- def arg_to_i(o)
116
- o.andand.to_i
111
+ # Convert to a string
112
+ def to_s
113
+ "%05d%04d%02d" % [
114
+ @zip,
115
+ @plus4,
116
+ @delivery_point,
117
+ ]
117
118
  end
118
-
119
- # Convert to an integer value
120
119
 
120
+ # Convert to an integer value
121
+ # @return [Integer]
122
+ # @note Public for testing
121
123
  def convert
122
124
  if @zip && @plus4 && @delivery_point
123
125
  @zip * 1000000 + @plus4 * 100 + @delivery_point + 1000100001
@@ -130,6 +132,14 @@ module Imb
130
132
  end
131
133
  end
132
134
 
135
+ private
136
+
137
+ NUM_DIGITS = 11 #:nodoc:
138
+
139
+ def arg_to_i(o)
140
+ o.andand.to_i
141
+ end
142
+
133
143
  end
134
144
 
135
145
  end
@@ -37,11 +37,16 @@ module Imb
37
37
  false
38
38
  end
39
39
 
40
- # @return [Integer] The value of the serial number
40
+ # @return [Integer] The integer value of the serial number
41
41
  def to_i
42
42
  @value
43
43
  end
44
44
 
45
+ # @return [String] The string value of the serial number
46
+ def to_s
47
+ @value.to_s
48
+ end
49
+
45
50
  # @!group Internal
46
51
 
47
52
  # Validate the value.
@@ -36,11 +36,16 @@ module Imb
36
36
  false
37
37
  end
38
38
 
39
- # @return [Integer] The value of the service type
39
+ # @return [Integer] The integer value of the service type
40
40
  def to_i
41
41
  @value
42
42
  end
43
43
 
44
+ # @return [Integer] The string value of the service type
45
+ def to_s
46
+ @value.to_s
47
+ end
48
+
44
49
  # @!group Internal
45
50
 
46
51
  # Validate the value.
@@ -0,0 +1,48 @@
1
+ module Imb
2
+
3
+ # Provides access to bundled USPS Intelligent Mail Barcode fonts
4
+ class UspsFonts
5
+
6
+ # USPS recommended font size in points (16pt for standard fonts per spec)
7
+ STANDARD_FONT_SIZE = 16
8
+
9
+ # Returns path to the standard USPS IMB font (recommended for most use)
10
+ # USPSIMBStandard is the primary USPS Intelligent Mail Barcode font
11
+ # @return [String] absolute path to USPSIMBStandard.ttf
12
+ def self.standard_font_path
13
+ font_path('USPSIMBStandard.ttf')
14
+ end
15
+
16
+ # Returns path to the compact USPS IMB font
17
+ # USPSIMBCompact provides a more compact barcode rendering
18
+ # @return [String] absolute path to USPSIMBCompact.ttf
19
+ def self.compact_font_path
20
+ font_path('USPSIMBCompact.ttf')
21
+ end
22
+
23
+ # Returns paths to all bundled USPS fonts
24
+ # @return [Hash<Symbol, String>] font name symbols to file paths
25
+ def self.all_font_paths
26
+ {
27
+ standard: standard_font_path,
28
+ compact: compact_font_path
29
+ }
30
+ end
31
+
32
+ # Returns the USPS-recommended font size
33
+ # @return [Integer] font size in points (16pt)
34
+ def self.font_size
35
+ STANDARD_FONT_SIZE
36
+ end
37
+
38
+ private
39
+
40
+ # Returns absolute path to a font file in the bundled fonts directory
41
+ # @param filename [String] font filename
42
+ # @return [String] absolute path to font file
43
+ def self.font_path(filename)
44
+ File.join(ProjectDirs.font_dir, filename)
45
+ end
46
+
47
+ end
48
+ end
@@ -12,6 +12,8 @@ require 'usps_intelligent_barcode/codeword_map'
12
12
  require 'usps_intelligent_barcode/crc'
13
13
  require 'usps_intelligent_barcode/mailer_id'
14
14
  require 'usps_intelligent_barcode/numeric_conversions'
15
+ require 'usps_intelligent_barcode/project_dirs'
15
16
  require 'usps_intelligent_barcode/routing_code'
16
17
  require 'usps_intelligent_barcode/serial_number'
17
18
  require 'usps_intelligent_barcode/service_type'
19
+ require 'usps_intelligent_barcode/usps_fonts'
data/rake/bundler.rb ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/rake/version.rb ADDED
@@ -0,0 +1,33 @@
1
+ namespace :version do
2
+ VERSION_FILE = 'VERSION'
3
+ desc "Bump major version (X.0.0)"
4
+ task :bump_major do
5
+ bump_version(:major)
6
+ end
7
+ desc "Bump minor version (x.X.0)"
8
+ task :bump_minor do
9
+ bump_version(:minor)
10
+ end
11
+ desc "Bump patch version (x.x.X)"
12
+ task :bump_patch do
13
+ bump_version(:patch)
14
+ end
15
+ def bump_version(level)
16
+ current = File.read(VERSION_FILE).strip
17
+ major, minor, patch = current.split('.').map(&:to_i)
18
+ case level
19
+ when :major
20
+ major += 1
21
+ minor = 0
22
+ patch = 0
23
+ when :minor
24
+ minor += 1
25
+ patch = 0
26
+ when :patch
27
+ patch += 1
28
+ end
29
+ new_version = "#{major}.#{minor}.#{patch}"
30
+ File.write(VERSION_FILE, new_version + "\n")
31
+ puts "Bumped version from #{current} to #{new_version}"
32
+ end
33
+ end
data/rake/yard.rb CHANGED
@@ -3,6 +3,7 @@ if Gem::Specification::find_all_by_name("yard").any?
3
3
  require 'yard'
4
4
 
5
5
  YARD::Rake::YardocTask.new do |t|
6
+ t.options = ['--output-dir', 'rdoc']
6
7
  end
7
8
 
8
9
  end
@@ -1,100 +1,27 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
5
- # stub: usps_intelligent_barcode 1.0.0 ruby lib
6
-
7
1
  Gem::Specification.new do |s|
8
- s.name = "usps_intelligent_barcode"
9
- s.version = "1.0.0"
10
-
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib"]
13
- s.authors = ["Wayne Conrad"]
14
- s.date = "2016-11-26"
15
- s.description = "A pure Ruby library to generate a USPS Intelligent Mail barcode. It generates the string of characters to print with one of the USPS Intelligent Mail barcode fonts."
16
- s.email = "wconrad@yagni.com"
17
- s.extra_rdoc_files = [
18
- "LICENSE.md",
19
- "README.markdown"
20
- ]
21
- s.files = [
22
- ".travis.yml",
23
- "CHANGELOG.markdown",
24
- "Gemfile",
25
- "Gemfile.lock",
26
- "LICENSE.md",
27
- "README.markdown",
28
- "Rakefile",
29
- "USPS-intelligent-barcode.gemspec",
30
- "VERSION",
31
- "examples/example.rb",
32
- "lib/usps_intelligent_barcode.rb",
33
- "lib/usps_intelligent_barcode/bar_map.rb",
34
- "lib/usps_intelligent_barcode/bar_position.rb",
35
- "lib/usps_intelligent_barcode/bar_symbol.rb",
36
- "lib/usps_intelligent_barcode/bar_to_character_mapping.yml",
37
- "lib/usps_intelligent_barcode/barcode.rb",
38
- "lib/usps_intelligent_barcode/barcode_id.rb",
39
- "lib/usps_intelligent_barcode/character_position.rb",
40
- "lib/usps_intelligent_barcode/codeword_map.rb",
41
- "lib/usps_intelligent_barcode/codeword_to_character_mapping.yml",
42
- "lib/usps_intelligent_barcode/crc.rb",
43
- "lib/usps_intelligent_barcode/mailer_id.rb",
44
- "lib/usps_intelligent_barcode/numeric_conversions.rb",
45
- "lib/usps_intelligent_barcode/routing_code.rb",
46
- "lib/usps_intelligent_barcode/serial_number.rb",
47
- "lib/usps_intelligent_barcode/service_type.rb",
48
- "rake/default.rb",
49
- "rake/jeweler.rb",
50
- "rake/rspec.rb",
51
- "rake/yard.rb",
52
- "spec/bar_map_spec.rb",
53
- "spec/bar_position_spec.rb",
54
- "spec/bar_symbol_spec.rb",
55
- "spec/barcode_id_spec.rb",
56
- "spec/barcode_spec.rb",
57
- "spec/character_position_spec.rb",
58
- "spec/codeword_map_spec.rb",
59
- "spec/crc_spec.rb",
60
- "spec/mailer_id_spec.rb",
61
- "spec/numeric_conversions_spec.rb",
62
- "spec/routing_code_spec.rb",
63
- "spec/serial_number_spec.rb",
64
- "spec/service_type_spec.rb",
65
- "spec/spec_helper.rb",
66
- "usps_intelligent_barcode.gemspec"
67
- ]
68
- s.homepage = "http://github.com/wconrad/usps_intelligent_barcode"
69
- s.licenses = ["MIT"]
70
- s.rubygems_version = "2.5.1"
71
- s.summary = "Generates a USPS Intelligent Mail Barcode."
72
-
73
- if s.respond_to? :specification_version then
74
- s.specification_version = 4
75
-
76
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
77
- s.add_runtime_dependency(%q<andand>, ["~> 1.3"])
78
- s.add_runtime_dependency(%q<memoizer>, ["~> 1.0"])
79
- s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
80
- s.add_development_dependency(%q<rake>, ["~> 11.2"])
81
- s.add_development_dependency(%q<simplecov>, [">= 0"])
82
- s.add_development_dependency(%q<yard>, ["~> 0.8.5"])
83
- else
84
- s.add_dependency(%q<andand>, ["~> 1.3"])
85
- s.add_dependency(%q<memoizer>, ["~> 1.0"])
86
- s.add_dependency(%q<jeweler>, ["~> 2.0"])
87
- s.add_dependency(%q<rake>, ["~> 11.2"])
88
- s.add_dependency(%q<simplecov>, [">= 0"])
89
- s.add_dependency(%q<yard>, ["~> 0.8.5"])
90
- end
91
- else
92
- s.add_dependency(%q<andand>, ["~> 1.3"])
93
- s.add_dependency(%q<memoizer>, ["~> 1.0"])
94
- s.add_dependency(%q<jeweler>, ["~> 2.0"])
95
- s.add_dependency(%q<rake>, ["~> 11.2"])
96
- s.add_dependency(%q<simplecov>, [">= 0"])
97
- s.add_dependency(%q<yard>, ["~> 0.8.5"])
2
+ s.name = 'usps_intelligent_barcode'
3
+ s.version = File.read('VERSION').strip
4
+ s.summary = 'Generates a USPS Intelligent Mail Barcode.'
5
+ s.description = 'A pure Ruby library to generate a USPS Intelligent Mail barcode. It generates the string of characters to print with one of the USPS Intelligent Mail barcode fonts.'
6
+ s.authors = ['Wayne Conrad']
7
+ s.email = 'kf7qga@gmail.com'
8
+ s.homepage = 'https://github.com/wconrad/usps_intelligent_barcode'
9
+ s.license = 'MIT'
10
+ s.required_ruby_version = '>= 3.2.0'
11
+ s.files = `git ls-files -z`.split("\x0").reject do |f|
12
+ f.match(%r{^(test|spec|features)/})
98
13
  end
14
+ s.require_paths = ['lib']
15
+ s.add_runtime_dependency 'andand', '~> 1.3'
16
+ s.add_runtime_dependency 'memoizer', '~> 1.0'
17
+ s.add_development_dependency 'prawn', '~> 2.5'
18
+ s.add_development_dependency 'rake', '~> 13.0'
19
+ s.add_development_dependency 'rspec', '~> 3.12'
20
+ s.add_development_dependency 'rspec-its', '~> 2.0'
21
+ s.add_development_dependency 'simplecov', '~> 0.22'
22
+ s.add_development_dependency 'yard', '~> 0.9'
23
+ s.metadata = {
24
+ 'source_code_uri' => 'https://github.com/wconrad/usps_intelligent_barcode',
25
+ 'bug_tracker_uri' => 'https://github.com/wconrad/usps_intelligent_barcode/issues'
26
+ }
99
27
  end
100
-