barcode1dtools 0.9.9.0 → 0.9.9.1

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.
@@ -22,7 +22,7 @@ module Barcode1DTools
22
22
  #
23
23
  # Additionally, the caller must present the start and stop
24
24
  # characters as part of the value. When decoding, the start/stop
25
- # cahracters will be presented as A, B, C, or D.
25
+ # characters will be presented as A, B, C, or D.
26
26
  #
27
27
  # val = "A29322930C"
28
28
  # bc = Barcode1DTools::Codabar.new(val)
@@ -115,7 +115,7 @@ module Barcode1DTools
115
115
  # underscore, then has nul to \x1f. Finally, it has FNC 1-4.
116
116
  CODE_A_TO_ASCII = ((32..95).to_a + (0..31).to_a).collect { |c| [c].pack('C') } + [ :fnc_3, :fnc_2, :shift_b, :code_c, :code_b, :fnc_4, :fnc_1, :start_a, :start_b, :start_c, :stop ]
117
117
  ASCII_TO_CODE_A = (0..(CODE_A_TO_ASCII.length-1)).inject({}) { |a,c| a[CODE_A_TO_ASCII[c]] = c; a }
118
- CODE_A_TO_HIGH_ASCII = CODE_A_TO_ASCII.collect { |a| a.is_a?(Symbol) ? a : [a.unpack("C").first+128].pack("C") }
118
+ CODE_A_TO_HIGH_ASCII = CODE_A_TO_ASCII.collect { |a| a.is_a?(Symbol) ? a : [a.unpack("C").first+128].pack("C") }.collect { |c| RUBY_VERSION < "1.9" || c.is_a?(Symbol) ? c : c.force_encoding('ISO-8859-1') }
119
119
  HIGH_ASCII_TO_CODE_A = (0..(CODE_A_TO_HIGH_ASCII.length-1)).inject({}) { |a,c| a[CODE_A_TO_HIGH_ASCII[c]] = c; a }
120
120
 
121
121
  # Code B encodes ASCII space (\x20, dec. 32) to DEL (\x7f,
@@ -124,7 +124,7 @@ module Barcode1DTools
124
124
  # different position than in set A.
125
125
  CODE_B_TO_ASCII = (32..127).collect { |c| [c].pack('C') } + [ :fnc_3, :fnc_2, :shift_a, :code_c, :fnc_4, :code_a, :fnc_1, :start_a, :start_b, :start_c, :stop ]
126
126
  ASCII_TO_CODE_B = (0..(CODE_B_TO_ASCII.length-1)).inject({}) { |a,c| a[CODE_B_TO_ASCII[c]] = c; a }
127
- CODE_B_TO_HIGH_ASCII = CODE_B_TO_ASCII.collect { |a| a.is_a?(Symbol) ? a : [a.unpack("C").first+128].pack("C") }
127
+ CODE_B_TO_HIGH_ASCII = CODE_B_TO_ASCII.collect { |a| a.is_a?(Symbol) ? a : [a.unpack("C").first+128].pack("C") }.collect { |c| RUBY_VERSION < "1.9" || c.is_a?(Symbol) ? c : c.force_encoding('ISO-8859-1') }
128
128
  HIGH_ASCII_TO_CODE_B = (0..(CODE_B_TO_HIGH_ASCII.length-1)).inject({}) { |a,c| a[CODE_B_TO_HIGH_ASCII[c]] = c; a }
129
129
 
130
130
  # Code C encodes digit pairs 00 to 99 as well as FNC 1.
@@ -255,7 +255,7 @@ module Barcode1DTools
255
255
  end
256
256
  # Make sure it's Latin-1 for Ruby 1.9+
257
257
  if RUBY_VERSION >= "1.9"
258
- ret = ret.collect { |c| c.force_encoding('ISO-8859-1') }
258
+ ret = ret.collect { |c| c.is_a?(Symbol) ? c : c.force_encoding('ISO-8859-1') }
259
259
  end
260
260
  if options[:raw_array]
261
261
  ret.push(md[2].unpack('C').first)
@@ -325,6 +325,9 @@ module Barcode1DTools
325
325
  while x < map_a.length - 1 do
326
326
  map_a_len = map_a.index('-',x).to_i - x
327
327
  map_b_len = map_b.index('-',x).to_i - x
328
+ if map_a_len==0 && map_b_len==0
329
+ raise "Ack! Bad mapping: #{map_a} & #{map_b}"
330
+ end
328
331
  if map_a_len >= map_b_len
329
332
  codepoints += map_a[x,map_a_len]
330
333
  x += map_a_len
@@ -439,7 +442,7 @@ module Barcode1DTools
439
442
 
440
443
  end
441
444
 
442
- decoded_string = code128_to_latin1(points.pack('C*'))
445
+ decoded_string = code128_to_latin1(points.pack('C*'), options)
443
446
 
444
447
  Code128.new(decoded_string, options)
445
448
  end
@@ -456,11 +459,26 @@ module Barcode1DTools
456
459
  @encoded_string = value
457
460
  @value = self.class.code128_to_latin1(value, options)
458
461
  else
459
- @value = value.to_s
462
+ if value.is_a?(Array)
463
+ @value = value
464
+ else
465
+ @value = [value.to_s]
466
+ end
460
467
  # In ruby 1.9, change to Latin-1 if it's in another encoding.
461
468
  # Really, the caller needs to handle this.
462
- if RUBY_VERSION >= "1.9" && !['US-ASCII','ISO-8859-1'].include?(value.encoding)
463
- value = value.encode('ISO-8859-1')
469
+ if RUBY_VERSION >= "1.9"
470
+ @value = @value.collect do |item|
471
+ if item.is_a?(Symbol)
472
+ item
473
+ else
474
+ item = item.to_s
475
+ if ['US-ASCII','ISO-8859-1'].include?(item.encoding)
476
+ item
477
+ else
478
+ item.encode('ISO-8859-1')
479
+ end
480
+ end
481
+ end
464
482
  end
