zebra-epl 0.0.2 → 0.0.5
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.
- data/lib/zebra/epl.rb +3 -0
- data/lib/zebra/epl/character_set.rb +45 -0
- data/lib/zebra/epl/country_code.rb +36 -0
- data/lib/zebra/epl/label.rb +6 -1
- data/lib/zebra/epl/language.rb +76 -0
- data/lib/zebra/epl/version.rb +1 -1
- data/lib/zebra/print_job.rb +9 -2
- data/spec/zebra/epl/character_set_spec.rb +100 -0
- data/spec/zebra/epl/label_spec.rb +18 -0
- data/spec/zebra/print_job_spec.rb +0 -6
- metadata +9 -4
data/lib/zebra/epl.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
require "cups"
|
2
2
|
require "tempfile"
|
3
3
|
require "zebra/epl/version"
|
4
|
+
require "zebra/epl/language"
|
5
|
+
require "zebra/epl/country_code"
|
6
|
+
require "zebra/epl/character_set"
|
4
7
|
require "zebra/epl/rotation"
|
5
8
|
require "zebra/epl/multipliers"
|
6
9
|
require "zebra/epl/print_mode"
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Zebra
|
3
|
+
module Epl
|
4
|
+
class CharacterSet
|
5
|
+
class InvalidNumberOfDataBits < StandardError; end
|
6
|
+
class CountryCodeNotApplicableForNumberOfDataBits < StandardError; end
|
7
|
+
class MissingAttributeError < StandardError
|
8
|
+
def initialize(attr)
|
9
|
+
super("Can't set character set if the #{attr} is not given")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
attr_reader :number_of_data_bits, :language, :country_code
|
14
|
+
|
15
|
+
def initialize(options = {})
|
16
|
+
options.each_pair { |attribute, value| self.__send__ "#{attribute}=", value }
|
17
|
+
end
|
18
|
+
|
19
|
+
def number_of_data_bits=(nodb)
|
20
|
+
raise InvalidNumberOfDataBits unless [7, 8, nil].include?(nodb)
|
21
|
+
@number_of_data_bits = nodb
|
22
|
+
end
|
23
|
+
|
24
|
+
def language=(l)
|
25
|
+
Language.validate_language(l) unless l.nil?
|
26
|
+
@language = l
|
27
|
+
end
|
28
|
+
|
29
|
+
def country_code=(code)
|
30
|
+
CountryCode.validate_country_code(code) unless code.nil?
|
31
|
+
@country_code = code
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_epl
|
35
|
+
raise MissingAttributeError.new("language") if language.nil?
|
36
|
+
raise MissingAttributeError.new("number of data bits") if number_of_data_bits.nil?
|
37
|
+
raise MissingAttributeError.new("country code") if number_of_data_bits == 8 && country_code.nil?
|
38
|
+
raise CountryCodeNotApplicableForNumberOfDataBits if number_of_data_bits == 7 && !country_code.nil?
|
39
|
+
Language.validate_language_for_number_of_data_bits language, number_of_data_bits
|
40
|
+
|
41
|
+
["I#{number_of_data_bits}", language, country_code].compact.join(",")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Zebra
|
3
|
+
module Epl
|
4
|
+
class CountryCode
|
5
|
+
class InvalidCountryCodeError < StandardError; end
|
6
|
+
|
7
|
+
BELGIUM = "032"
|
8
|
+
CANADA = "002"
|
9
|
+
DENMARK = "045"
|
10
|
+
FINLAND = "358"
|
11
|
+
FRANCE = "033"
|
12
|
+
GERMANY = "049"
|
13
|
+
NETHERLANDS = "031"
|
14
|
+
ITALY = "039"
|
15
|
+
LATIN_AMERICA = "003"
|
16
|
+
NORWAY = "047"
|
17
|
+
PORTUGAL = "351"
|
18
|
+
SOUTH_AFRICA = "027"
|
19
|
+
SPAIN = "034"
|
20
|
+
SWEDEN = "046"
|
21
|
+
SWITZERLAND = "041"
|
22
|
+
UK = "044"
|
23
|
+
USA = "001"
|
24
|
+
|
25
|
+
def self.valid_country_code?(code)
|
26
|
+
[BELGIUM, CANADA, DENMARK, FINLAND, FRANCE, GERMANY, NETHERLANDS,
|
27
|
+
ITALY, LATIN_AMERICA, NORWAY, PORTUGAL, SOUTH_AFRICA, SPAIN, SWEDEN, SWITZERLAND,
|
28
|
+
UK, USA].include?(code)
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.validate_country_code(code)
|
32
|
+
raise InvalidCountryCodeError unless valid_country_code?(code)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/zebra/epl/label.rb
CHANGED
@@ -7,7 +7,7 @@ module Zebra
|
|
7
7
|
class InvalidPrintDensityError < StandardError; end
|
8
8
|
class PrintSpeedNotInformedError < StandardError; end
|
9
9
|
|
10
|
-
attr_reader :elements
|
10
|
+
attr_reader :elements, :tempfile
|
11
11
|
attr_accessor :width, :length, :gap, :print_speed, :print_density
|
12
12
|
|
13
13
|
def initialize(options = {})
|
@@ -63,9 +63,14 @@ module Zebra
|
|
63
63
|
tempfile = Tempfile.new "zebra_label"
|
64
64
|
dump_contents tempfile
|
65
65
|
tempfile.rewind
|
66
|
+
@tempfile = tempfile
|
66
67
|
tempfile
|
67
68
|
end
|
68
69
|
|
70
|
+
def persisted?
|
71
|
+
!!self.tempfile
|
72
|
+
end
|
73
|
+
|
69
74
|
private
|
70
75
|
|
71
76
|
def check_required_configurations
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Zebra
|
3
|
+
module Epl
|
4
|
+
class Language
|
5
|
+
class InvalidLanguageError < StandardError; end
|
6
|
+
class InvalidLanguageForNumberOfDataBitsError < StandardError; end
|
7
|
+
|
8
|
+
# 8 bits languages
|
9
|
+
ENGLISH_US = "0"
|
10
|
+
LATIN_1 = "1"
|
11
|
+
LATIN_2 = "2"
|
12
|
+
PORTUGUESE = "3"
|
13
|
+
FRENCH_CANADIAN = "4"
|
14
|
+
NORDIC = "5"
|
15
|
+
TURKISH = "6"
|
16
|
+
ICELANDIC = "7"
|
17
|
+
HEBREW = "8"
|
18
|
+
CYRILLIC = "9"
|
19
|
+
CYRILLIC_CIS_1 = "10"
|
20
|
+
GREEK = "11"
|
21
|
+
GREEK_1 = "12"
|
22
|
+
GREEK_2 = "13"
|
23
|
+
LATIN_1_WINDOWS = "A"
|
24
|
+
LATIN_2_WINDOWS = "B"
|
25
|
+
CYRILLIC_WINDOWS = "C"
|
26
|
+
GREEK_WINDOWS = "D"
|
27
|
+
TURKISH_WINDOWS = "E"
|
28
|
+
HEBREW_WINDOWS = "F"
|
29
|
+
|
30
|
+
# 7 bits languages
|
31
|
+
USA = "0"
|
32
|
+
BRITISH = "1"
|
33
|
+
GERMAN = "2"
|
34
|
+
FRENCH = "3"
|
35
|
+
DANISH = "4"
|
36
|
+
ITALIAN = "5"
|
37
|
+
SPANISH = "6"
|
38
|
+
SWEDISH = "7"
|
39
|
+
SWISS = "8"
|
40
|
+
|
41
|
+
def self.valid_language?(language)
|
42
|
+
("0".."13").include?(language) || ("A".."F").include?(language)
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.validate_language(language)
|
46
|
+
raise InvalidLanguageError unless valid_language?(language)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.validate_language_for_number_of_data_bits(language, number_of_data_bits)
|
50
|
+
if number_of_data_bits == 8
|
51
|
+
validate_8_data_bits_language language
|
52
|
+
elsif number_of_data_bits == 7
|
53
|
+
validate_7_data_bits_language language
|
54
|
+
else
|
55
|
+
raise ArgumentError.new("Unknown number of data bits")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def self.validate_8_data_bits_language(language)
|
62
|
+
raise InvalidLanguageForNumberOfDataBitsError unless [ENGLISH_US,
|
63
|
+
LATIN_1, LATIN_2, PORTUGUESE, FRENCH_CANADIAN, NORDIC,
|
64
|
+
TURKISH, ICELANDIC, HEBREW, CYRILLIC, CYRILLIC_CIS_1, GREEK,
|
65
|
+
GREEK_1, GREEK_2, LATIN_1_WINDOWS, LATIN_2_WINDOWS, CYRILLIC_WINDOWS,
|
66
|
+
GREEK_WINDOWS, TURKISH_WINDOWS, HEBREW_WINDOWS].include?(language)
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.validate_7_data_bits_language(language)
|
70
|
+
raise InvalidLanguageForNumberOfDataBitsError unless [USA, BRITISH,
|
71
|
+
GERMAN, FRENCH, DANISH, ITALIAN, SPANISH, SWEDISH, SWISS].include?(language)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
data/lib/zebra/epl/version.rb
CHANGED
data/lib/zebra/print_job.rb
CHANGED
@@ -18,10 +18,9 @@ module Zebra
|
|
18
18
|
tempfile = label.persist
|
19
19
|
|
20
20
|
begin
|
21
|
-
|
21
|
+
send_to_printer tempfile.path
|
22
22
|
ensure
|
23
23
|
tempfile.close
|
24
|
-
tempfile.unlink
|
25
24
|
end
|
26
25
|
end
|
27
26
|
|
@@ -31,5 +30,13 @@ module Zebra
|
|
31
30
|
existent_printers = Cups.show_destinations
|
32
31
|
raise UnknownPrinter.new(printer) unless existent_printers.include?(printer)
|
33
32
|
end
|
33
|
+
|
34
|
+
def send_to_printer(path)
|
35
|
+
if RUBY_PLATFORM =~ /darwin/
|
36
|
+
`lpr -P #{@printer} -o raw #{path}`
|
37
|
+
else
|
38
|
+
`lp -d #{@printer} -o raw #{path}`
|
39
|
+
end
|
40
|
+
end
|
34
41
|
end
|
35
42
|
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Zebra::Epl::CharacterSet do
|
4
|
+
it "can be initialized with the number of data bits" do
|
5
|
+
character_set = described_class.new :number_of_data_bits => 8
|
6
|
+
character_set.number_of_data_bits.should == 8
|
7
|
+
end
|
8
|
+
|
9
|
+
it "raises an error when receiving an invalid number of data bits" do
|
10
|
+
expect {
|
11
|
+
described_class.new :number_of_data_bits => 9
|
12
|
+
}.to raise_error(Zebra::Epl::CharacterSet::InvalidNumberOfDataBits)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "can be initialized with the language" do
|
16
|
+
character_set = described_class.new :language => Zebra::Epl::Language::PORTUGUESE
|
17
|
+
character_set.language.should == Zebra::Epl::Language::PORTUGUESE
|
18
|
+
end
|
19
|
+
|
20
|
+
it "raises an error with an invalid language" do
|
21
|
+
expect {
|
22
|
+
described_class.new :language => "G"
|
23
|
+
}.to raise_error(Zebra::Epl::Language::InvalidLanguageError)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "can be initialized with the country code" do
|
27
|
+
character_set = described_class.new :country_code => Zebra::Epl::CountryCode::LATIN_AMERICA
|
28
|
+
character_set.country_code.should == Zebra::Epl::CountryCode::LATIN_AMERICA
|
29
|
+
end
|
30
|
+
|
31
|
+
it "raises an error with an invalid country code" do
|
32
|
+
expect {
|
33
|
+
described_class.new :country_code => "999"
|
34
|
+
}.to raise_error(Zebra::Epl::CountryCode::InvalidCountryCodeError)
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "#to_epl" do
|
38
|
+
let(:valid_attributes) { {
|
39
|
+
:number_of_data_bits => 8,
|
40
|
+
:language => Zebra::Epl::Language::PORTUGUESE,
|
41
|
+
:country_code => Zebra::Epl::CountryCode::LATIN_AMERICA
|
42
|
+
} }
|
43
|
+
let(:character_set) { described_class.new valid_attributes }
|
44
|
+
let(:tokens) { character_set.to_epl.split(",") }
|
45
|
+
|
46
|
+
it "raises an error if the number of data bits was not informed" do
|
47
|
+
character_set = described_class.new valid_attributes.merge :number_of_data_bits => nil
|
48
|
+
expect {
|
49
|
+
character_set.to_epl
|
50
|
+
}.to raise_error(Zebra::Epl::CharacterSet::MissingAttributeError, "Can't set character set if the number of data bits is not given")
|
51
|
+
end
|
52
|
+
|
53
|
+
it "raises an error if the language was not informed" do
|
54
|
+
character_set = described_class.new valid_attributes.merge :language => nil
|
55
|
+
expect {
|
56
|
+
character_set.to_epl
|
57
|
+
}.to raise_error(Zebra::Epl::CharacterSet::MissingAttributeError, "Can't set character set if the language is not given")
|
58
|
+
end
|
59
|
+
|
60
|
+
it "raises an error if the country code was not informed and the number of bits is 8" do
|
61
|
+
character_set = described_class.new valid_attributes.merge :country_code => nil
|
62
|
+
expect {
|
63
|
+
character_set.to_epl
|
64
|
+
}.to raise_error(Zebra::Epl::CharacterSet::MissingAttributeError, "Can't set character set if the country code is not given")
|
65
|
+
end
|
66
|
+
|
67
|
+
it "raises an error if the country code was informed and the number of bits is 7" do
|
68
|
+
character_set = described_class.new valid_attributes.merge :country_code => Zebra::Epl::CountryCode::LATIN_AMERICA, :number_of_data_bits => 7
|
69
|
+
expect {
|
70
|
+
character_set.to_epl
|
71
|
+
}.to raise_error(Zebra::Epl::CharacterSet::CountryCodeNotApplicableForNumberOfDataBits)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "does not raise an error if the country code was not informed and the number of data bits is 7" do
|
75
|
+
character_set = described_class.new :number_of_data_bits => 7, :language => Zebra::Epl::Language::USA, :country_code => nil
|
76
|
+
end
|
77
|
+
|
78
|
+
it "raises an error if the language is not supported by the given number of data bits" do
|
79
|
+
expect {
|
80
|
+
described_class.new(:number_of_data_bits => 7, :language => Zebra::Epl::Language::LATIN_1_WINDOWS).to_epl
|
81
|
+
}.to raise_error(Zebra::Epl::Language::InvalidLanguageForNumberOfDataBitsError)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "begins with the command 'I'" do
|
85
|
+
character_set.to_epl.should =~ /\AI/
|
86
|
+
end
|
87
|
+
|
88
|
+
it "contains the number of data bits" do
|
89
|
+
tokens[0].match(/I(\d)/)[1].should == "8"
|
90
|
+
end
|
91
|
+
|
92
|
+
it "contains the language" do
|
93
|
+
tokens[1].should == Zebra::Epl::Language::PORTUGUESE
|
94
|
+
end
|
95
|
+
|
96
|
+
it "contains the country code" do
|
97
|
+
tokens[2].should == Zebra::Epl::CountryCode::LATIN_AMERICA
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -111,5 +111,23 @@ describe Zebra::Epl::Label do
|
|
111
111
|
tempfile.should_receive(:rewind)
|
112
112
|
label.persist
|
113
113
|
end
|
114
|
+
|
115
|
+
it "sets the `tempfile` attribute" do
|
116
|
+
label.persist
|
117
|
+
label.tempfile.should == tempfile
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe "#persisted?" do
|
122
|
+
it "returns false if the `tempfile` attribute is nil" do
|
123
|
+
label = described_class.new :print_speed => 2
|
124
|
+
label.should_not be_persisted
|
125
|
+
end
|
126
|
+
|
127
|
+
it "returns true if the `tempfile` attribute is not nil" do
|
128
|
+
label = described_class.new :print_speed => 2
|
129
|
+
label.instance_variable_set(:@tempfile, stub)
|
130
|
+
label.should be_persisted
|
131
|
+
end
|
114
132
|
end
|
115
133
|
end
|
@@ -32,11 +32,5 @@ describe Zebra::PrintJob do
|
|
32
32
|
print_job.should_receive(:`).with("lpr -P Zebra -o raw /foo/bar")
|
33
33
|
print_job.print label
|
34
34
|
end
|
35
|
-
|
36
|
-
it "unlinks the file" do
|
37
|
-
tempfile.should_receive(:close)
|
38
|
-
tempfile.should_receive(:unlink)
|
39
|
-
print_job.print label
|
40
|
-
end
|
41
35
|
end
|
42
36
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zebra-epl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-01-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: cups
|
@@ -125,8 +125,11 @@ files:
|
|
125
125
|
- lib/zebra/epl/barcode.rb
|
126
126
|
- lib/zebra/epl/barcode_type.rb
|
127
127
|
- lib/zebra/epl/box.rb
|
128
|
+
- lib/zebra/epl/character_set.rb
|
129
|
+
- lib/zebra/epl/country_code.rb
|
128
130
|
- lib/zebra/epl/font.rb
|
129
131
|
- lib/zebra/epl/label.rb
|
132
|
+
- lib/zebra/epl/language.rb
|
130
133
|
- lib/zebra/epl/multipliers.rb
|
131
134
|
- lib/zebra/epl/print_mode.rb
|
132
135
|
- lib/zebra/epl/printable.rb
|
@@ -137,6 +140,7 @@ files:
|
|
137
140
|
- spec/spec_helper.rb
|
138
141
|
- spec/zebra/epl/barcode_spec.rb
|
139
142
|
- spec/zebra/epl/box_spec.rb
|
143
|
+
- spec/zebra/epl/character_set_spec.rb
|
140
144
|
- spec/zebra/epl/epl_spec.rb
|
141
145
|
- spec/zebra/epl/label_spec.rb
|
142
146
|
- spec/zebra/epl/text_spec.rb
|
@@ -157,7 +161,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
157
161
|
segments:
|
158
162
|
- 0
|
159
163
|
version: '0'
|
160
|
-
hash:
|
164
|
+
hash: -988489516192615375
|
161
165
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
166
|
none: false
|
163
167
|
requirements:
|
@@ -166,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
170
|
segments:
|
167
171
|
- 0
|
168
172
|
version: '0'
|
169
|
-
hash:
|
173
|
+
hash: -988489516192615375
|
170
174
|
requirements: []
|
171
175
|
rubyforge_project:
|
172
176
|
rubygems_version: 1.8.24
|
@@ -178,6 +182,7 @@ test_files:
|
|
178
182
|
- spec/spec_helper.rb
|
179
183
|
- spec/zebra/epl/barcode_spec.rb
|
180
184
|
- spec/zebra/epl/box_spec.rb
|
185
|
+
- spec/zebra/epl/character_set_spec.rb
|
181
186
|
- spec/zebra/epl/epl_spec.rb
|
182
187
|
- spec/zebra/epl/label_spec.rb
|
183
188
|
- spec/zebra/epl/text_spec.rb
|