labrat 1.2.2 → 1.2.3
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.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +27 -0
- data/.github/workflows/ruby.yml +38 -0
- data/.rubocop.yml +177 -2
- data/Gemfile +11 -5
- data/Gemfile.lock +57 -46
- data/README.org +26 -21
- data/Rakefile +1 -1
- data/bin/labrat +0 -1
- data/labrat.gemspec +5 -14
- data/lib/config_files/labeldb.yml +17 -0
- data/lib/labrat/arg_parser.rb +202 -96
- data/lib/labrat/config.rb +32 -12
- data/lib/labrat/hash.rb +2 -8
- data/lib/labrat/label.rb +28 -12
- data/lib/labrat/options.rb +46 -20
- data/lib/labrat/read_files.rb +3 -2
- data/lib/labrat/version.rb +1 -1
- metadata +17 -129
data/lib/labrat/label.rb
CHANGED
@@ -40,13 +40,22 @@ module Labrat
|
|
40
40
|
bpm = ops.right_page_margin
|
41
41
|
end
|
42
42
|
out_file = File.expand_path(ops.out_file)
|
43
|
-
Prawn::Document.generate(
|
44
|
-
|
45
|
-
|
46
|
-
|
43
|
+
Prawn::Document.generate(
|
44
|
+
out_file,
|
45
|
+
page_size: [ops.page_width, ops.page_height],
|
46
|
+
left_margin: lpm,
|
47
|
+
right_margin: rpm,
|
48
|
+
top_margin: tpm,
|
49
|
+
bottom_margin: bpm,
|
50
|
+
page_layout: layout,
|
51
|
+
) do |pdf|
|
47
52
|
# Define a grid with each grid box to be used for a single label.
|
48
|
-
pdf.define_grid(
|
49
|
-
|
53
|
+
pdf.define_grid(
|
54
|
+
rows: ops.rows,
|
55
|
+
columns: ops.columns,
|
56
|
+
row_gutter: ops.row_gap,
|
57
|
+
column_gutter: ops.column_gap,
|
58
|
+
)
|
50
59
|
if ops.verbose
|
51
60
|
warn "Page dimensions:"
|
52
61
|
warn " [pg_wd, pg_ht] = [#{ops.page_width.round(2)}pt,#{ops.page_height.round(2)}pt]"
|
@@ -62,7 +71,7 @@ module Labrat
|
|
62
71
|
if ops.label != ops.raw_label
|
63
72
|
lab_text += "\n(#{ops.label})"
|
64
73
|
end
|
65
|
-
self.texts = (1..(ops.rows * ops.columns)).map {|n| "#{n}\n#{lab_text}"}
|
74
|
+
self.texts = (1..(ops.rows * ops.columns)).map { |n| "#{n}\n#{lab_text}" }
|
66
75
|
ops.font_name = 'Helvetica'
|
67
76
|
ops.font_style = 'bold'
|
68
77
|
ops.font_size = 11
|
@@ -82,9 +91,15 @@ module Labrat
|
|
82
91
|
box_x = ops.left_pad + ops.delta_x
|
83
92
|
box_y = ops.bottom_pad + box_ht + ops.delta_y
|
84
93
|
pdf.font ops.font_name, style: ops.font_style, size: ops.font_size.to_f
|
85
|
-
pdf.text_box(
|
86
|
-
|
87
|
-
|
94
|
+
pdf.text_box(
|
95
|
+
text,
|
96
|
+
width: box_wd,
|
97
|
+
height: box_ht,
|
98
|
+
align: ops.h_align,
|
99
|
+
valign: ops.v_align,
|
100
|
+
overflow: :truncate,
|
101
|
+
at: [box_x, box_y],
|
102
|
+
)
|
88
103
|
if ops.verbose && !lab_dims_reported
|
89
104
|
warn "Label text box dimensions:"
|
90
105
|
warn " [box_wd, box_ht] = [#{box_wd.round(2)}pt,#{box_ht.round(2)}pt]"
|
@@ -94,7 +109,7 @@ module Labrat
|
|
94
109
|
lab_dims_reported = true
|
95
110
|
end
|
96
111
|
if ops.verbose
|
97
|
-
warn "Label
|
112
|
+
warn "Label ##{(k % lpp) + 1} on page #{page_num(k)} at row #{row + 1}, column #{col + 1}:"
|
98
113
|
warn '-------------------'
|
99
114
|
warn text
|
100
115
|
warn '-------------------'
|
@@ -149,8 +164,9 @@ module Labrat
|
|
149
164
|
# Should we emit a new page at this point?
|
150
165
|
def needs_new_page?(k, last_k)
|
151
166
|
return false if k == last_k
|
167
|
+
|
152
168
|
r, c = row_col(k + 1)
|
153
|
-
|
169
|
+
r + 1 == ops.rows && c + 1 == ops.columns
|
154
170
|
end
|
155
171
|
|
156
172
|
# Would we just be printing blank labels?
|
data/lib/labrat/options.rb
CHANGED
@@ -6,18 +6,44 @@ module Labrat
|
|
6
6
|
# and perhaps environment. An Options instance can be handed off to the
|
7
7
|
# label-printing objects to inform its formatting, printing, etc.
|
8
8
|
class Options
|
9
|
-
attr_accessor :label,
|
10
|
-
:
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:
|
14
|
-
:
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
19
|
-
:
|
20
|
-
:
|
9
|
+
attr_accessor :label,
|
10
|
+
:raw_label,
|
11
|
+
:page_width,
|
12
|
+
:page_height,
|
13
|
+
:left_page_margin,
|
14
|
+
:right_page_margin,
|
15
|
+
:top_page_margin,
|
16
|
+
:bottom_page_margin,
|
17
|
+
:rows,
|
18
|
+
:columns,
|
19
|
+
:row_gap,
|
20
|
+
:column_gap,
|
21
|
+
:landscape,
|
22
|
+
:start_label,
|
23
|
+
:grid,
|
24
|
+
:h_align,
|
25
|
+
:v_align,
|
26
|
+
:left_pad,
|
27
|
+
:right_pad,
|
28
|
+
:top_pad,
|
29
|
+
:bottom_pad,
|
30
|
+
:delta_x,
|
31
|
+
:delta_y,
|
32
|
+
:font_name,
|
33
|
+
:font_style,
|
34
|
+
:font_size,
|
35
|
+
:in_file,
|
36
|
+
:nl_sep,
|
37
|
+
:label_sep,
|
38
|
+
:copies,
|
39
|
+
:printer,
|
40
|
+
:out_file,
|
41
|
+
:print_command,
|
42
|
+
:view_command,
|
43
|
+
:view,
|
44
|
+
:template,
|
45
|
+
:verbose,
|
46
|
+
:msg
|
21
47
|
|
22
48
|
# Initialize with an optional hash of default values for the attributes.
|
23
49
|
def initialize(**init)
|
@@ -79,9 +105,9 @@ module Labrat
|
|
79
105
|
|
80
106
|
# Command-line
|
81
107
|
if verbose
|
82
|
-
warn "
|
108
|
+
warn "\nCommand-line:"
|
83
109
|
args.each do |arg|
|
84
|
-
warn arg
|
110
|
+
warn arg
|
85
111
|
end
|
86
112
|
warn ""
|
87
113
|
end
|
@@ -98,27 +124,27 @@ module Labrat
|
|
98
124
|
# Allow hash-like assignment to attributes. This allows an Options object
|
99
125
|
# to be used, for example, in the OptionParser#parse :into parameter.
|
100
126
|
def []=(att, val)
|
101
|
-
att = att.to_s.
|
102
|
-
send("#{att}=", val)
|
127
|
+
att = att.to_s.tr('-', '_')
|
128
|
+
send(:"#{att}=", val)
|
103
129
|
end
|
104
130
|
|
105
131
|
# Allow hash-like access to attributes. This allows an Options object
|
106
132
|
# to be used, for example, in the OptionParser#parse :into parameter.
|
107
133
|
def [](att)
|
108
|
-
att = att.to_s.
|
134
|
+
att = att.to_s.tr('-', '_')
|
109
135
|
send(att.to_s)
|
110
136
|
end
|
111
137
|
|
112
138
|
# For testing, return an Array of the attributes as symbols.
|
113
139
|
def self.attrs
|
114
140
|
instance_methods(false).grep(/\A[a-z_]+=\Z/)
|
115
|
-
.map { |a| a.to_s.
|
141
|
+
.map { |a| a.to_s.delete_suffix('=').to_sym }
|
116
142
|
end
|
117
143
|
|
118
144
|
# For testing, return an Array of the flags-form of the attributes, i.e.,
|
119
145
|
# with the underscores, _, replaced with hyphens.
|
120
146
|
def self.flags
|
121
|
-
attrs.map { |a| a.
|
147
|
+
attrs.map { |a| a.tr('_', '-') }
|
122
148
|
end
|
123
149
|
|
124
150
|
# Return a hash of the values in this Options object. This is the
|
@@ -174,7 +200,7 @@ module Labrat
|
|
174
200
|
# an Options object.
|
175
201
|
def merge!(hsh)
|
176
202
|
# Convert any separator hyphens in the hash keys to underscores
|
177
|
-
hsh = hsh.to_hash.transform_keys { |key| key.to_s.
|
203
|
+
hsh = hsh.to_hash.transform_keys { |key| key.to_s.tr('-', '_').to_sym }
|
178
204
|
new_hash = to_hash.merge(hsh)
|
179
205
|
new_hash.each_pair do |k, val|
|
180
206
|
setter = "#{k}=".to_sym
|
data/lib/labrat/read_files.rb
CHANGED
@@ -9,6 +9,7 @@ module Labrat
|
|
9
9
|
unless File.readable?(fname)
|
10
10
|
raise "Cannot open label file '#{ofname}' for reading"
|
11
11
|
end
|
12
|
+
|
12
13
|
File.open(fname)
|
13
14
|
else
|
14
15
|
$stdin
|
@@ -17,9 +18,9 @@ module Labrat
|
|
17
18
|
texts = []
|
18
19
|
label = nil
|
19
20
|
file.each do |line|
|
20
|
-
next if
|
21
|
+
next if /\A\s*#/.match?(line)
|
21
22
|
|
22
|
-
if
|
23
|
+
if /\A\s*\z/.match?(line)
|
23
24
|
# At blank line record any accumulated label into texts, but remove
|
24
25
|
# the nlsep from the end.
|
25
26
|
if label
|
data/lib/labrat/version.rb
CHANGED
metadata
CHANGED
@@ -1,43 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: labrat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel E. Doherty
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-03-20 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: matrix
|
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'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: prawn
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '2.0'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '2.0'
|
41
12
|
- !ruby/object:Gem::Dependency
|
42
13
|
name: activesupport
|
43
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,112 +23,28 @@ dependencies:
|
|
52
23
|
- - ">="
|
53
24
|
- !ruby/object:Gem::Version
|
54
25
|
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: fat_core
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
26
|
- !ruby/object:Gem::Dependency
|
70
27
|
name: fat_config
|
71
28
|
requirement: !ruby/object:Gem::Requirement
|
72
29
|
requirements:
|
73
30
|
- - ">="
|
74
31
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.
|
32
|
+
version: 0.4.2
|
76
33
|
type: :runtime
|
77
34
|
prerelease: false
|
78
35
|
version_requirements: !ruby/object:Gem::Requirement
|
79
36
|
requirements:
|
80
37
|
- - ">="
|
81
38
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rake
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rspec
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
39
|
+
version: 0.4.2
|
111
40
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: simplecov
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: debug
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - ">="
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: 1.0.0
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: 1.0.0
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: rubocop-performance
|
41
|
+
name: fat_core
|
155
42
|
requirement: !ruby/object:Gem::Requirement
|
156
43
|
requirements:
|
157
44
|
- - ">="
|
158
45
|
- !ruby/object:Gem::Version
|
159
46
|
version: '0'
|
160
|
-
type: :
|
47
|
+
type: :runtime
|
161
48
|
prerelease: false
|
162
49
|
version_requirements: !ruby/object:Gem::Requirement
|
163
50
|
requirements:
|
@@ -165,13 +52,13 @@ dependencies:
|
|
165
52
|
- !ruby/object:Gem::Version
|
166
53
|
version: '0'
|
167
54
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
55
|
+
name: matrix
|
169
56
|
requirement: !ruby/object:Gem::Requirement
|
170
57
|
requirements:
|
171
58
|
- - ">="
|
172
59
|
- !ruby/object:Gem::Version
|
173
60
|
version: '0'
|
174
|
-
type: :
|
61
|
+
type: :runtime
|
175
62
|
prerelease: false
|
176
63
|
version_requirements: !ruby/object:Gem::Requirement
|
177
64
|
requirements:
|
@@ -179,19 +66,19 @@ dependencies:
|
|
179
66
|
- !ruby/object:Gem::Version
|
180
67
|
version: '0'
|
181
68
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
69
|
+
name: prawn
|
183
70
|
requirement: !ruby/object:Gem::Requirement
|
184
71
|
requirements:
|
185
|
-
- - "
|
72
|
+
- - "~>"
|
186
73
|
- !ruby/object:Gem::Version
|
187
|
-
version: '0'
|
188
|
-
type: :
|
74
|
+
version: '2.0'
|
75
|
+
type: :runtime
|
189
76
|
prerelease: false
|
190
77
|
version_requirements: !ruby/object:Gem::Requirement
|
191
78
|
requirements:
|
192
|
-
- - "
|
79
|
+
- - "~>"
|
193
80
|
- !ruby/object:Gem::Version
|
194
|
-
version: '0'
|
81
|
+
version: '2.0'
|
195
82
|
description: |2+
|
196
83
|
|
197
84
|
Labrat is a linux command-line program for quickly printing labels. Labrat uses
|
@@ -216,6 +103,8 @@ extensions: []
|
|
216
103
|
extra_rdoc_files: []
|
217
104
|
files:
|
218
105
|
- ".envrc"
|
106
|
+
- ".github/workflows/main.yml"
|
107
|
+
- ".github/workflows/ruby.yml"
|
219
108
|
- ".gitignore"
|
220
109
|
- ".rspec"
|
221
110
|
- ".rubocop.yml"
|
@@ -274,8 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
274
163
|
- !ruby/object:Gem::Version
|
275
164
|
version: '0'
|
276
165
|
requirements: []
|
277
|
-
rubygems_version: 3.
|
278
|
-
signing_key:
|
166
|
+
rubygems_version: 3.6.3
|
279
167
|
specification_version: 4
|
280
168
|
summary: Command-line and Emacs label print software.
|
281
169
|
test_files: []
|