465
483
  raise UnencodableCharactersError unless self.class.can_encode?(value)
466
484
  @encoded_string = self.class.latin1_to_code128(@value, options)
@@ -21,10 +21,10 @@ class Barcode1DToolsCode128Test < Test::Unit::TestCase
21
21
 
22
22
  def random_x_character_latin1_string(x)
23
23
  str=(1..x).collect { rand(256) }.pack('C*')
24
- if RUBY_VERSION >= "1.9"
25
- str.force_encoding('ISO-8859-1')
26
- else
24
+ if RUBY_VERSION < "1.9"
27
25
  str
26
+ else
27
+ str.force_encoding('ISO-8859-1')
28
28
  end
29
29
  end
30
30
 
@@ -54,7 +54,7 @@ class Barcode1DToolsCode128Test < Test::Unit::TestCase
54
54
 
55
55
  def test_attr_readers
56
56
  c128 = Barcode1DTools::Code128.new('Hello!')
57
- assert_equal 'Hello!', c128.value
57
+ assert_equal ['Hello!'], c128.value
58
58
  end
59
59
 
60
60
  def test_decode_error
@@ -73,4 +73,14 @@ class Barcode1DToolsCode128Test < Test::Unit::TestCase
73
73
  c1284 = Barcode1DTools::Code128.decode(c128.rle.reverse)
74
74
  assert_equal c128.value, c1284.value
75
75
  end
76
+
77
+ def test_serious_decoding
78
+ random_c128_str = random_crazy_code128_value(rand(5) + 10)
79
+ c128 = Barcode1DTools::Code128.new(random_c128_str, :no_latin1 => true)
80
+ c1282 = Barcode1DTools::Code128.decode(c128.rle, :no_latin1 => true)
81
+ assert_equal c128.value, c1282.value
82
+ # Should also work in reverse
83
+ c1284 = Barcode1DTools::Code128.decode(c128.rle.reverse, :no_latin1 => true)
84
+ assert_equal c128.value, c1284.value
85
+ end
76
86
  end
metadata CHANGED
@@ -1,42 +1,29 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: barcode1dtools
3
- version: !ruby/object:Gem::Version
4
- hash: 35
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.9.1
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 9
9
- - 9
10
- - 0
11
- version: 0.9.9.0
12
6
  platform: ruby
13
- authors:
7
+ authors:
14
8
  - Michael Chaney
15
9
  autorequire:
16
10
  bindir: bin
17
11
  cert_chain: []
18
-
19
- date: 2012-09-22 00:00:00 -05:00
20
- default_executable:
12
+ date: 2012-09-22 00:00:00.000000000Z
21
13
  dependencies: []
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"
14
+ description: ! "\t Barcode1D is a small library for handling many kinds of\n\t 1-dimensional
15
+ barcodes. Currently implemented are Code 128, Code 3\n\t of 9, Code 93, Code 11,
16
+ Codabar, Interleaved 2 of 5, COOP 2 of 5,\n\t Matrix 2 of 5, Industrial 2 of 5,
17
+ IATA 2 of 5, PostNet, Plessey, MSI\n\t (Modified Plessey), EAN-13, EAN-8, UPC-A,
18
+ UPC-E, UPC Supplemental 2,\n\t and UPC Supplemental 5. Patterns are created in
19
+ either a simple\n\t format of bars and spaces or as a run-length encoded string.
20
+ \ This\n\t only generates and decodes the patterns; actual display or reading\n\t
21
+ from a device must be implemented by the programmer.\n"
32
22
  email: mdchaney@michaelchaney.com
33
23
  executables: []
34
-
35
24
  extensions: []
36
-
37
25
  extra_rdoc_files: []
38
-
39
- files:
26
+ files:
40
27
  - lib/barcode1dtools/codabar.rb
41
28
  - lib/barcode1dtools/code11.rb
42
29
  - lib/barcode1dtools/code128.rb
@@ -78,44 +65,33 @@ files:
78
65
  - test/test_barcode1dupce.rb
79
66
  - test/test_barcode1dupcsupp2.rb
80
67
  - test/test_barcode1dupcsupp5.rb
81
- has_rdoc: true
82
68
  homepage: http://rubygems.org/gems/barcode1dtools
83
- licenses:
69
+ licenses:
84
70
  - MIT
85
71
  - GPL-2
86
72
  post_install_message:
87
73
  rdoc_options: []
88
-
89
- require_paths:
74
+ require_paths:
90
75
  - lib
91
- required_ruby_version: !ruby/object:Gem::Requirement
76
+ required_ruby_version: !ruby/object:Gem::Requirement
92
77
  none: false
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- hash: 59
97
- segments:
98
- - 1
99
- - 8
100
- - 6
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
101
81
  version: 1.8.6
102
- required_rubygems_version: !ruby/object:Gem::Requirement
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
83
  none: false
104
- requirements:
105
- - - ">="
106
- - !ruby/object:Gem::Version
107
- hash: 3
108
- segments:
109
- - 0
110
- version: "0"
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
111
88
  requirements: []
112
-
113
89
  rubyforge_project:
114
- rubygems_version: 1.5.3
90
+ rubygems_version: 1.8.10
115
91
  signing_key:
116
92
  specification_version: 3
117
93
  summary: Pattern generators for 1D barcodes
118
- test_files:
94
+ test_files:
119
95
  - test/test_barcode1d.rb
120
96
  - test/test_barcode1dcodabar.rb
121
97
  - test/test_barcode1dcode11.rb