barcode1dtools 1.0.1.0 → 1.0.2.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.
@@ -10,22 +10,22 @@ require 'barcode1dtools/upc_a'
10
10
  module Barcode1DTools
11
11
 
12
12
  # Barcode1DTools::UPC_Supplemental_5 - Create pattern for UPC
13
- # Supplemental 5 barcodes
14
- #
13
+ # Supplemental 5 barcodes.
15
14
  # The value encoded is an 5-digit integer, and a checksum digit
16
15
  # will be added. You can add the option :checksum_included => true
17
16
  # when initializing to specify that you have already included a
18
17
  # checksum. The bar patterns are the same as the left
19
18
  # half of a standard UPC-A.
20
19
  #
21
- # num = '53999' # book price is US$39.99
22
- # bc = Barcode1DTools::UPC_Supplemental_5.new(num)
23
- # pattern = bc.bars
24
- # rle_pattern = bc.rle
25
- # bc.price # returns the "price" part as 4 digits
26
- # bc.currency # returns the first digit currency code
27
- # width = bc.width
28
- # check_digit = Barcode1DTools::UPC_Supplemental_5.generate_check_digit_for(num)
20
+ # == Example
21
+ # num = '53999' # book price is US$39.99
22
+ # bc = Barcode1DTools::UPC_Supplemental_5.new(num)
23
+ # pattern = bc.bars
24
+ # rle_pattern = bc.rle
25
+ # bc.price # returns the "price" part as 4 digits
26
+ # bc.currency # returns the first digit currency code
27
+ # width = bc.width
28
+ # check_digit = Barcode1DTools::UPC_Supplemental_5.generate_check_digit_for(num)
29
29
  #
30
30
  # This type of barcode consists of 5 digits, and a check digit
31
31
  # (a modulus 10 of the sum of the digits with weights of 3 and
@@ -49,7 +49,27 @@ module Barcode1DTools
49
49
  # bookstores), and "90001" through "98999" are used internally
50
50
  # by some publishers.
51
51
  #
52
- #== Rendering
52
+ # == Formats
53
+ # There are two formats for the returned pattern (wn format is
54
+ # not available):
55
+ #
56
+ # *bars* - 1s and 0s specifying black lines and white spaces. Actual
57
+ # characters can be changed from "1" and 0" with options
58
+ # :line_character and :space_character.
59
+ #
60
+ # *rle* - Run-length-encoded version of the pattern. The first
61
+ # number is always a black line, with subsequent digits
62
+ # alternating between spaces and lines. The digits specify
63
+ # the width of each line or space.
64
+ #
65
+ # The "width" method will tell you the total end-to-end width, in
66
+ # units, of the entire barcode.
67
+ #
68
+ # Unlike some of the other barcodes, e.g. Code 3 of 9, there is no "w/n" format for
69
+ # EAN & UPC style barcodes because the bars and spaces are variable width from
70
+ # 1 to 4 units.
71
+ #
72
+ # == Rendering
53
73
  #
54
74
  # The 5-digit supplement is positioned to the right of the
55
75
  # main UPC code, and the human-readable digits are usually
@@ -65,11 +85,13 @@ module Barcode1DTools
65
85
 
66
86
  class UPC_Supplemental_5 < Barcode1D
67
87
 
88
+ # The bar patterns are the left bar patterns of UPC-A/EAN-13
68
89
  LEFT_PATTERNS = UPC_A::LEFT_PATTERNS
90
+ # The rle bar patterns are the left bar patterns of UPC-A/EAN-13
69
91
  LEFT_PATTERNS_RLE = UPC_A::LEFT_PATTERNS_RLE
70
92
 
71
- # parity patterns, essentially binary counting where "e" is "1"
72
- # and "o" is "0"
93
+ # Parity patterns, essentially binary counting where "e" is "1"
94
+ # and "o" is "0".
73
95
  PARITY_PATTERNS = {
74
96
  '0' => 'eeooo',
75
97
  '1' => 'eoeoo',
@@ -83,9 +105,13 @@ module Barcode1DTools
83
105
  '9' => 'ooeoe'
84
106
  };
85
107
 
108
+ # Left guard pattern
86
109
  LEFT_GUARD_PATTERN = '1011'
110
+ # Middle guard pattern
87
111
  MIDDLE_GUARD_PATTERN = '01'
112
+ # Left guard pattern as an rle
88
113
  LEFT_GUARD_PATTERN_RLE = '112'
114
+ # Middle guard pattern as an rle
89
115
  MIDDLE_GUARD_PATTERN_RLE = '11'
90
116
 
91
117
  DEFAULT_OPTIONS = {
@@ -93,7 +119,9 @@ module Barcode1DTools
93
119
  :space_character => '0'
94
120
  }
95
121
 
122
+ # Specific to a UPC Supp 5 - the currency code part of the value
96
123
  attr_reader :currency_code
