barby 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/barby.rb CHANGED
@@ -10,5 +10,8 @@ require 'barby/barcode/ean_13'
10
10
  require 'barby/barcode/ean_8'
11
11
  require 'barby/barcode/bookland'
12
12
  require 'barby/barcode/qr_code'
13
+ require 'barby/barcode/code_25'
14
+ require 'barby/barcode/code_25_interleaved'
15
+ require 'barby/barcode/code_25_iata'
13
16
 
14
17
  require 'barby/outputter'
data/lib/barby/barcode.rb CHANGED
@@ -52,6 +52,11 @@ module Barby
52
52
  end
53
53
 
54
54
 
55
+ def to_s
56
+ self.class.name.split('::').last
57
+ end
58
+
59
+
55
60
  #Is this barcode 2D?
56
61
  def two_dimensional?
57
62
  is_a? Barcode2D
@@ -170,10 +170,40 @@ module Barby
170
170
  end
171
171
 
172
172
 
173
+ def to_s
174
+ full_data
175
+ end
176
+
177
+
173
178
  def data
174
179
  @data
175
180
  end
176
181
 
182
+ #Returns the data for this barcode plus that for the entire extra chain,
183
+ #excluding all change codes
184
+ def full_data
185
+ data + full_extra_data
186
+ end
187
+
188
+ #Returns the data for this barcode plus that for the entire extra chain,
189
+ #including all change codes prefixing each extra
190
+ def full_data_with_change_codes
191
+ data + full_extra_data_with_change_code
192
+ end
193
+
194
+ #Returns the full_data for the extra or an empty string if there is no extra
195
+ def full_extra_data
196
+ return '' unless extra
197
+ extra.full_data
198
+ end
199
+
200
+ #Returns the full_data for the extra with the change code for the extra
201
+ #prepended. If there is no extra, an empty string is returned
202
+ def full_extra_data_with_change_code
203
+ return '' unless extra
204
+ change_code_for(extra) + extra.full_data_with_change_codes
205
+ end
206
+
177
207
  #Set the data for this barcode. If the barcode changes
178
208
  #character set, an extra will be created.
179
209
  def data=(data)
@@ -296,14 +326,20 @@ module Barby
296
326
  encodings[values[char]]
297
327
  end
298
328
 
329
+ def change_code_for_class(klass)
330
+ {Code128A => CODEA, Code128B => CODEB, Code128C => CODEC}[klass]
331
+ end
332
+
333
+ #Find the character that changes the character set to the one
334
+ #represented in +barcode+
335
+ def change_code_for(barcode)
336
+ change_code_for_class(barcode.class)
337
+ end
338
+
299
339
  #Find the numeric value for the character that changes the character
300
340
  #set to the one represented in +barcode+
301
341
  def change_code_number_for(barcode)
302
- case barcode
303
- when Code128A then values[CODEA]
304
- when Code128B then values[CODEB]
305
- when Code128C then values[CODEC]
306
- end
342
+ values[change_code_for(barcode)]
307
343
  end
308
344
 
309
345
  #Find the encoding to change to the character set in +barcode+
@@ -41,7 +41,7 @@ module Barby
41
41
  end
42
42
 
43
43
  def data_encoding_with_checksum
44
- data_encoding+checksum_encoding
44
+ digit_encodings_with_checksum.join
45
45
  end
46
46
 
47
47
  def encoding
