laser-cutter 1.0.3 → 2.0.0
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 +5 -5
- data/.envrc +2 -0
- data/.github/workflows/lint.yml +22 -0
- data/.github/workflows/rspec.yml +22 -0
- data/.gitignore +5 -4
- data/.plans/001.00-dry-cli-migration/plan.md +29 -0
- data/.relaxed_rubocop.yml +153 -0
- data/.rspec +1 -1
- data/.rubocop.yml +31 -0
- data/.rubocop_todo.yml +90 -0
- data/.ruby-version +1 -0
- data/CLAUDE.md +62 -0
- data/CONTRIBUTING.md +2 -4
- data/Gemfile +14 -0
- data/README.md +83 -111
- data/Rakefile +41 -0
- data/docs/badges/coverage_badge.svg +21 -0
- data/exe/laser-cutter +8 -0
- data/exe/lc +1 -0
- data/justfile +97 -0
- data/laser-cutter.gemspec +26 -14
- data/lib/laser/cutter/aggregator.rb +101 -0
- data/lib/{laser-cutter → laser/cutter}/box.rb +44 -52
- data/lib/laser/cutter/cli/command.rb +46 -0
- data/lib/laser/cutter/cli/completion.rb +21 -0
- data/lib/laser/cutter/cli/config_file.rb +36 -0
- data/lib/laser/cutter/cli/examples.rb +42 -0
- data/lib/laser/cutter/cli/generate.rb +90 -0
- data/lib/laser/cutter/cli/help.rb +20 -0
- data/lib/laser/cutter/cli/page_sizes.rb +19 -0
- data/lib/laser/cutter/cli/version.rb +15 -0
- data/lib/laser/cutter/cli.rb +49 -0
- data/lib/laser/cutter/configuration.rb +101 -0
- data/lib/{laser-cutter → laser/cutter}/geometry/dimensions.rb +2 -3
- data/lib/{laser-cutter/geometry/shape → laser/cutter/geometry}/line.rb +19 -18
- data/lib/{laser-cutter → laser/cutter}/geometry/point.rb +4 -2
- data/lib/{laser-cutter/geometry/shape → laser/cutter/geometry}/rect.rb +6 -7
- data/lib/{laser-cutter → laser/cutter}/geometry/shape.rb +7 -7
- data/lib/{laser-cutter → laser/cutter}/geometry/tuple.rb +40 -36
- data/lib/laser/cutter/launcher.rb +40 -0
- data/lib/laser/cutter/missing_option.rb +7 -0
- data/lib/laser/cutter/notching/base.rb +19 -0
- data/lib/{laser-cutter → laser/cutter}/notching/edge.rb +21 -20
- data/lib/laser/cutter/notching/infinite_iterator.rb +27 -0
- data/lib/{laser-cutter → laser/cutter}/notching/path_generator.rb +27 -60
- data/lib/laser/cutter/notching/shift.rb +17 -0
- data/lib/laser/cutter/page_manager.rb +50 -0
- data/lib/{laser-cutter → laser/cutter}/renderer/base.rb +3 -2
- data/lib/laser/cutter/renderer/box_renderer.rb +40 -0
- data/lib/laser/cutter/renderer/layout_renderer.rb +61 -0
- data/lib/laser/cutter/renderer/line_renderer.rb +21 -0
- data/lib/laser/cutter/renderer/meta_renderer.rb +83 -0
- data/lib/{laser-cutter → laser/cutter}/renderer/rect_renderer.rb +3 -1
- data/lib/laser/cutter/renderer/svg_renderer.rb +65 -0
- data/lib/laser/cutter/renderer.rb +24 -0
- data/lib/laser/cutter/units_converter.rb +15 -0
- data/lib/laser/cutter/version.rb +7 -0
- data/lib/laser/cutter/zero_value_not_allowed.rb +7 -0
- data/lib/laser/cutter.rb +29 -0
- data/lib/laser-cutter.rb +2 -14
- data/lib/laser_cutter.rb +3 -0
- data/spec/laser/cutter/aggregator_spec.rb +70 -0
- data/spec/laser/cutter/box_spec.rb +61 -0
- data/spec/laser/cutter/cli/config_file_spec.rb +31 -0
- data/spec/laser/cutter/cli_spec.rb +186 -0
- data/spec/laser/cutter/configuration_spec.rb +101 -0
- data/spec/{dimensions_spec.rb → laser/cutter/dimensions_spec.rb} +8 -6
- data/spec/laser/cutter/edge_spec.rb +64 -0
- data/spec/{line_spec.rb → laser/cutter/line_spec.rb} +26 -20
- data/spec/{page_manager_spec.rb → laser/cutter/page_manager_spec.rb} +27 -11
- data/spec/{path_generator_spec.rb → laser/cutter/path_generator_spec.rb} +18 -14
- data/spec/{point_spec.rb → laser/cutter/point_spec.rb} +27 -22
- data/spec/{rect_spec.rb → laser/cutter/rect_spec.rb} +9 -5
- data/spec/laser/cutter/renderer/layout_renderer_spec.rb +102 -0
- data/spec/laser/cutter/renderer/svg_renderer_spec.rb +51 -0
- data/spec/laser/cutter/renderer_spec.rb +19 -0
- data/spec/spec_helper.rb +34 -25
- data/spec/support/aruba.rb +10 -0
- metadata +206 -80
- data/.travis.yml +0 -11
- data/LICENSE +0 -22
- data/bin/laser-cutter +0 -19
- data/lib/laser-cutter/aggregator.rb +0 -57
- data/lib/laser-cutter/cli/opt_parser.rb +0 -131
- data/lib/laser-cutter/cli/serializer.rb +0 -51
- data/lib/laser-cutter/configuration.rb +0 -83
- data/lib/laser-cutter/geometry.rb +0 -11
- data/lib/laser-cutter/notching/base.rb +0 -13
- data/lib/laser-cutter/notching.rb +0 -10
- data/lib/laser-cutter/page_manager.rb +0 -43
- data/lib/laser-cutter/renderer/box_renderer.rb +0 -36
- data/lib/laser-cutter/renderer/layout_renderer.rb +0 -59
- data/lib/laser-cutter/renderer/line_renderer.rb +0 -17
- data/lib/laser-cutter/renderer/meta_renderer.rb +0 -77
- data/lib/laser-cutter/renderer.rb +0 -14
- data/lib/laser-cutter/version.rb +0 -5
- data/spec/aggregator_spec.rb +0 -65
- data/spec/box_spec.rb +0 -40
- data/spec/configuration_spec.rb +0 -81
- data/spec/edge_spec.rb +0 -43
- data/spec/renderer_spec.rb +0 -72
- /data/{doc → docs/images}/comparison.jpg +0 -0
metadata
CHANGED
|
@@ -1,17 +1,58 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: laser-cutter
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Konstantin Gredeskoul
|
|
8
|
-
|
|
9
|
-
bindir: bin
|
|
8
|
+
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
13
|
+
name: dry-cli
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: 1.4.1
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: 1.4.1
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: dry-cli-autocomplete
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: dry-cli-help
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: dry-cli-ui
|
|
15
56
|
requirement: !ruby/object:Gem::Requirement
|
|
16
57
|
requirements:
|
|
17
58
|
- - ">="
|
|
@@ -39,7 +80,7 @@ dependencies:
|
|
|
39
80
|
- !ruby/object:Gem::Version
|
|
40
81
|
version: '0'
|
|
41
82
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
83
|
+
name: matrix
|
|
43
84
|
requirement: !ruby/object:Gem::Requirement
|
|
44
85
|
requirements:
|
|
45
86
|
- - ">="
|
|
@@ -53,27 +94,27 @@ dependencies:
|
|
|
53
94
|
- !ruby/object:Gem::Version
|
|
54
95
|
version: '0'
|
|
55
96
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
97
|
+
name: pastel
|
|
57
98
|
requirement: !ruby/object:Gem::Requirement
|
|
58
99
|
requirements:
|
|
59
|
-
- - "
|
|
100
|
+
- - ">="
|
|
60
101
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
62
|
-
type: :
|
|
102
|
+
version: '0'
|
|
103
|
+
type: :runtime
|
|
63
104
|
prerelease: false
|
|
64
105
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
106
|
requirements:
|
|
66
|
-
- - "
|
|
107
|
+
- - ">="
|
|
67
108
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
109
|
+
version: '0'
|
|
69
110
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
111
|
+
name: prawn
|
|
71
112
|
requirement: !ruby/object:Gem::Requirement
|
|
72
113
|
requirements:
|
|
73
114
|
- - ">="
|
|
74
115
|
- !ruby/object:Gem::Version
|
|
75
116
|
version: '0'
|
|
76
|
-
type: :
|
|
117
|
+
type: :runtime
|
|
77
118
|
prerelease: false
|
|
78
119
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
120
|
requirements:
|
|
@@ -81,13 +122,13 @@ dependencies:
|
|
|
81
122
|
- !ruby/object:Gem::Version
|
|
82
123
|
version: '0'
|
|
83
124
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
125
|
+
name: tty-cursor
|
|
85
126
|
requirement: !ruby/object:Gem::Requirement
|
|
86
127
|
requirements:
|
|
87
128
|
- - ">="
|
|
88
129
|
- !ruby/object:Gem::Version
|
|
89
130
|
version: '0'
|
|
90
|
-
type: :
|
|
131
|
+
type: :runtime
|
|
91
132
|
prerelease: false
|
|
92
133
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
134
|
requirements:
|
|
@@ -95,13 +136,13 @@ dependencies:
|
|
|
95
136
|
- !ruby/object:Gem::Version
|
|
96
137
|
version: '0'
|
|
97
138
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name:
|
|
139
|
+
name: tty-progressbar
|
|
99
140
|
requirement: !ruby/object:Gem::Requirement
|
|
100
141
|
requirements:
|
|
101
142
|
- - ">="
|
|
102
143
|
- !ruby/object:Gem::Version
|
|
103
144
|
version: '0'
|
|
104
|
-
type: :
|
|
145
|
+
type: :runtime
|
|
105
146
|
prerelease: false
|
|
106
147
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
148
|
requirements:
|
|
@@ -109,13 +150,83 @@ dependencies:
|
|
|
109
150
|
- !ruby/object:Gem::Version
|
|
110
151
|
version: '0'
|
|
111
152
|
- !ruby/object:Gem::Dependency
|
|
112
|
-
name:
|
|
153
|
+
name: tty-prompt
|
|
113
154
|
requirement: !ruby/object:Gem::Requirement
|
|
114
155
|
requirements:
|
|
115
156
|
- - ">="
|
|
116
157
|
- !ruby/object:Gem::Version
|
|
117
158
|
version: '0'
|
|
118
|
-
type: :
|
|
159
|
+
type: :runtime
|
|
160
|
+
prerelease: false
|
|
161
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
162
|
+
requirements:
|
|
163
|
+
- - ">="
|
|
164
|
+
- !ruby/object:Gem::Version
|
|
165
|
+
version: '0'
|
|
166
|
+
- !ruby/object:Gem::Dependency
|
|
167
|
+
name: tty-screen
|
|
168
|
+
requirement: !ruby/object:Gem::Requirement
|
|
169
|
+
requirements:
|
|
170
|
+
- - ">="
|
|
171
|
+
- !ruby/object:Gem::Version
|
|
172
|
+
version: '0'
|
|
173
|
+
type: :runtime
|
|
174
|
+
prerelease: false
|
|
175
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
176
|
+
requirements:
|
|
177
|
+
- - ">="
|
|
178
|
+
- !ruby/object:Gem::Version
|
|
179
|
+
version: '0'
|
|
180
|
+
- !ruby/object:Gem::Dependency
|
|
181
|
+
name: tty-spinner
|
|
182
|
+
requirement: !ruby/object:Gem::Requirement
|
|
183
|
+
requirements:
|
|
184
|
+
- - ">="
|
|
185
|
+
- !ruby/object:Gem::Version
|
|
186
|
+
version: '0'
|
|
187
|
+
type: :runtime
|
|
188
|
+
prerelease: false
|
|
189
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
190
|
+
requirements:
|
|
191
|
+
- - ">="
|
|
192
|
+
- !ruby/object:Gem::Version
|
|
193
|
+
version: '0'
|
|
194
|
+
- !ruby/object:Gem::Dependency
|
|
195
|
+
name: tty-table
|
|
196
|
+
requirement: !ruby/object:Gem::Requirement
|
|
197
|
+
requirements:
|
|
198
|
+
- - ">="
|
|
199
|
+
- !ruby/object:Gem::Version
|
|
200
|
+
version: '0'
|
|
201
|
+
type: :runtime
|
|
202
|
+
prerelease: false
|
|
203
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
204
|
+
requirements:
|
|
205
|
+
- - ">="
|
|
206
|
+
- !ruby/object:Gem::Version
|
|
207
|
+
version: '0'
|
|
208
|
+
- !ruby/object:Gem::Dependency
|
|
209
|
+
name: victor
|
|
210
|
+
requirement: !ruby/object:Gem::Requirement
|
|
211
|
+
requirements:
|
|
212
|
+
- - ">="
|
|
213
|
+
- !ruby/object:Gem::Version
|
|
214
|
+
version: '0'
|
|
215
|
+
type: :runtime
|
|
216
|
+
prerelease: false
|
|
217
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
218
|
+
requirements:
|
|
219
|
+
- - ">="
|
|
220
|
+
- !ruby/object:Gem::Version
|
|
221
|
+
version: '0'
|
|
222
|
+
- !ruby/object:Gem::Dependency
|
|
223
|
+
name: zeitwerk
|
|
224
|
+
requirement: !ruby/object:Gem::Requirement
|
|
225
|
+
requirements:
|
|
226
|
+
- - ">="
|
|
227
|
+
- !ruby/object:Gem::Version
|
|
228
|
+
version: '0'
|
|
229
|
+
type: :runtime
|
|
119
230
|
prerelease: false
|
|
120
231
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
232
|
requirements:
|
|
@@ -130,64 +241,94 @@ email:
|
|
|
130
241
|
- kigster@gmail.com
|
|
131
242
|
executables:
|
|
132
243
|
- laser-cutter
|
|
244
|
+
- lc
|
|
133
245
|
extensions: []
|
|
134
246
|
extra_rdoc_files: []
|
|
135
247
|
files:
|
|
248
|
+
- ".envrc"
|
|
249
|
+
- ".github/workflows/lint.yml"
|
|
250
|
+
- ".github/workflows/rspec.yml"
|
|
136
251
|
- ".gitignore"
|
|
252
|
+
- ".plans/001.00-dry-cli-migration/plan.md"
|
|
253
|
+
- ".relaxed_rubocop.yml"
|
|
137
254
|
- ".rspec"
|
|
138
|
-
- ".
|
|
255
|
+
- ".rubocop.yml"
|
|
256
|
+
- ".rubocop_todo.yml"
|
|
257
|
+
- ".ruby-version"
|
|
258
|
+
- CLAUDE.md
|
|
139
259
|
- CONTRIBUTING.md
|
|
140
260
|
- Gemfile
|
|
141
|
-
- LICENSE
|
|
142
261
|
- LICENSE.txt
|
|
143
262
|
- README.md
|
|
144
263
|
- Rakefile
|
|
145
|
-
-
|
|
146
|
-
-
|
|
264
|
+
- docs/badges/coverage_badge.svg
|
|
265
|
+
- docs/images/comparison.jpg
|
|
266
|
+
- exe/laser-cutter
|
|
267
|
+
- exe/lc
|
|
268
|
+
- justfile
|
|
147
269
|
- laser-cutter.gemspec
|
|
148
270
|
- lib/laser-cutter.rb
|
|
149
|
-
- lib/laser
|
|
150
|
-
- lib/laser
|
|
151
|
-
- lib/laser
|
|
152
|
-
- lib/laser
|
|
153
|
-
- lib/laser
|
|
154
|
-
- lib/laser
|
|
155
|
-
- lib/laser
|
|
156
|
-
- lib/laser
|
|
157
|
-
- lib/laser
|
|
158
|
-
- lib/laser
|
|
159
|
-
- lib/laser
|
|
160
|
-
- lib/laser
|
|
161
|
-
- lib/laser
|
|
162
|
-
- lib/laser
|
|
163
|
-
- lib/laser
|
|
164
|
-
- lib/laser
|
|
165
|
-
- lib/laser
|
|
166
|
-
- lib/laser
|
|
167
|
-
- lib/laser
|
|
168
|
-
- lib/laser
|
|
169
|
-
- lib/laser
|
|
170
|
-
- lib/laser
|
|
171
|
-
- lib/laser
|
|
172
|
-
- lib/laser
|
|
173
|
-
- lib/laser
|
|
174
|
-
-
|
|
175
|
-
-
|
|
176
|
-
-
|
|
177
|
-
-
|
|
178
|
-
-
|
|
179
|
-
-
|
|
180
|
-
-
|
|
181
|
-
-
|
|
182
|
-
-
|
|
183
|
-
-
|
|
184
|
-
-
|
|
271
|
+
- lib/laser/cutter.rb
|
|
272
|
+
- lib/laser/cutter/aggregator.rb
|
|
273
|
+
- lib/laser/cutter/box.rb
|
|
274
|
+
- lib/laser/cutter/cli.rb
|
|
275
|
+
- lib/laser/cutter/cli/command.rb
|
|
276
|
+
- lib/laser/cutter/cli/completion.rb
|
|
277
|
+
- lib/laser/cutter/cli/config_file.rb
|
|
278
|
+
- lib/laser/cutter/cli/examples.rb
|
|
279
|
+
- lib/laser/cutter/cli/generate.rb
|
|
280
|
+
- lib/laser/cutter/cli/help.rb
|
|
281
|
+
- lib/laser/cutter/cli/page_sizes.rb
|
|
282
|
+
- lib/laser/cutter/cli/version.rb
|
|
283
|
+
- lib/laser/cutter/configuration.rb
|
|
284
|
+
- lib/laser/cutter/geometry/dimensions.rb
|
|
285
|
+
- lib/laser/cutter/geometry/line.rb
|
|
286
|
+
- lib/laser/cutter/geometry/point.rb
|
|
287
|
+
- lib/laser/cutter/geometry/rect.rb
|
|
288
|
+
- lib/laser/cutter/geometry/shape.rb
|
|
289
|
+
- lib/laser/cutter/geometry/tuple.rb
|
|
290
|
+
- lib/laser/cutter/launcher.rb
|
|
291
|
+
- lib/laser/cutter/missing_option.rb
|
|
292
|
+
- lib/laser/cutter/notching/base.rb
|
|
293
|
+
- lib/laser/cutter/notching/edge.rb
|
|
294
|
+
- lib/laser/cutter/notching/infinite_iterator.rb
|
|
295
|
+
- lib/laser/cutter/notching/path_generator.rb
|
|
296
|
+
- lib/laser/cutter/notching/shift.rb
|
|
297
|
+
- lib/laser/cutter/page_manager.rb
|
|
298
|
+
- lib/laser/cutter/renderer.rb
|
|
299
|
+
- lib/laser/cutter/renderer/base.rb
|
|
300
|
+
- lib/laser/cutter/renderer/box_renderer.rb
|
|
301
|
+
- lib/laser/cutter/renderer/layout_renderer.rb
|
|
302
|
+
- lib/laser/cutter/renderer/line_renderer.rb
|
|
303
|
+
- lib/laser/cutter/renderer/meta_renderer.rb
|
|
304
|
+
- lib/laser/cutter/renderer/rect_renderer.rb
|
|
305
|
+
- lib/laser/cutter/renderer/svg_renderer.rb
|
|
306
|
+
- lib/laser/cutter/units_converter.rb
|
|
307
|
+
- lib/laser/cutter/version.rb
|
|
308
|
+
- lib/laser/cutter/zero_value_not_allowed.rb
|
|
309
|
+
- lib/laser_cutter.rb
|
|
310
|
+
- spec/laser/cutter/aggregator_spec.rb
|
|
311
|
+
- spec/laser/cutter/box_spec.rb
|
|
312
|
+
- spec/laser/cutter/cli/config_file_spec.rb
|
|
313
|
+
- spec/laser/cutter/cli_spec.rb
|
|
314
|
+
- spec/laser/cutter/configuration_spec.rb
|
|
315
|
+
- spec/laser/cutter/dimensions_spec.rb
|
|
316
|
+
- spec/laser/cutter/edge_spec.rb
|
|
317
|
+
- spec/laser/cutter/line_spec.rb
|
|
318
|
+
- spec/laser/cutter/page_manager_spec.rb
|
|
319
|
+
- spec/laser/cutter/path_generator_spec.rb
|
|
320
|
+
- spec/laser/cutter/point_spec.rb
|
|
321
|
+
- spec/laser/cutter/rect_spec.rb
|
|
322
|
+
- spec/laser/cutter/renderer/layout_renderer_spec.rb
|
|
323
|
+
- spec/laser/cutter/renderer/svg_renderer_spec.rb
|
|
324
|
+
- spec/laser/cutter/renderer_spec.rb
|
|
185
325
|
- spec/spec_helper.rb
|
|
326
|
+
- spec/support/aruba.rb
|
|
186
327
|
homepage: https://github.com/kigster/laser-cutter
|
|
187
328
|
licenses:
|
|
188
329
|
- MIT
|
|
189
|
-
metadata:
|
|
190
|
-
|
|
330
|
+
metadata:
|
|
331
|
+
rubygems_mfa_required: 'true'
|
|
191
332
|
rdoc_options: []
|
|
192
333
|
require_paths:
|
|
193
334
|
- lib
|
|
@@ -195,30 +336,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
195
336
|
requirements:
|
|
196
337
|
- - ">="
|
|
197
338
|
- !ruby/object:Gem::Version
|
|
198
|
-
version: '0'
|
|
339
|
+
version: '4.0'
|
|
199
340
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
200
341
|
requirements:
|
|
201
342
|
- - ">="
|
|
202
343
|
- !ruby/object:Gem::Version
|
|
203
344
|
version: '0'
|
|
204
345
|
requirements: []
|
|
205
|
-
|
|
206
|
-
rubygems_version: 2.2.2
|
|
207
|
-
signing_key:
|
|
346
|
+
rubygems_version: 4.0.21
|
|
208
347
|
specification_version: 4
|
|
209
348
|
summary: Creates notched box outlines for laser-cut boxes which are geometrically
|
|
210
349
|
symmetric and pleasing to the eye.
|
|
211
|
-
test_files:
|
|
212
|
-
- spec/aggregator_spec.rb
|
|
213
|
-
- spec/box_spec.rb
|
|
214
|
-
- spec/configuration_spec.rb
|
|
215
|
-
- spec/dimensions_spec.rb
|
|
216
|
-
- spec/edge_spec.rb
|
|
217
|
-
- spec/line_spec.rb
|
|
218
|
-
- spec/page_manager_spec.rb
|
|
219
|
-
- spec/path_generator_spec.rb
|
|
220
|
-
- spec/point_spec.rb
|
|
221
|
-
- spec/rect_spec.rb
|
|
222
|
-
- spec/renderer_spec.rb
|
|
223
|
-
- spec/spec_helper.rb
|
|
224
|
-
has_rdoc:
|
|
350
|
+
test_files: []
|
data/.travis.yml
DELETED
data/LICENSE
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
The MIT License (MIT)
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2014 Konstantin Gredeskoul
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
22
|
-
|
data/bin/laser-cutter
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
require File.expand_path('../../lib/laser-cutter', __FILE__)
|
|
3
|
-
require File.expand_path('../../lib/laser-cutter/cli/opt_parser', __FILE__)
|
|
4
|
-
|
|
5
|
-
config = Laser::Cutter::CLI::OptParser.parse(ARGV)
|
|
6
|
-
|
|
7
|
-
begin
|
|
8
|
-
Laser::Cutter::Renderer::LayoutRenderer.new(config).render
|
|
9
|
-
if config.open
|
|
10
|
-
`open #{config.file}`
|
|
11
|
-
end
|
|
12
|
-
rescue Exception => e
|
|
13
|
-
STDERR.puts "Whoops, #{e.message}".red
|
|
14
|
-
if config.verbose
|
|
15
|
-
STDERR.puts e.backtrace.join("\n").red
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
module Laser
|
|
2
|
-
module Cutter
|
|
3
|
-
class Aggregator
|
|
4
|
-
attr_accessor :lines
|
|
5
|
-
|
|
6
|
-
def initialize(array_of_lines = [])
|
|
7
|
-
self.lines = array_of_lines.sort
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
# This method finds lines that are identical (same p1/p2)
|
|
11
|
-
def dedup!
|
|
12
|
-
lines_to_delete = []
|
|
13
|
-
count = lines.size
|
|
14
|
-
for i in 0..(count - 1) do
|
|
15
|
-
for j in (i + 1)..(count - 1) do
|
|
16
|
-
l1 = lines[i]
|
|
17
|
-
l2 = lines[j]
|
|
18
|
-
if l1.eql?(l2)
|
|
19
|
-
lines_to_delete << l1
|
|
20
|
-
lines_to_delete << l2
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
self.lines = self.lines - lines_to_delete
|
|
25
|
-
self
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# Find overlapping (intersecting) sections of lines and
|
|
29
|
-
# remove them.
|
|
30
|
-
def deoverlap!
|
|
31
|
-
lines_to_delete = []
|
|
32
|
-
lines_to_add = []
|
|
33
|
-
count = lines.size
|
|
34
|
-
for i in 0..(count - 1) do
|
|
35
|
-
for j in (i + 1)..(count - 1) do
|
|
36
|
-
l1 = lines[i]
|
|
37
|
-
l2 = lines[j]
|
|
38
|
-
if l1.overlaps?(l2)
|
|
39
|
-
lines_to_delete << l1
|
|
40
|
-
lines_to_delete << l2
|
|
41
|
-
lines_to_add << l1.xor(l2)
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
lines_to_delete.uniq!
|
|
47
|
-
lines_to_delete.flatten!
|
|
48
|
-
lines_to_add.uniq!
|
|
49
|
-
lines_to_add.flatten!
|
|
50
|
-
|
|
51
|
-
self.lines = (self.lines - lines_to_delete + lines_to_add).flatten
|
|
52
|
-
self.lines.sort!
|
|
53
|
-
self
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
require 'optparse'
|
|
2
|
-
require 'colored'
|
|
3
|
-
require 'json'
|
|
4
|
-
require 'hashie/mash'
|
|
5
|
-
require 'laser-cutter'
|
|
6
|
-
require_relative 'serializer'
|
|
7
|
-
|
|
8
|
-
module Laser
|
|
9
|
-
module Cutter
|
|
10
|
-
module CLI
|
|
11
|
-
class OptParser
|
|
12
|
-
def self.puts_error(e)
|
|
13
|
-
STDERR.puts "Whoops, #{e}".red
|
|
14
|
-
STDERR.puts "Try --help or --examples for more info...".yellow
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def self.parse(args)
|
|
18
|
-
banner_text = <<-EOF
|
|
19
|
-
#{('Laser-Cutter v'+ Laser::Cutter::VERSION).bold}
|
|
20
|
-
|
|
21
|
-
Usage: laser-cutter [options] -o filename.pdf
|
|
22
|
-
eg: laser-cutter -z 1x1.5x2/0.125 -O -o box.pdf
|
|
23
|
-
EOF
|
|
24
|
-
|
|
25
|
-
examples = <<-EOF
|
|
26
|
-
|
|
27
|
-
Examples:
|
|
28
|
-
1. Create a box defined in inches, set kerf to 0.008" and open PDF in preview right after:
|
|
29
|
-
|
|
30
|
-
laser-cutter -z 3x2x2/0.125 -k 0.008 -O -o box.pdf
|
|
31
|
-
|
|
32
|
-
2. Create a box defined in millimeters, print verbose info, and set
|
|
33
|
-
page size to A3, and layout to landscape, and stroke width to 1/2mm:
|
|
34
|
-
|
|
35
|
-
laser-cutter -u mm -w70 -h20 -d50 -t4.3 -n5 -iA3 -l landscape -s0.5 -v -O -o box.pdf
|
|
36
|
-
|
|
37
|
-
3. List all possible page sizes in metric systems:
|
|
38
|
-
|
|
39
|
-
laser-cutter -L -u mm
|
|
40
|
-
|
|
41
|
-
4. Create a box with provided dimensions, and save the config to a file
|
|
42
|
-
for later use:
|
|
43
|
-
|
|
44
|
-
laser-cutter -z 1.1x2.5x1.5/0.125/0.125 -p 0.1 -O -o box.pdf -W box-settings.json
|
|
45
|
-
|
|
46
|
-
5. Read settings from a previously saved file:
|
|
47
|
-
|
|
48
|
-
laser-cutter -O -o box.pdf -R box-settings.json
|
|
49
|
-
cat box-settings.json | laser-cutter -O -o box.pdf -R -
|
|
50
|
-
|
|
51
|
-
EOF
|
|
52
|
-
options = Hashie::Mash.new
|
|
53
|
-
options.verbose = false
|
|
54
|
-
options.units = 'in'
|
|
55
|
-
|
|
56
|
-
opt_parser = OptionParser.new do |opts|
|
|
57
|
-
opts.banner = banner_text.blue
|
|
58
|
-
opts.separator "Specific Options:"
|
|
59
|
-
opts.on("-w", "--width WIDTH", "Internal width of the box") { |value| options.width = value }
|
|
60
|
-
opts.on("-h", "--height HEIGHT", "Internal height of the box") { |value| options.height = value }
|
|
61
|
-
opts.on("-d", "--depth DEPTH", "Internal depth of the box") { |value| options.depth= value }
|
|
62
|
-
opts.on("-t", "--thickness THICKNESS", "Thickness of the box material") { |value| options.thickness = value }
|
|
63
|
-
opts.on("-n", "--notch NOTCH", "Optional notch length (aka \"tab width\"), guide only") { |value| options.notch = value }
|
|
64
|
-
opts.on("-k", "--kerf KERF", "Kerf - cut width (default is #{Laser::Cutter::Configuration::UNIT_SPECIFIC_DEFAULTS['in'][:kerf]}in)") { |value| options.kerf = value }
|
|
65
|
-
opts.separator ""
|
|
66
|
-
opts.on("-m", "--margin MARGIN", "Margins from the edge of the document") { |value| options.margin = value }
|
|
67
|
-
opts.on("-p", "--padding PADDING", "Space between the boxes on the page") { |value| options.padding = value }
|
|
68
|
-
opts.on("-s", "--stroke WIDTH", "Numeric stroke width of the line") { |value| options.stroke = value }
|
|
69
|
-
opts.on("-i", "--page_size LETTER", "Document page size, default is autofit the box.") { |value| options.page_size = value }
|
|
70
|
-
opts.on("-l", "--page_layout portrait", "Page layout, other option is 'landscape' ") { |value| options.page_layout = value }
|
|
71
|
-
opts.separator ""
|
|
72
|
-
opts.on("-O", "--open", "Open generated file with system viewer before exiting") { |v| options.open = v }
|
|
73
|
-
opts.on("-W", "--write CONFIG_FILE", "Save provided configuration to a file, use '-' for STDOUT") { |v| options.write_file = v }
|
|
74
|
-
opts.on("-R", "--read CONFIG_FILE", "Read configuration from a file, or use '-' for STDIN") { |v| options.read_file = v }
|
|
75
|
-
opts.separator ""
|
|
76
|
-
opts.on("-L", "--list-all-page-sizes", "Print all available page sizes with dimensions and exit") { |v| options.list_all_page_sizes = true }
|
|
77
|
-
opts.on("-M", "--no-metadata", "Do not print box metadata on the PDF") { |value| options.metadata = value }
|
|
78
|
-
opts.on("-v", "--[no-]verbose", "Run verbosely") { |v| options.verbose = v }
|
|
79
|
-
opts.on("-B", "--inside-box", "Draw the inside boxes (helpful to verify kerfing)") { |v| options.inside_box = v }
|
|
80
|
-
opts.on("-D", "--debug", "Show full exception stack trace on error") { |v| options.debug = v }
|
|
81
|
-
opts.separator ""
|
|
82
|
-
opts.on("--examples", "Show detailed usage examples") { puts opts; puts examples.yellow; exit }
|
|
83
|
-
opts.on("--help", "Show this message") { puts opts; exit }
|
|
84
|
-
opts.on("--version", "Show version") { puts Laser::Cutter::VERSION; exit }
|
|
85
|
-
opts.separator ""
|
|
86
|
-
opts.separator "Common Options:"
|
|
87
|
-
opts.on_tail("-o", "--file FILE", "Required output filename of the PDF") { |value| options.file = value }
|
|
88
|
-
opts.on_tail("-z", "--size WxHxD/T[/N]",
|
|
89
|
-
"Combined internal dimensions: W = width, H = height,\n#{" " * 37}D = depth, T = thickness, and optional N = notch length\n\n") do |size|
|
|
90
|
-
options.size = size
|
|
91
|
-
end
|
|
92
|
-
opts.on_tail("-u", "--units UNITS", "Either 'in' for inches (default) or 'mm'") { |value| options.units = value }
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
opt_parser.parse!(args)
|
|
96
|
-
|
|
97
|
-
if options.read_file
|
|
98
|
-
# these options are kept from the command line
|
|
99
|
-
override_with = %w(debug verbose read_file)
|
|
100
|
-
keep = options.reject{ |k,v| !override_with.include?(k)}
|
|
101
|
-
Serializer.new(options).deserialize
|
|
102
|
-
options.merge!(keep)
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
config = Laser::Cutter::Configuration.new(options.to_hash)
|
|
106
|
-
if config.list_all_page_sizes
|
|
107
|
-
puts PageManager.new(config.units).all_page_sizes
|
|
108
|
-
exit 0
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
if options.verbose
|
|
112
|
-
puts "Starting with the following configuration:"
|
|
113
|
-
puts JSON.pretty_generate(config.to_hash).green
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
config.validate!
|
|
117
|
-
|
|
118
|
-
if config.write_file
|
|
119
|
-
Serializer.new(config).serialize
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
config
|
|
123
|
-
rescue OptionParser::InvalidOption, OptionParser::MissingArgument, Laser::Cutter::MissingOption => e
|
|
124
|
-
puts opt_parser.banner.blue
|
|
125
|
-
puts_error(e)
|
|
126
|
-
exit 1
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
end
|