124
+ # Specific to a UPC Supp 5 - the price part of the value
97
125
  attr_reader :price
98
126
 
99
127
  class << self
@@ -116,7 +144,7 @@ module Barcode1DTools
116
144
  sprintf('%05d',value.to_i).reverse.chars.inject(0) { |a,c| mult = 12 - mult; a + c.to_i * mult } % 10
117
145
  end
118
146
 
119
- # validates the check digit given a string - assumes check digit
147
+ # Validates the check digit given a string - assumes check digit
120
148
  # is last digit of string.
121
149
  def validate_check_digit_for(value)
122
150
  raise UnencodableCharactersError unless self.can_encode?(value, :checksum_included => true)
@@ -124,6 +152,8 @@ module Barcode1DTools
124
152
  self.generate_check_digit_for(md[1]) == md[2].to_i
125
153
  end
126
154
 
155
+ # Decodes a bar pattern or RLE pattern and returns a UPC_Supplemental_5 object
156
+ # with the value.
127
157
  def decode(str)
128
158
  if str.length == 47
129
159
  # bar pattern
@@ -181,6 +211,7 @@ module Barcode1DTools
181
211
 
182
212
  end
183
213
 
214
+ # Creates a new UPC_Supplemental_5 object with the given value.
184
215
  # Options are :line_character, :space_character, and
185
216
  # :checksum_included.
186
217
  def initialize(value, options = {})
@@ -206,12 +237,12 @@ module Barcode1DTools
206
237
  @currency_code, @price = md[1], md[2]
207
238
  end
208
239
 
209
- # not usable with EAN-style codes
240
+ # W/N patterns are not usable with EAN-style codes.
210
241
  def wn
211
242
  raise NotImplementedError
212
243
  end
213
244
 
214
- # returns a run-length-encoded string representation
245
+ # Returns a run-length-encoded string representation.
215
246
  def rle
216
247
  if @rle
217
248
  @rle
@@ -221,12 +252,12 @@ module Barcode1DTools
221
252
  end
222
253
  end
223
254
 
224
- # returns 1s and 0s (for "black" and "white")
255
+ # Returns a simple bar pattern.
225
256
  def bars
226
257
  @bars ||= self.class.rle_to_bars(self.rle, @options)
227
258
  end
228
259
 
229
- # returns the total unit width of the bar code
260
+ # Returns the total unit width of the bar code.
230
261
  def width
231
262
  @width ||= rle.split('').inject(0) { |a,c| a + c.to_i }
232
263
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: barcode1dtools
3
3
  version: !ruby/object:Gem::Version
4
- hash: 91
4
+ hash: 87
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 1
9
+ - 2
10
10
  - 0
11
- version: 1.0.1.0
11
+ version: 1.0.2.0
12
12
  platform: ruby
13
13
  authors:
14
14
  - Michael Chaney
@@ -16,19 +16,19 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-09-27 00:00:00 -05:00
19
+ date: 2012-10-03 00:00:00 -05:00
20
20
  default_executable:
21
21
  dependencies: []
22
22
 
23
- description: "\t Barcode1D is a small library for handling many kinds of\n\
24
- \t 1-dimensional barcodes. Currently implemented are Code 128, Code 3\n\
25
- \t of 9, Code 93, Code 11, Codabar, Interleaved 2 of 5, COOP 2 of 5,\n\
26
- \t Matrix 2 of 5, Industrial 2 of 5, IATA 2 of 5, PostNet, Plessey, MSI\n\
27
- \t (Modified Plessey), EAN-13, EAN-8, UPC-A, UPC-E, UPC Supplemental 2,\n\
28
- \t and UPC Supplemental 5. Patterns are created in either a simple\n\
29
- \t format of bars and spaces or as a run-length encoded string. This\n\
30
- \t only generates and decodes the patterns; actual display or reading\n\
31
- \t from a device must be implemented by the programmer.\n"
23
+ description: "\t Barcode1D is a gem for handling many kinds of 1-dimensional\n\
24
+ \t barcodes. Implemented are Code 128, Code 3 of 9, Code 93, Code 11,\n\
25
+ \t Codabar, Interleaved 2 of 5, COOP 2 of 5, Matrix 2 of 5, Industrial\n\
26
+ \t 2 of 5, IATA 2 of 5, PostNet, Plessey, MSI (Modified Plessey),\n\
27
+ \t EAN-13, EAN-8, UPC-A, UPC-E, UPC Supplemental 2, and UPC\n\
28
+ \t Supplemental 5. Patterns are created in either a simple format of\n\
29
+ \t bars and spaces or as a run-length encoded string. This only\n\
30
+ \t generates and decodes the patterns; actual display or reading from a\n\
31
+ \t device must be implemented by the programmer.\n"
32
32
  email: mdchaney@michaelchaney.com
33
33
  executables: []
34
34