jan 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/jan.gemspec +2 -0
- data/lib/jan/symbol/band/bar.rb +15 -0
- data/lib/jan/symbol/band/space.rb +15 -0
- data/lib/jan/symbol/band.rb +23 -0
- data/lib/jan/symbol/band_pattern/center_guard_pattern.rb +18 -0
- data/lib/jan/symbol/band_pattern/left_quiet_zone.rb +16 -0
- data/lib/jan/symbol/band_pattern/normal_guard_pattern.rb +16 -0
- data/lib/jan/symbol/band_pattern/right_quiet_zone.rb +14 -0
- data/lib/jan/symbol/band_pattern/symbol_character.rb +54 -0
- data/lib/jan/symbol/band_pattern.rb +16 -0
- data/lib/jan/symbol.rb +97 -0
- data/lib/jan/version.rb +1 -1
- data/lib/jan.rb +1 -0
- data/spec/jan/symbol/band/bar_spec.rb +17 -0
- data/spec/jan/symbol/band/space_spec.rb +17 -0
- data/spec/jan/symbol/band_pattern/center_guard_pattern_spec.rb +11 -0
- data/spec/jan/symbol/band_pattern/left_quiet_zone_spec.rb +11 -0
- data/spec/jan/symbol/band_pattern/normal_guard_pattern_spec.rb +11 -0
- data/spec/jan/symbol/band_pattern/right_quiet_zone_spec.rb +11 -0
- data/spec/jan/symbol/band_pattern/symbol_character_spec.rb +94 -0
- data/spec/jan/symbol/band_spec.rb +48 -0
- data/spec/jan/symbol_spec.rb +52 -0
- metadata +44 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0effbb542c76db5c76ab38d7edc9a95e56aa47985b7d3f481aa4799629e4e02
|
4
|
+
data.tar.gz: 57c8f87ea36fe989cae817baa2d04981c28e723a838a848ea1672f35a24c8480
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cdb58db78040e27e525980eb5ea32c30cb38f3f31f60dedb87c5f57f39b5bd0acc2fcd9431a60bbd4566969c199c0bed2c8b08fc2ac3a3c1b57e47ad37105e63
|
7
|
+
data.tar.gz: 4efe19db1d9cacbea44eb314096e45d08f0f5d537104f8a0964153f554c4077f022e0a400385bac4f3561944f32045b6857acc4d8951b5d048f15297949f015d
|
data/jan.gemspec
CHANGED
@@ -17,6 +17,8 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
18
|
spec.require_paths = ['lib']
|
19
19
|
|
20
|
+
spec.add_runtime_dependency 'builder'
|
21
|
+
|
20
22
|
spec.add_development_dependency 'bundler', '~> 2.0'
|
21
23
|
spec.add_development_dependency 'rake', '~> 12.3'
|
22
24
|
spec.add_development_dependency 'rspec', '~> 3.8'
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'jan/symbol/band/bar'
|
2
|
+
require 'jan/symbol/band/space'
|
3
|
+
|
4
|
+
module Jan
|
5
|
+
class Symbol
|
6
|
+
class Band
|
7
|
+
# @param width [Integer]
|
8
|
+
# @param color [String]
|
9
|
+
def initialize(width, color:)
|
10
|
+
@width = width
|
11
|
+
@color = color
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_reader :width, :color
|
15
|
+
|
16
|
+
# @param other [Jan::Symbol::Band]
|
17
|
+
# @return [boolean]
|
18
|
+
def ==(other)
|
19
|
+
self.width == other.width && self.color == other.color
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Jan
|
2
|
+
class Symbol
|
3
|
+
class BandPattern
|
4
|
+
class CenterGuardPattern < self
|
5
|
+
# @return [Array<Band>]
|
6
|
+
def bands
|
7
|
+
[
|
8
|
+
Band::Space.new(1),
|
9
|
+
Band::Bar.new(1),
|
10
|
+
Band::Space.new(1),
|
11
|
+
Band::Bar.new(1),
|
12
|
+
Band::Space.new(1)
|
13
|
+
]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Jan
|
2
|
+
class Symbol
|
3
|
+
class BandPattern
|
4
|
+
class SymbolCharacter < self
|
5
|
+
# @param name [String]
|
6
|
+
def initialize(name)
|
7
|
+
unless name.match?(/\A[ABC]\d\z/)
|
8
|
+
raise ArgumentError
|
9
|
+
end
|
10
|
+
|
11
|
+
@name = name
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [Array<Jan::Symbol::Band>]
|
15
|
+
def bands
|
16
|
+
set_name, digit = @name.split('')
|
17
|
+
|
18
|
+
case set_name
|
19
|
+
when 'A'
|
20
|
+
stripe_pattern = [Band::Space, Band::Bar, Band::Space, Band::Bar]
|
21
|
+
width_arr = width_array(digit)
|
22
|
+
when 'B'
|
23
|
+
stripe_pattern = [Band::Space, Band::Bar, Band::Space, Band::Bar]
|
24
|
+
width_arr = width_array(digit).reverse
|
25
|
+
when 'C'
|
26
|
+
stripe_pattern = [Band::Bar, Band::Space, Band::Bar, Band::Space]
|
27
|
+
width_arr = width_array(digit)
|
28
|
+
end
|
29
|
+
|
30
|
+
stripe_pattern.zip(width_arr).map { |klass, width|
|
31
|
+
klass.new(width)
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def width_array(digit)
|
38
|
+
case digit
|
39
|
+
when '0' then [3, 2, 1, 1]
|
40
|
+
when '1' then [2, 2, 2, 1]
|
41
|
+
when '2' then [2, 1, 2, 2]
|
42
|
+
when '3' then [1, 4, 1, 1]
|
43
|
+
when '4' then [1, 1, 3, 2]
|
44
|
+
when '5' then [1, 2, 3, 1]
|
45
|
+
when '6' then [1, 1, 1, 4]
|
46
|
+
when '7' then [1, 3, 1, 2]
|
47
|
+
when '8' then [1, 2, 1, 3]
|
48
|
+
when '9' then [3, 1, 1, 2]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'jan/symbol/band_pattern/left_quiet_zone'
|
2
|
+
require 'jan/symbol/band_pattern/right_quiet_zone'
|
3
|
+
require 'jan/symbol/band_pattern/normal_guard_pattern'
|
4
|
+
require 'jan/symbol/band_pattern/center_guard_pattern'
|
5
|
+
require 'jan/symbol/band_pattern/symbol_character'
|
6
|
+
|
7
|
+
module Jan
|
8
|
+
class Symbol
|
9
|
+
class BandPattern
|
10
|
+
# @return [Array<Band>]
|
11
|
+
def bands
|
12
|
+
raise NotImplementedError
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/jan/symbol.rb
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'builder'
|
2
|
+
|
3
|
+
require 'jan/symbol/band_pattern'
|
4
|
+
require 'jan/symbol/band'
|
5
|
+
|
6
|
+
module Jan
|
7
|
+
class Symbol
|
8
|
+
# @param code [String]
|
9
|
+
def initialize(code)
|
10
|
+
@code = code
|
11
|
+
end
|
12
|
+
|
13
|
+
# @return [Array<Jan::Symbol::BandPattern>]
|
14
|
+
def band_patterns
|
15
|
+
[
|
16
|
+
BandPattern::LeftQuietZone.new,
|
17
|
+
BandPattern::NormalGuardPattern.new
|
18
|
+
] + left_symbol_characters + [
|
19
|
+
BandPattern::CenterGuardPattern.new,
|
20
|
+
] + right_symbol_characters + [
|
21
|
+
BandPattern::NormalGuardPattern.new,
|
22
|
+
BandPattern::RightQuietZone.new
|
23
|
+
]
|
24
|
+
end
|
25
|
+
|
26
|
+
# @return [Array<String>]
|
27
|
+
def codepoints
|
28
|
+
additional_digit, *digits = @code.each_char.to_a
|
29
|
+
variable_parity_encodation_sequence(additional_digit).zip(digits).map(&:join)
|
30
|
+
end
|
31
|
+
|
32
|
+
# EXPERIMENTAL
|
33
|
+
#
|
34
|
+
# @return [String]
|
35
|
+
def svg
|
36
|
+
x = 0
|
37
|
+
height = 60
|
38
|
+
|
39
|
+
builder = Builder::XmlMarkup.new(indent: 2)
|
40
|
+
builder.instruct!(:xml, version: '1.0', encoding: 'UTF-8')
|
41
|
+
builder.svg(xmlns: 'http://www.w3.org/2000/svg', width: 113, height: height) do |svg|
|
42
|
+
svg.rect(x: 0, y: 0, width: 113, height: 60, fill: 'white')
|
43
|
+
band_patterns.each do |band_pattern|
|
44
|
+
svg.g(class: band_pattern.class.name.split('::').last) do |group|
|
45
|
+
band_pattern.bands.each do |band|
|
46
|
+
group.rect(x: x, y: 0, width: band.width, height: height, fill: band.color)
|
47
|
+
x += band.width
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
# @return [Array<Jan::Symbol::BandPattern::SymbolCharacter>]
|
57
|
+
def left_symbol_characters
|
58
|
+
codepoints[0..5].map { |codepoint|
|
59
|
+
BandPattern::SymbolCharacter.new(codepoint)
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
63
|
+
# @return [Array<Jan::Symbol::BandPattern::SymbolCharacter>]
|
64
|
+
def right_symbol_characters
|
65
|
+
codepoints[6..11].map { |codepoint|
|
66
|
+
BandPattern::SymbolCharacter.new(codepoint)
|
67
|
+
}
|
68
|
+
end
|
69
|
+
|
70
|
+
# @param digit [String]
|
71
|
+
# @return [Array<String>]
|
72
|
+
def variable_parity_encodation_sequence(digit)
|
73
|
+
case digit
|
74
|
+
when '0'
|
75
|
+
%w[A A A A A A C C C C C C]
|
76
|
+
when '1'
|
77
|
+
%w[A A B A B B C C C C C C]
|
78
|
+
when '2'
|
79
|
+
%w[A A B B A B C C C C C C]
|
80
|
+
when '3'
|
81
|
+
%w[A A B B B A C C C C C C]
|
82
|
+
when '4'
|
83
|
+
%w[A B A A B B C C C C C C]
|
84
|
+
when '5'
|
85
|
+
%w[A B B A A B C C C C C C]
|
86
|
+
when '6'
|
87
|
+
%w[A B B B A A C C C C C C]
|
88
|
+
when '7'
|
89
|
+
%w[A B A B A B C C C C C C]
|
90
|
+
when '8'
|
91
|
+
%w[A B A B B A C C C C C C]
|
92
|
+
when '9'
|
93
|
+
%w[A B B A B A C C C C C C]
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
data/lib/jan/version.rb
CHANGED
data/lib/jan.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Jan::Symbol::Band::Bar do
|
4
|
+
describe 'initializer' do
|
5
|
+
it 'receives width' do
|
6
|
+
bar = described_class.new(1)
|
7
|
+
expect(bar).to be_an_instance_of(described_class)
|
8
|
+
expect(bar.color).to eq 'black'
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'receives width and color' do
|
12
|
+
bar = described_class.new(1, color: 'gray')
|
13
|
+
expect(bar).to be_an_instance_of(described_class)
|
14
|
+
expect(bar.color).to eq 'gray'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Jan::Symbol::Band::Space do
|
4
|
+
describe 'initializer' do
|
5
|
+
it 'receives width' do
|
6
|
+
bar = described_class.new(1)
|
7
|
+
expect(bar).to be_an_instance_of(described_class)
|
8
|
+
expect(bar.color).to eq 'white'
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'receives width and color' do
|
12
|
+
bar = described_class.new(1, color: 'gray')
|
13
|
+
expect(bar).to be_an_instance_of(described_class)
|
14
|
+
expect(bar.color).to eq 'gray'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Jan::Symbol::BandPattern::CenterGuardPattern do
|
4
|
+
let(:center_guard_pattern) { described_class.new }
|
5
|
+
let(:bar) { Jan::Symbol::Band::Bar }
|
6
|
+
let(:space) { Jan::Symbol::Band::Space }
|
7
|
+
|
8
|
+
describe '#bands' do
|
9
|
+
it { expect(center_guard_pattern.bands).to eq [space.new(1), bar.new(1), space.new(1), bar.new(1), space.new(1)] }
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Jan::Symbol::BandPattern::LeftQuietZone do
|
4
|
+
let(:left_quiet_zone) { described_class.new }
|
5
|
+
let(:bar) { Jan::Symbol::Band::Bar }
|
6
|
+
let(:space) { Jan::Symbol::Band::Space }
|
7
|
+
|
8
|
+
describe '#bands' do
|
9
|
+
it { expect(left_quiet_zone.bands).to eq [space.new(11)] }
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Jan::Symbol::BandPattern::NormalGuardPattern do
|
4
|
+
let(:normal_guard_pattern) { described_class.new }
|
5
|
+
let(:bar) { Jan::Symbol::Band::Bar }
|
6
|
+
let(:space) { Jan::Symbol::Band::Space }
|
7
|
+
|
8
|
+
describe '#bands' do
|
9
|
+
it { expect(normal_guard_pattern.bands).to eq [bar.new(1), space.new(1), bar.new(1)] }
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Jan::Symbol::BandPattern::RightQuietZone do
|
4
|
+
let(:right_quiet_zone) { described_class.new }
|
5
|
+
let(:bar) { Jan::Symbol::Band::Bar }
|
6
|
+
let(:space) { Jan::Symbol::Band::Space }
|
7
|
+
|
8
|
+
describe '#bands' do
|
9
|
+
it { expect(right_quiet_zone.bands).to eq [space.new(7)] }
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Jan::Symbol::BandPattern::SymbolCharacter do
|
4
|
+
bar = Jan::Symbol::Band::Bar
|
5
|
+
space = Jan::Symbol::Band::Space
|
6
|
+
|
7
|
+
set_a_mappings = {
|
8
|
+
'A0' => [space.new(3), bar.new(2), space.new(1), bar.new(1)],
|
9
|
+
'A1' => [space.new(2), bar.new(2), space.new(2), bar.new(1)],
|
10
|
+
'A2' => [space.new(2), bar.new(1), space.new(2), bar.new(2)],
|
11
|
+
'A3' => [space.new(1), bar.new(4), space.new(1), bar.new(1)],
|
12
|
+
'A4' => [space.new(1), bar.new(1), space.new(3), bar.new(2)],
|
13
|
+
'A5' => [space.new(1), bar.new(2), space.new(3), bar.new(1)],
|
14
|
+
'A6' => [space.new(1), bar.new(1), space.new(1), bar.new(4)],
|
15
|
+
'A7' => [space.new(1), bar.new(3), space.new(1), bar.new(2)],
|
16
|
+
'A8' => [space.new(1), bar.new(2), space.new(1), bar.new(3)],
|
17
|
+
'A9' => [space.new(3), bar.new(1), space.new(1), bar.new(2)],
|
18
|
+
}
|
19
|
+
|
20
|
+
set_b_mappings = {
|
21
|
+
'B0' => [space.new(1), bar.new(1), space.new(2), bar.new(3)],
|
22
|
+
'B1' => [space.new(1), bar.new(2), space.new(2), bar.new(2)],
|
23
|
+
'B2' => [space.new(2), bar.new(2), space.new(1), bar.new(2)],
|
24
|
+
'B3' => [space.new(1), bar.new(1), space.new(4), bar.new(1)],
|
25
|
+
'B4' => [space.new(2), bar.new(3), space.new(1), bar.new(1)],
|
26
|
+
'B5' => [space.new(1), bar.new(3), space.new(2), bar.new(1)],
|
27
|
+
'B6' => [space.new(4), bar.new(1), space.new(1), bar.new(1)],
|
28
|
+
'B7' => [space.new(2), bar.new(1), space.new(3), bar.new(1)],
|
29
|
+
'B8' => [space.new(3), bar.new(1), space.new(2), bar.new(1)],
|
30
|
+
'B9' => [space.new(2), bar.new(1), space.new(1), bar.new(3)],
|
31
|
+
}
|
32
|
+
|
33
|
+
set_c_mappings = {
|
34
|
+
'C0' => [bar.new(3), space.new(2), bar.new(1), space.new(1)],
|
35
|
+
'C1' => [bar.new(2), space.new(2), bar.new(2), space.new(1)],
|
36
|
+
'C2' => [bar.new(2), space.new(1), bar.new(2), space.new(2)],
|
37
|
+
'C3' => [bar.new(1), space.new(4), bar.new(1), space.new(1)],
|
38
|
+
'C4' => [bar.new(1), space.new(1), bar.new(3), space.new(2)],
|
39
|
+
'C5' => [bar.new(1), space.new(2), bar.new(3), space.new(1)],
|
40
|
+
'C6' => [bar.new(1), space.new(1), bar.new(1), space.new(4)],
|
41
|
+
'C7' => [bar.new(1), space.new(3), bar.new(1), space.new(2)],
|
42
|
+
'C8' => [bar.new(1), space.new(2), bar.new(1), space.new(3)],
|
43
|
+
'C9' => [bar.new(3), space.new(1), bar.new(1), space.new(2)],
|
44
|
+
}
|
45
|
+
|
46
|
+
|
47
|
+
describe 'Set A' do
|
48
|
+
set_a_mappings.each do |name, valid_pattern|
|
49
|
+
it "has valid pattern in #{name}" do
|
50
|
+
bands = described_class.new(name).bands
|
51
|
+
|
52
|
+
expect(bands).to eq valid_pattern
|
53
|
+
|
54
|
+
# Width of symbol character must be 7X
|
55
|
+
expect(bands.sum(&:width)).to eq 7
|
56
|
+
|
57
|
+
# Set A symbol character has odd parity
|
58
|
+
expect(bands.grep(Jan::Symbol::Band::Bar).sum(&:width)).to be_odd
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe 'Set B' do
|
64
|
+
set_b_mappings.each do |name, valid_pattern|
|
65
|
+
it "has valid pattern in #{name}" do
|
66
|
+
bands = described_class.new(name).bands
|
67
|
+
|
68
|
+
expect(bands).to eq valid_pattern
|
69
|
+
|
70
|
+
# Width of symbol character must be 7X
|
71
|
+
expect(bands.sum(&:width)).to eq 7
|
72
|
+
|
73
|
+
# Set A symbol character has odd parity
|
74
|
+
expect(bands.grep(Jan::Symbol::Band::Bar).sum(&:width)).to be_even
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe 'Set C' do
|
80
|
+
set_c_mappings.each do |name, valid_pattern|
|
81
|
+
it "has valid pattern in #{name}" do
|
82
|
+
bands = described_class.new(name).bands
|
83
|
+
|
84
|
+
expect(bands).to eq valid_pattern
|
85
|
+
|
86
|
+
# Width of symbol character must be 7X
|
87
|
+
expect(bands.sum(&:width)).to eq 7
|
88
|
+
|
89
|
+
# Set A symbol character has odd parity
|
90
|
+
expect(bands.grep(Jan::Symbol::Band::Bar).sum(&:width)).to be_even
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Jan::Symbol::Band do
|
4
|
+
describe 'initializer' do
|
5
|
+
it 'receives width and color' do
|
6
|
+
bar = described_class.new(1, color: 'black')
|
7
|
+
expect(bar).to be_an_instance_of(described_class)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'raises error if color missing' do
|
11
|
+
expect{ described_class.new(1) }.to raise_error ArgumentError
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'equality' do
|
16
|
+
context 'same width, same color' do
|
17
|
+
it 'equals' do
|
18
|
+
bar1 = described_class.new(1, color: 'black')
|
19
|
+
bar2 = described_class.new(1, color: 'black')
|
20
|
+
expect(bar1).to eq bar2
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'same width, different color' do
|
25
|
+
it 'does not equal' do
|
26
|
+
bar1 = described_class.new(1, color: 'black')
|
27
|
+
bar2 = described_class.new(1, color: 'white')
|
28
|
+
expect(bar1).not_to eq bar2
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'different width, same color' do
|
33
|
+
it 'does not equal' do
|
34
|
+
bar1 = described_class.new(1, color: 'black')
|
35
|
+
bar2 = described_class.new(2, color: 'black')
|
36
|
+
expect(bar1).not_to eq bar2
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'different width, different color' do
|
41
|
+
it 'does not equal' do
|
42
|
+
bar1 = described_class.new(1, color: 'black')
|
43
|
+
bar2 = described_class.new(2, color: 'white')
|
44
|
+
expect(bar1).not_to eq bar2
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Jan::Symbol do
|
4
|
+
let(:symbol) { described_class.new('4901085188033') }
|
5
|
+
|
6
|
+
describe 'initializer' do
|
7
|
+
it { expect(symbol).to be_an_instance_of Jan::Symbol }
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#band_patterns' do
|
11
|
+
it { expect(symbol.band_patterns).to be_an_instance_of Array }
|
12
|
+
it { expect(symbol.band_patterns).to all( be_an Jan::Symbol::BandPattern) }
|
13
|
+
|
14
|
+
it 'has correct format' do
|
15
|
+
patterns = symbol.band_patterns
|
16
|
+
|
17
|
+
expect(patterns[0]).to be_an_instance_of Jan::Symbol::BandPattern::LeftQuietZone
|
18
|
+
expect(patterns[1]).to be_an_instance_of Jan::Symbol::BandPattern::NormalGuardPattern
|
19
|
+
expect(patterns[2..7]).to all( be_an Jan::Symbol::BandPattern::SymbolCharacter )
|
20
|
+
expect(patterns[8]).to be_an_instance_of Jan::Symbol::BandPattern::CenterGuardPattern
|
21
|
+
expect(patterns[9..14]).to all( be_an Jan::Symbol::BandPattern::SymbolCharacter )
|
22
|
+
expect(patterns[15]).to be_an_instance_of Jan::Symbol::BandPattern::NormalGuardPattern
|
23
|
+
expect(patterns[16]).to be_an_instance_of Jan::Symbol::BandPattern::RightQuietZone
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#codepoints' do
|
28
|
+
mappings = {
|
29
|
+
'0123456789012' => %w[A1 A2 A3 A4 A5 A6 C7 C8 C9 C0 C1 C2],
|
30
|
+
'1123456789012' => %w[A1 A2 B3 A4 B5 B6 C7 C8 C9 C0 C1 C2],
|
31
|
+
'2123456789012' => %w[A1 A2 B3 B4 A5 B6 C7 C8 C9 C0 C1 C2],
|
32
|
+
'3123456789012' => %w[A1 A2 B3 B4 B5 A6 C7 C8 C9 C0 C1 C2],
|
33
|
+
'4123456789012' => %w[A1 B2 A3 A4 B5 B6 C7 C8 C9 C0 C1 C2],
|
34
|
+
'5123456789012' => %w[A1 B2 B3 A4 A5 B6 C7 C8 C9 C0 C1 C2],
|
35
|
+
'6123456789012' => %w[A1 B2 B3 B4 A5 A6 C7 C8 C9 C0 C1 C2],
|
36
|
+
'7123456789012' => %w[A1 B2 A3 B4 A5 B6 C7 C8 C9 C0 C1 C2],
|
37
|
+
'8123456789012' => %w[A1 B2 A3 B4 B5 A6 C7 C8 C9 C0 C1 C2],
|
38
|
+
'9123456789012' => %w[A1 B2 B3 A4 B5 A6 C7 C8 C9 C0 C1 C2],
|
39
|
+
}
|
40
|
+
|
41
|
+
mappings.each do |code, answer|
|
42
|
+
it 'returns codepoints with correct set' do
|
43
|
+
symbol = described_class.new(code)
|
44
|
+
expect(symbol.codepoints).to eq answer
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '#svg' do
|
50
|
+
it 'returns SVG string'
|
51
|
+
end
|
52
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OSA Shunsuke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-04-
|
11
|
+
date: 2019-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: builder
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -71,10 +85,29 @@ files:
|
|
71
85
|
- lib/jan/code.rb
|
72
86
|
- lib/jan/code_body.rb
|
73
87
|
- lib/jan/random.rb
|
88
|
+
- lib/jan/symbol.rb
|
89
|
+
- lib/jan/symbol/band.rb
|
90
|
+
- lib/jan/symbol/band/bar.rb
|
91
|
+
- lib/jan/symbol/band/space.rb
|
92
|
+
- lib/jan/symbol/band_pattern.rb
|
93
|
+
- lib/jan/symbol/band_pattern/center_guard_pattern.rb
|
94
|
+
- lib/jan/symbol/band_pattern/left_quiet_zone.rb
|
95
|
+
- lib/jan/symbol/band_pattern/normal_guard_pattern.rb
|
96
|
+
- lib/jan/symbol/band_pattern/right_quiet_zone.rb
|
97
|
+
- lib/jan/symbol/band_pattern/symbol_character.rb
|
74
98
|
- lib/jan/version.rb
|
75
99
|
- spec/jan/code_body_spec.rb
|
76
100
|
- spec/jan/code_spec.rb
|
77
101
|
- spec/jan/random_spec.rb
|
102
|
+
- spec/jan/symbol/band/bar_spec.rb
|
103
|
+
- spec/jan/symbol/band/space_spec.rb
|
104
|
+
- spec/jan/symbol/band_pattern/center_guard_pattern_spec.rb
|
105
|
+
- spec/jan/symbol/band_pattern/left_quiet_zone_spec.rb
|
106
|
+
- spec/jan/symbol/band_pattern/normal_guard_pattern_spec.rb
|
107
|
+
- spec/jan/symbol/band_pattern/right_quiet_zone_spec.rb
|
108
|
+
- spec/jan/symbol/band_pattern/symbol_character_spec.rb
|
109
|
+
- spec/jan/symbol/band_spec.rb
|
110
|
+
- spec/jan/symbol_spec.rb
|
78
111
|
- spec/spec_helper.rb
|
79
112
|
homepage: https://github.com/s-osa/jan
|
80
113
|
licenses:
|
@@ -103,4 +136,13 @@ test_files:
|
|
103
136
|
- spec/jan/code_body_spec.rb
|
104
137
|
- spec/jan/code_spec.rb
|
105
138
|
- spec/jan/random_spec.rb
|
139
|
+
- spec/jan/symbol/band/bar_spec.rb
|
140
|
+
- spec/jan/symbol/band/space_spec.rb
|
141
|
+
- spec/jan/symbol/band_pattern/center_guard_pattern_spec.rb
|
142
|
+
- spec/jan/symbol/band_pattern/left_quiet_zone_spec.rb
|
143
|
+
- spec/jan/symbol/band_pattern/normal_guard_pattern_spec.rb
|
144
|
+
- spec/jan/symbol/band_pattern/right_quiet_zone_spec.rb
|
145
|
+
- spec/jan/symbol/band_pattern/symbol_character_spec.rb
|
146
|
+
- spec/jan/symbol/band_spec.rb
|
147
|
+
- spec/jan/symbol_spec.rb
|
106
148
|
- spec/spec_helper.rb
|