@@ -53,10 +53,18 @@ module Barby
53
53
  data.split(//)
54
54
  end
55
55
 
56
+ def characters_with_checksum
57
+ characters.push(checksum.to_s)
58
+ end
59
+
56
60
  def digits
57
61
  characters.map{|c| c.to_i }
58
62
  end
59
63
 
64
+ def digits_with_checksum
65
+ digits.push(checksum)
66
+ end
67
+
60
68
  def even_and_odd_digits
61
69
  alternater = false
62
70
  digits.reverse.partition{ alternater = !alternater }
@@ -64,10 +72,17 @@ module Barby
64
72
 
65
73
 
66
74
  def digit_encodings
75
+ raise_invalid unless valid?
67
76
  digits.map{|d| encoding_for(d) }
68
77
  end
69
78
  alias character_encodings digit_encodings
70
79
 
80
+ def digit_encodings_with_checksum
81
+ raise_invalid unless valid?
82
+ digits_with_checksum.map{|d| encoding_for(d) }
83
+ end
84
+ alias character_encodings_with_checksum digit_encodings_with_checksum
85
+
71
86
 
72
87
  #Returns the encoding for a single digit
73
88
  def encoding_for(digit)
@@ -82,6 +97,10 @@ module Barby
82
97
  end
83
98
  end
84
99
 
100
+ def encoding_for_bars_without_end_space(*a)
101
+ encoding_for_bars(*a).gsub(/0+$/, '')
102
+ end
103
+
85
104
 
86
105
  #Mod10
87
106
  def checksum
@@ -117,6 +136,8 @@ module Barby
117
136
  end
118
137
 
119
138
 
139
+ #2 of 5 doesn't require a checksum, but you can include a Mod10 checksum
140
+ #by setting +include_checksum+ to true
120
141
  def include_checksum?
121
142
  include_checksum
122
143
  end
@@ -132,8 +153,7 @@ module Barby
132
153
  end
133
154
 
134
155
  def stop_encoding
135
- #Removes trailing space generated by encoding_for_bars
136
- encoding_for_bars(STOP_ENCODING).gsub(/0+$/, '')
156
+ encoding_for_bars_without_end_space(STOP_ENCODING)
137
157
  end
138
158
 
139
159
 
@@ -155,6 +175,18 @@ module Barby
155
175
  end
156
176
 
157
177
 
178
+ def to_s
179
+ (include_checksum? ? characters_with_checksum : characters).join
180
+ end
181
+
182
+
183
+ private
184
+
185
+ def raise_invalid
186
+ raise ArgumentError, "data not valid"
187
+ end
188
+
189
+
158
190
  end
159
191
 
160
192
 
@@ -0,0 +1,23 @@
1
+ require 'barby/barcode/code_25'
2
+
3
+ module Barby
4
+
5
+ #The IATA version of 2 of 5 is identical to its parent except for different
6
+ #start and stop codes. This is the one used on the tags they put on your
7
+ #luggage when you check it in at the airport.
8
+ class Code25IATA < Code25
9
+
10
+ START_ENCODING = [N,N]
11
+ STOP_ENCODING = [W,N]
12
+
13
+ def start_encoding
14
+ encoding_for_bars(START_ENCODING)
15
+ end
16
+
17
+ def stop_encoding
18
+ encoding_for_bars_without_end_space(STOP_ENCODING)
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -2,69 +2,69 @@ require 'barby/barcode/code_25'
2
2
 
3
3
  module Barby
4
4
 
5
+ #Code 2 of 5 interleaved. Same as standard 2 of 5, but spaces are used
6
+ #for encoding as well as the bars. Each pair of numbers get interleaved,
7
+ #that is, the first is encoded in the bars and the second is encoded
8
+ #in the spaced. This means an interleaved 2/5 barcode must have an even
9
+ #number of digits.
5
10
  class Code25Interleaved < Code25
6
11
 
7
12
  START_ENCODING = [N,N,N,N]
8
13
  STOP_ENCODING = [W,N,N]
9
14
 
10
15
 
11
- def data_encoding
12
- digit_pair_encodings.join
13
- end
14
-
15
-
16
- def character_pairs
17
- chars = characters
18
- pairs = Array.new((chars.size/2.0).ceil){ [] }
19
- chars.each_with_index{|c,i| pairs[(i/2.0).floor] << c }
20
- pairs
16
+ def digit_pairs(d=nil)
17
+ (d || digits).inject [] do |ary,d|
18
+ ary << [] if !ary.last || ary.last.size == 2
19
+ ary.last << d
20
+ ary
21
+ end
21
22
  end
22
23
 
23
- def digit_pairs
24
- d = digits
25
- pairs = Array.new((d.size/2.0).ceil){ [] }
26
- d.each_with_index{|dd,i| pairs[(i/2.0).floor] << dd }
27
- pairs
24
+ def digit_pairs_with_checksum
25
+ digit_pairs(digits_with_checksum)
28
26
  end
29
27
 
30
28
 
31
- def digit_pair_encodings
29
+ def digit_encodings
30
+ raise_invalid unless valid?
32
31
  digit_pairs.map{|p| encoding_for_pair(p) }
33
32
  end
34
33
 
34
+ def digit_encodings_with_checksum
35
+ digit_pairs_with_checksum.map{|p| encoding_for_pair(p) }
36
+ end
37
+
35
38
 
36
39
  def encoding_for_pair(pair)
37
40
  bars, spaces = ENCODINGS[pair.first], ENCODINGS[pair.last]
38
- bars.zip(spaces).inject '' do |enc,p|
39
- bar, space = *p
40
- enc + ('1' * (bar == WIDE ? wide_width : narrow_width)) +
41
- ('0' * (space == WIDE ? wide_width : narrow_width))
42
- end
41
+ encoding_for_interleaved(bars.zip(spaces))
43
42
  end
44
43
 
45
- #def encoding_for_bars(*bars_and_spaces)
46
- # bar = false
47
- # bars_and_spaces.flatten.inject '' do |enc,bar_or_space|
48
- # bar = !bar
49
- # enc + (bar ? '1' : '0')*(bar_or_space == WIDE ? wide_width : narrow_width)
50
- # end
51
- #end
52
-
53
44
 
54
- def start_encoding
55
- bar = false
56
- START_ENCODING.inject '' do |enc,bar_or_space|
45
+ #Encodes an array of interleaved W or N bars and spaces
46
+ #ex: [W,N,W,W,N,N] => "111011100010"
47
+ def encoding_for_interleaved(*bars_and_spaces)
48
+ bar = false#starts with bar
49
+ bars_and_spaces.flatten.inject '' do |enc,bar_or_space|
57
50
  bar = !bar
58
51
  enc << (bar ? '1' : '0') * (bar_or_space == WIDE ? wide_width : narrow_width)
59
52
  end
60
53
  end
61
54
 
55
+
56
+ def start_encoding
57
+ encoding_for_interleaved(START_ENCODING)
58
+ end
59
+
62
60
  def stop_encoding
63
- bar = false
64
- STOP_ENCODING.inject '' do |enc,bar_or_space|
65
- bar = !bar
66
- enc << (bar ? '1' : '0') * (bar_or_space == WIDE ? wide_width : narrow_width)
67
- end
61
+ encoding_for_interleaved(STOP_ENCODING)
62
+ end
63
+
64
+
65
+ def valid?
66
+ # When checksum is included, it's included when determining "evenness"
67
+ super && digits.size % 2 == (include_checksum? ? 1 : 0)
68
68
  end
69
69
 
70
70
 
@@ -194,6 +194,11 @@ module Barby
194
194
  end
195
195
 
196
196
 
197
+ def to_s
198
+ data
199
+ end
200
+
201
+
197
202
  end
198
203
 
199
204
 
@@ -220,6 +220,11 @@ module Barby
220
220
  end
221
221
 
222
222
 
223
+ def to_s
224
+ data
225
+ end
226
+
227
+
223
228
  end
224
229
 
225
230
  end
@@ -148,6 +148,11 @@ module Barby
148
148
  end
149
149
 
150
150
 
151
+ def to_s
152
+ data_with_checksum
153
+ end
154
+
155
+
151
156
  #Is this a UPC-A barcode?
152
157
  #UPC barcodes are EAN codes that start with 0
153
158
  def upc?
@@ -13,7 +13,8 @@ module Barby
13
13
  super(data, type)
14
14
  end
15
15
 
16
-
16
+
17
+ #TODO: Not sure this is entirely right
17
18
  def data
18
19
  FNC1+application_identifier+super
19
20
  end
@@ -30,6 +31,10 @@ module Barby
30
31
  encodings[application_identifier_number]
31
32
  end
32
33
 
34
+ def to_s
35
+ "(#{application_identifier}) #{partial_data}"
36
+ end
37
+
33
38
 
34
39
  end
35
40
 
@@ -77,6 +77,11 @@ module Barby
77
77
  end
78
78
 
79
79
 
80
+ def to_s
81
+ data[0,20]
82
+ end
83
+
84
+
80
85
  private
81
86
 
82
87
  #Generate an RQRCode object with the available values
@@ -16,17 +16,28 @@ module Barby
16
16
 
17
17
  #Returns a string containing a PNG image
18
18
  def to_png(*a)
19
- to_image(*a).to_blob{|i| i.format ='png' }
19
+ to_blob('png', *a)
20
20
  end
21
21
 
22
22
  #Returns a string containint a GIF image
23
23
  def to_gif(*a)
24
- to_image(*a).to_blob{|i| i.format ='gif' }
24
+ to_blob('gif', *a)
25
25
  end
26
26
 
27
27
  #Returns a string containing a JPEG image
28
28
  def to_jpg(*a)
29
- to_image(*a).to_blob{|i| i.format = 'jpg' }
29
+ to_blob('jpg', *a)
30
+ end
31
+
32
+ def to_blob(format, *a)
33
+ img = to_image(*a)
34
+ blob = img.to_blob{|i| i.format = format }
35
+
36
+ #Release the memory used by RMagick explicitly. Ruby's GC
37
+ #isn't aware of it and can't clean it up automatically
38
+ img.destroy! if img.respond_to?(:destroy!)
39
+
40
+ blob
30
41
  end
31
42
 
32
43
  #Returns an instance of Magick::Image
@@ -0,0 +1,225 @@
1
+ require 'barby/outputter'
2
+
3
+ module Barby
4
+
5
+ #Renders the barcode to a simple SVG image using pure ruby
6
+ #
7
+ #Registers the to_svg, bars_to_path, and bars_to_rects method
8
+ #
9
+ #Bars can be rendered as a stroked path or as filled rectangles. Path
10
+ #generally yields smaller files, but this doesn't render cleanly in Firefox
11
+ #3 for odd xdims. My guess is that the renderer tries to put half a pixel
12
+ #on one side of the path and half on the other, leading to fuzzy dithering
13
+ #instead of sharp, clean b&w.
14
+ #
15
+ #Therefore, default behavior is to use a path for even xdims, and
16
+ #rectangles for odd. This can be overridden by calling with explicit
17
+ #:use => 'rects' or :use => 'path' options.
18
+ class SvgOutputter < Outputter
19
+
20
+ register :to_svg, :bars_to_rects, :bars_to_path
21
+
22
+ attr_writer :title, :xdim, :ydim, :height, :rmargin, :lmargin, :tmargin, :bmargin, :xmargin, :ymargin, :margin
23
+
24
+
25
+ def to_svg(opts={})
26
+ with_options opts do
27
+ case opts[:use]
28
+ when 'rects' then bars = bars_to_rects
29
+ when 'path' then bars = bars_to_path
30
+ else
31
+ xdim_odd = (xdim % 2 == 1)
32
+ bars = xdim_odd ? bars_to_rects : bars_to_path
33
+ end
34
+
35
+ <<-"EOT"
36
+ <?xml version="1.0" encoding="UTF-8"?>
37
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="#{svg_width(opts)}px" height="#{svg_height(opts)}px" viewBox="0 0 #{svg_width(opts)} #{svg_height(opts)}" version="1.1">
38
+ <title>#{escape title}</title>
39
+ <g id="canvas" #{transform(opts)}>
40
+ <rect x="0" y="0" width="#{full_width}px" height="#{full_height}px" fill="white" />
41
+ <g id="barcode" fill="black">
42
+ #{bars}
43
+ </g></g>
44
+ </svg>
45
+ EOT
46
+ end
47
+ end
48
+
49
+
50
+ def bars_to_rects(opts={})
51
+ rects = ''
52
+ with_options opts do
53
+ x, y = lmargin, tmargin
54
+
55
+ if barcode.two_dimensional?
56
+ boolean_groups.each do |line|
57
+ line.each do |bar, amount|
58
+ bar_width = xdim * amount
59
+ if bar
60
+ rects << %Q|<rect x="#{x}" y="#{y}" width="#{bar_width}px" height="#{ydim}px" />\n|
61
+ end
62
+ x += bar_width
63
+ end
64
+ y += ydim
65
+ x = lmargin
66
+ end
67
+
68
+ else
69
+ boolean_groups.each do |bar, amount|
70
+ bar_width = xdim * amount
71
+ if bar
72
+ rects << %Q|<rect x="#{x}" y="#{y}" width="#{bar_width}px" height="#{height}px" />\n|
73
+ end
74
+ x += bar_width
75
+ end
76
+
77
+ end
78
+ end # with_options
79
+
80
+ rects
81
+ end
82
+
83
+
84
+ def bars_to_path(opts={})
85
+ with_options opts do
86
+ %Q|<path stroke="black" stroke-width="#{xdim}" d="#{bars_to_path_data(opts)}" />|
87
+ end
88
+ end
89
+
90
+
91
+ def bars_to_path_data(opts={})
92
+ path_data = ''
93
+ with_options opts do
94
+ x, y = lmargin+(xdim/2), tmargin
95
+
96
+ if barcode.two_dimensional?
97
+ booleans.each do |line|
98
+ line.each do |bar|
99
+ if bar
100
+ path_data << "M#{x} #{y}V #{y+ydim}"
101
+ end
102
+ x += xdim
103
+ end
104
+ y += ydim
105
+ x = lmargin+(xdim/2)
106
+ end
107
+
108
+ else
109
+ booleans.each do |bar|
110
+ if bar
111
+ path_data << "M#{x} #{y}V#{y+height}"
112
+ end
113
+ x += xdim
114
+ end
115
+
116
+ end
117
+ end # with_options
118
+
119
+ path_data
120
+ end
121
+
122
+
123
+ def title
124
+ @title || barcode.to_s
125
+ end
126
+
127
+
128
+ def width
129
+ length * xdim
130
+ end
131
+
132
+ def height
133
+ barcode.two_dimensional? ? (ydim * encoding.length) : (@height || 100)
134
+ end
135
+
136
+ def full_width
137
+ width + lmargin + rmargin
138
+ end
139
+
140
+ def full_height
141
+ height + tmargin + bmargin
142
+ end
143
+
144
+ def xdim
145
+ @xdim || 1
146
+ end
147
+
148
+ def ydim
149
+ @ydim || xdim
150
+ end
151
+
152
+ def lmargin
153
+ @lmargin || _xmargin
154
+ end
155
+
156
+ def rmargin
157
+ @rmargin || _xmargin
158
+ end
159
+
160
+ def tmargin
161
+ @tmargin || _ymargin
162
+ end
163
+
164
+ def bmargin
165
+ @bmargin || _ymargin
166
+ end
167
+
168
+ def xmargin
169
+ return nil if @lmargin || @rmargin
170
+ _margin
171
+ end
172
+
173
+ def ymargin
174
+ return nil if @tmargin || @bmargin
175
+ _margin
176
+ end
177
+
178
+ def margin
179
+ return nil if @ymargin || @xmargin || @tmargin || @bmargin || @lmargin || @rmargin
180
+ _margin
181
+ end
182
+
183
+ def length
184
+ barcode.two_dimensional? ? encoding.first.length : encoding.length
185
+ end
186
+
187
+
188
+ def svg_width(opts={})
189
+ opts[:rot] ? full_height : full_width
190
+ end
191
+
192
+ def svg_height(opts={})
193
+ opts[:rot] ? full_width : full_height
194
+ end
195
+
196
+
197
+ def transform(opts={})
198
+ opts[:rot] ? %Q|transform="rotate(-90) translate(-#{full_width}, 0)"| : nil
199
+ end
200
+
201
+
202
+ private
203
+
204
+ def _xmargin
205
+ @xmargin || _margin
206
+ end
207
+
208
+ def _ymargin
209
+ @ymargin || _margin
210
+ end
211
+
212
+ def _margin
213
+ @margin || 10
214
+ end
215
+
216
+ #Escape XML special characters <, & and >
217
+ def escape(str)
218
+ str.gsub('&', '&amp;').gsub('<', '&lt;').gsub('>', '&gt;')
219
+ end
220
+
221
+
222
+ end
223
+
224
+
225
+ end
data/lib/barby/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Barby #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 2
4
+ MINOR = 3
5
5
  TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
@@ -1,3 +1,7 @@
1
+ *0.3.2* (Mar 15th, 2009)
2
+
3
+ * Ruby 1.9 fixes by [Tore Darell http://tore.darell.no] [Chris Mowforth http://blog.99th.st]
4
+
1
5
  *0.3.1* (Nov 24th, 2008)
2
6
 
3
7
  * expanded RS block table to QRcode version 40 [Vladislav Gorodetskiy]
@@ -6,7 +6,7 @@ require 'rake/rdoctask'
6
6
  require 'rake/testtask'
7
7
 
8
8
  NAME = "rqrcode"
9
- VERS = "0.3.1"
9
+ VERS = "0.3.2"
10
10
  CLEAN.include ['pkg', 'rdoc']
11
11
 
12
12
  Gem::manage_gems
@@ -27,7 +27,9 @@ module RQRCode
27
27
 
28
28
  def write( buffer )
29
29
  ( 0...@data.size ).each do |i|
30
- buffer.put( @data[i], 8 )
30
+ c = @data[i]
31
+ c = c.ord if c.respond_to?(:ord)#String#[] returns single-char string in 1.9, .ord gets ASCII pos
32
+ buffer.put( c, 8 )
31
33
  end
32
34
  end
33
35
  end
@@ -137,10 +137,10 @@ module RQRCode #:nodoc:
137
137
 
138
138
  # 1 - 9
139
139
  case mode
140
- when QRMODE[:mode_number] : 10
141
- when QRMODE[:mode_alpha_num] : 9
142
- when QRMODE[:mode_8bit_byte] : 8
143
- when QRMODE[:mode_kanji] : 8
140
+ when QRMODE[:mode_number] then 10
141
+ when QRMODE[:mode_alpha_num] then 9
142
+ when QRMODE[:mode_8bit_byte] then 8
143
+ when QRMODE[:mode_kanji] then 8
144
144
  else
145
145
  raise QRCodeRunTimeError, "mode: #{mode}"
146
146
  end
@@ -149,10 +149,10 @@ module RQRCode #:nodoc:
149
149
 
150
150
  # 10 -26
151
151
  case mode
152
- when QRMODE[:mode_number] : 12
153
- when QRMODE[:mode_alpha_num] : 11
154
- when QRMODE[:mode_8bit_byte] : 16
155
- when QRMODE[:mode_kanji] : 10
152
+ when QRMODE[:mode_number] then 12
153
+ when QRMODE[:mode_alpha_num] then 11
154
+ when QRMODE[:mode_8bit_byte] then 16
155
+ when QRMODE[:mode_kanji] then 10
156
156
  else
157
157
  raise QRCodeRunTimeError, "mode: #{mode}"
158
158
  end
@@ -161,10 +161,10 @@ module RQRCode #:nodoc:
161
161
 
162
162
  # 27 - 40
163
163
  case mode
164
- when QRMODE[:mode_number] : 14
165
- when QRMODE[:mode_alpha_num] : 13
166
- when QRMODE[:mode_8bit_byte] : 16
167
- when QRMODE[:mode_kanji] : 12
164
+ when QRMODE[:mode_number] then 14
165
+ when QRMODE[:mode_alpha_num] then 13
166
+ when QRMODE[:mode_8bit_byte] then 16
167
+ when QRMODE[:mode_kanji] then 12
168
168
  else
169
169
  raise QRCodeRunTimeError, "mode: #{mode}"
170
170
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: barby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tore Darell
@@ -9,7 +9,7 @@ autorequire: barby
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-11-24 00:00:00 +01:00
12
+ date: 2009-05-25 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -34,6 +34,7 @@ files:
34
34
  - lib/barby/outputter/png_outputter.rb
35
35
  - lib/barby/outputter/prawn_outputter.rb
36
36
  - lib/barby/outputter/cairo_outputter.rb
37
+ - lib/barby/outputter/svg_outputter.rb
37
38
  - lib/barby/barcode
38
39
  - lib/barby/barcode/code_25.rb
39
40
  - lib/barby/barcode/ean_13.rb
@@ -44,6 +45,7 @@ files:
44
45
  - lib/barby/barcode/code_39.rb
45
46
  - lib/barby/barcode/bookland.rb
46
47
  - lib/barby/barcode/code_128.rb
48
+ - lib/barby/barcode/code_25_iata.rb
47
49
  - lib/barby/barcode/gs1_128.rb
48
50
  - lib/barby.rb
49
51
  - bin/barby