laser-cutter 1.0.5 → 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 -5
- data/.plans/001.00-dry-cli-migration/plan.md +29 -0
- data/.relaxed_rubocop.yml +153 -0
- data/.rspec +1 -0
- 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 +110 -87
- data/Rakefile +27 -13
- 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/box.rb +173 -0
- 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 +23 -22
- data/lib/laser/cutter/notching/infinite_iterator.rb +27 -0
- data/lib/{laser-cutter → laser/cutter}/notching/path_generator.rb +76 -94
- 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 +35 -22
- data/spec/support/aruba.rb +10 -0
- metadata +202 -76
- data/.travis.yml +0 -26
- data/BOXMAKER.md +0 -51
- data/LICENSE +0 -22
- data/bin/laser-cutter +0 -19
- data/lib/laser-cutter/aggregator.rb +0 -57
- data/lib/laser-cutter/box.rb +0 -183
- 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/face.rb +0 -18
- data/lib/laser-cutter/geometry.rb +0 -11
- data/lib/laser-cutter/notching.rb +0 -9
- 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 -39
- data/spec/configuration_spec.rb +0 -81
- data/spec/edge_spec.rb +0 -43
- data/spec/renderer_spec.rb +0 -72
- /data/docs/{comparison.jpg → 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,13 +94,13 @@ 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
102
|
version: '0'
|
|
62
|
-
type: :
|
|
103
|
+
type: :runtime
|
|
63
104
|
prerelease: false
|
|
64
105
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
106
|
requirements:
|
|
@@ -67,13 +108,13 @@ dependencies:
|
|
|
67
108
|
- !ruby/object:Gem::Version
|
|
68
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,65 +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
|
-
- ".
|
|
139
|
-
-
|
|
255
|
+
- ".rubocop.yml"
|
|
256
|
+
- ".rubocop_todo.yml"
|
|
257
|
+
- ".ruby-version"
|
|
258
|
+
- CLAUDE.md
|
|
140
259
|
- CONTRIBUTING.md
|
|
141
260
|
- Gemfile
|
|
142
|
-
- LICENSE
|
|
143
261
|
- LICENSE.txt
|
|
144
262
|
- README.md
|
|
145
263
|
- Rakefile
|
|
146
|
-
-
|
|
147
|
-
- docs/comparison.jpg
|
|
264
|
+
- docs/badges/coverage_badge.svg
|
|
265
|
+
- docs/images/comparison.jpg
|
|
266
|
+
- exe/laser-cutter
|
|
267
|
+
- exe/lc
|
|
268
|
+
- justfile
|
|
148
269
|
- laser-cutter.gemspec
|
|
149
270
|
- lib/laser-cutter.rb
|
|
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
|
-
- lib/laser
|
|
175
|
-
-
|
|
176
|
-
-
|
|
177
|
-
-
|
|
178
|
-
-
|
|
179
|
-
-
|
|
180
|
-
-
|
|
181
|
-
-
|
|
182
|
-
-
|
|
183
|
-
-
|
|
184
|
-
-
|
|
185
|
-
-
|
|
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
|
|
186
325
|
- spec/spec_helper.rb
|
|
326
|
+
- spec/support/aruba.rb
|
|
187
327
|
homepage: https://github.com/kigster/laser-cutter
|
|
188
328
|
licenses:
|
|
189
329
|
- MIT
|
|
190
|
-
metadata:
|
|
191
|
-
|
|
330
|
+
metadata:
|
|
331
|
+
rubygems_mfa_required: 'true'
|
|
192
332
|
rdoc_options: []
|
|
193
333
|
require_paths:
|
|
194
334
|
- lib
|
|
@@ -196,29 +336,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
196
336
|
requirements:
|
|
197
337
|
- - ">="
|
|
198
338
|
- !ruby/object:Gem::Version
|
|
199
|
-
version: '0'
|
|
339
|
+
version: '4.0'
|
|
200
340
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
201
341
|
requirements:
|
|
202
342
|
- - ">="
|
|
203
343
|
- !ruby/object:Gem::Version
|
|
204
344
|
version: '0'
|
|
205
345
|
requirements: []
|
|
206
|
-
|
|
207
|
-
rubygems_version: 2.6.11
|
|
208
|
-
signing_key:
|
|
346
|
+
rubygems_version: 4.0.21
|
|
209
347
|
specification_version: 4
|
|
210
348
|
summary: Creates notched box outlines for laser-cut boxes which are geometrically
|
|
211
349
|
symmetric and pleasing to the eye.
|
|
212
|
-
test_files:
|
|
213
|
-
- spec/aggregator_spec.rb
|
|
214
|
-
- spec/box_spec.rb
|
|
215
|
-
- spec/configuration_spec.rb
|
|
216
|
-
- spec/dimensions_spec.rb
|
|
217
|
-
- spec/edge_spec.rb
|
|
218
|
-
- spec/line_spec.rb
|
|
219
|
-
- spec/page_manager_spec.rb
|
|
220
|
-
- spec/path_generator_spec.rb
|
|
221
|
-
- spec/point_spec.rb
|
|
222
|
-
- spec/rect_spec.rb
|
|
223
|
-
- spec/renderer_spec.rb
|
|
224
|
-
- spec/spec_helper.rb
|
|
350
|
+
test_files: []
|
data/.travis.yml
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
env:
|
|
2
|
-
global:
|
|
3
|
-
- CC_TEST_REPORTER_ID=6520104decf84e2f6c2c169d30d67976bfcdaa48cd89b4ec34f6e637f2a0ae02
|
|
4
|
-
sudo: false
|
|
5
|
-
language: ruby
|
|
6
|
-
cache: bundler
|
|
7
|
-
rvm:
|
|
8
|
-
- 2.4.1
|
|
9
|
-
- 2.3.5
|
|
10
|
-
before_install: gem install bundler -v 1.15.4
|
|
11
|
-
before_script:
|
|
12
|
-
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64
|
|
13
|
-
> ./cc-test-reporter
|
|
14
|
-
- chmod +x ./cc-test-reporter
|
|
15
|
-
- "./cc-test-reporter before-build"
|
|
16
|
-
script:
|
|
17
|
-
- bundle exec rspec
|
|
18
|
-
after_script:
|
|
19
|
-
- "./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
|
|
20
|
-
notifications:
|
|
21
|
-
webhooks:
|
|
22
|
-
urls:
|
|
23
|
-
- secure: fgpv34jAm3rDNjiWuQtuijE0p9B2bpsCWdoCQ82pDZwktSITmNjanYCoZC0hlEw/kqMBDKRN78HfIIidy8dS664sLz8KyaFXq7RWAFsMP9fn/GMG/r9B+S3YumifQ/Zy+3OGa+0Qz76075q291QfNSPv0Y5QDMoAU5VljIVashC/qJS6DRO+vekDaDKIhi4Dr/+JpHPnjchqS4VaMB8gEIrDpeSYNlhrj1oAI/8GwgqZ8UR4sZGxNpIzUg+XGJSYz5/cAB3P18ENSQvOwaNefJa7qIVNjMD7YwXKmfX9cyr5RHM5sibq/S5fHH/N7pig+aveTquGGVxInJr1IEDiyr2TsFARjPitp9KJSFLHLsA2jm1cZfNW0/d6ii+51HdLPKorHom3fPjb0jkIe1LPa9CrrjnfSrAE9a/w4qpSnDv7OjAzkieepz+VQCtpQGIzQxJcHWaFX32iZ6RQ6pmKc/22E0OZwsNM2FHrB5V1b+rfczl8Ej7/R1wAOtHWkbLbfwZ9Ux2N0N0EKW8r8cOjEbsxmN8FFQubTwl68uqjJLhEtrOUbM28JM/NkX+Ue1KRw+NJAdMFEZQKPb/b/X6s3nwPD4/4yLyUDCGyr8aGpzSBD5uIu5uSJNiWdNDjcnXtJJ6TlGGZqj91r7FckjA8FuSA6S3yA8epMNG3FTUxPVE=
|
|
24
|
-
on_success: always
|
|
25
|
-
on_failure: onchange
|
|
26
|
-
on_start: never
|
data/BOXMAKER.md
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
# LaserCutter versus BoxMaker
|
|
2
|
-
|
|
3
|
-
Another developer [Rahulbot](https://github.com/rahulbot/) created a similar app [BoxMaker](https://github.com/rahulbot/boxmaker/) in Java, which was an inspiration to LaserCutter.
|
|
4
|
-
|
|
5
|
-
Laser-Cutter library attempts to further advance the concept of programmatically creating
|
|
6
|
-
laser-cut box designs, provides additional fine tuning, many more options, strategies and most
|
|
7
|
-
importantly – extensibility.
|
|
8
|
-
|
|
9
|
-
Unlike `BoxMaker` this gem has a suit of automated tests (rspecs) around the core functionality.
|
|
10
|
-
In addition, new feature contributions are highly encouraged, and in that
|
|
11
|
-
regard having existing test suit offers confidence against regressions, and thus welcomes colaboration.
|
|
12
|
-
|
|
13
|
-
Finally, BoxMaker's notch-drawing algorithm generates non-symmetric and sometimes purely broken designs
|
|
14
|
-
(see picture below).
|
|
15
|
-
|
|
16
|
-
`laser-cutter`'s algorithm will create a _symmetric design for most panels_, but it might sacrifice
|
|
17
|
-
identical notch length. Depending on the box dimensions you may end up with a slightly different notch
|
|
18
|
-
length on each side of the box.
|
|
19
|
-
|
|
20
|
-
The choice ultimately comes down to the preference and feature set, so here I show you two boxes made with
|
|
21
|
-
each program, so you can pick what you prefer.
|
|
22
|
-
|
|
23
|
-
### Example Outputs
|
|
24
|
-
|
|
25
|
-
Below are two examples of boxes with identical dimensions produced with `laser-cutter` and `boxmaker`:
|
|
26
|
-
|
|
27
|
-
This is how you would make a box with Adam Phelp's fork of BoxMaker (which adds flags and a lot of
|
|
28
|
-
niceties):
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
git clone https://github.com/aphelps/boxmaker && cd boxmaker && ant
|
|
32
|
-
java -cp BOX.jar com.rahulbotics.boxmaker.BoxMaker \
|
|
33
|
-
-W 1 -H 2 -D 1.5 -T 0.125 -n 0.125 -o box.pdf
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
And laser-cutter:
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
gem install laser-cutter
|
|
40
|
-
laser-cutter -z 1x1.5x2/0.125/0.125 -O -o box.pdf
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
.
|
|
44
|
-
|
|
45
|
-
## Contributing
|
|
46
|
-
|
|
47
|
-
1. Fork it ( https://github.com/kigster/laser-cutter/fork )
|
|
48
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
49
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
50
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
|
51
|
-
5. Create a new Pull Request
|
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
|