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.
Files changed (102) hide show
  1. checksums.yaml +5 -5
  2. data/.envrc +2 -0
  3. data/.github/workflows/lint.yml +22 -0
  4. data/.github/workflows/rspec.yml +22 -0
  5. data/.gitignore +5 -4
  6. data/.plans/001.00-dry-cli-migration/plan.md +29 -0
  7. data/.relaxed_rubocop.yml +153 -0
  8. data/.rspec +1 -1
  9. data/.rubocop.yml +31 -0
  10. data/.rubocop_todo.yml +90 -0
  11. data/.ruby-version +1 -0
  12. data/CLAUDE.md +62 -0
  13. data/CONTRIBUTING.md +2 -4
  14. data/Gemfile +14 -0
  15. data/README.md +83 -111
  16. data/Rakefile +41 -0
  17. data/docs/badges/coverage_badge.svg +21 -0
  18. data/exe/laser-cutter +8 -0
  19. data/exe/lc +1 -0
  20. data/justfile +97 -0
  21. data/laser-cutter.gemspec +26 -14
  22. data/lib/laser/cutter/aggregator.rb +101 -0
  23. data/lib/{laser-cutter → laser/cutter}/box.rb +44 -52
  24. data/lib/laser/cutter/cli/command.rb +46 -0
  25. data/lib/laser/cutter/cli/completion.rb +21 -0
  26. data/lib/laser/cutter/cli/config_file.rb +36 -0
  27. data/lib/laser/cutter/cli/examples.rb +42 -0
  28. data/lib/laser/cutter/cli/generate.rb +90 -0
  29. data/lib/laser/cutter/cli/help.rb +20 -0
  30. data/lib/laser/cutter/cli/page_sizes.rb +19 -0
  31. data/lib/laser/cutter/cli/version.rb +15 -0
  32. data/lib/laser/cutter/cli.rb +49 -0
  33. data/lib/laser/cutter/configuration.rb +101 -0
  34. data/lib/{laser-cutter → laser/cutter}/geometry/dimensions.rb +2 -3
  35. data/lib/{laser-cutter/geometry/shape → laser/cutter/geometry}/line.rb +19 -18
  36. data/lib/{laser-cutter → laser/cutter}/geometry/point.rb +4 -2
  37. data/lib/{laser-cutter/geometry/shape → laser/cutter/geometry}/rect.rb +6 -7
  38. data/lib/{laser-cutter → laser/cutter}/geometry/shape.rb +7 -7
  39. data/lib/{laser-cutter → laser/cutter}/geometry/tuple.rb +40 -36
  40. data/lib/laser/cutter/launcher.rb +40 -0
  41. data/lib/laser/cutter/missing_option.rb +7 -0
  42. data/lib/laser/cutter/notching/base.rb +19 -0
  43. data/lib/{laser-cutter → laser/cutter}/notching/edge.rb +21 -20
  44. data/lib/laser/cutter/notching/infinite_iterator.rb +27 -0
  45. data/lib/{laser-cutter → laser/cutter}/notching/path_generator.rb +27 -60
  46. data/lib/laser/cutter/notching/shift.rb +17 -0
  47. data/lib/laser/cutter/page_manager.rb +50 -0
  48. data/lib/{laser-cutter → laser/cutter}/renderer/base.rb +3 -2
  49. data/lib/laser/cutter/renderer/box_renderer.rb +40 -0
  50. data/lib/laser/cutter/renderer/layout_renderer.rb +61 -0
  51. data/lib/laser/cutter/renderer/line_renderer.rb +21 -0
  52. data/lib/laser/cutter/renderer/meta_renderer.rb +83 -0
  53. data/lib/{laser-cutter → laser/cutter}/renderer/rect_renderer.rb +3 -1
  54. data/lib/laser/cutter/renderer/svg_renderer.rb +65 -0
  55. data/lib/laser/cutter/renderer.rb +24 -0
  56. data/lib/laser/cutter/units_converter.rb +15 -0
  57. data/lib/laser/cutter/version.rb +7 -0
  58. data/lib/laser/cutter/zero_value_not_allowed.rb +7 -0
  59. data/lib/laser/cutter.rb +29 -0
  60. data/lib/laser-cutter.rb +2 -14
  61. data/lib/laser_cutter.rb +3 -0
  62. data/spec/laser/cutter/aggregator_spec.rb +70 -0
  63. data/spec/laser/cutter/box_spec.rb +61 -0
  64. data/spec/laser/cutter/cli/config_file_spec.rb +31 -0
  65. data/spec/laser/cutter/cli_spec.rb +186 -0
  66. data/spec/laser/cutter/configuration_spec.rb +101 -0
  67. data/spec/{dimensions_spec.rb → laser/cutter/dimensions_spec.rb} +8 -6
  68. data/spec/laser/cutter/edge_spec.rb +64 -0
  69. data/spec/{line_spec.rb → laser/cutter/line_spec.rb} +26 -20
  70. data/spec/{page_manager_spec.rb → laser/cutter/page_manager_spec.rb} +27 -11
  71. data/spec/{path_generator_spec.rb → laser/cutter/path_generator_spec.rb} +18 -14
  72. data/spec/{point_spec.rb → laser/cutter/point_spec.rb} +27 -22
  73. data/spec/{rect_spec.rb → laser/cutter/rect_spec.rb} +9 -5
  74. data/spec/laser/cutter/renderer/layout_renderer_spec.rb +102 -0
  75. data/spec/laser/cutter/renderer/svg_renderer_spec.rb +51 -0
  76. data/spec/laser/cutter/renderer_spec.rb +19 -0
  77. data/spec/spec_helper.rb +34 -25
  78. data/spec/support/aruba.rb +10 -0
  79. metadata +206 -80
  80. data/.travis.yml +0 -11
  81. data/LICENSE +0 -22
  82. data/bin/laser-cutter +0 -19
  83. data/lib/laser-cutter/aggregator.rb +0 -57
  84. data/lib/laser-cutter/cli/opt_parser.rb +0 -131
  85. data/lib/laser-cutter/cli/serializer.rb +0 -51
  86. data/lib/laser-cutter/configuration.rb +0 -83
  87. data/lib/laser-cutter/geometry.rb +0 -11
  88. data/lib/laser-cutter/notching/base.rb +0 -13
  89. data/lib/laser-cutter/notching.rb +0 -10
  90. data/lib/laser-cutter/page_manager.rb +0 -43
  91. data/lib/laser-cutter/renderer/box_renderer.rb +0 -36
  92. data/lib/laser-cutter/renderer/layout_renderer.rb +0 -59
  93. data/lib/laser-cutter/renderer/line_renderer.rb +0 -17
  94. data/lib/laser-cutter/renderer/meta_renderer.rb +0 -77
  95. data/lib/laser-cutter/renderer.rb +0 -14
  96. data/lib/laser-cutter/version.rb +0 -5
  97. data/spec/aggregator_spec.rb +0 -65
  98. data/spec/box_spec.rb +0 -40
  99. data/spec/configuration_spec.rb +0 -81
  100. data/spec/edge_spec.rb +0 -43
  101. data/spec/renderer_spec.rb +0 -72
  102. /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: 1.0.3
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Gredeskoul
8
- autorequire:
9
- bindir: bin
8
+ bindir: exe
10
9
  cert_chain: []
11
- date: 2014-11-01 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
- name: prawn
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: colored
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: bundler
97
+ name: pastel
57
98
  requirement: !ruby/object:Gem::Requirement
58
99
  requirements:
59
- - - "~>"
100
+ - - ">="
60
101
  - !ruby/object:Gem::Version
61
- version: '1.6'
62
- type: :development
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: '1.6'
109
+ version: '0'
69
110
  - !ruby/object:Gem::Dependency
70
- name: rake
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: :development
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: rspec
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: :development
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: rspec-legacy_formatters
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: :development
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: codeclimate-test-reporter
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: :development
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
- - ".travis.yml"
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
- - bin/laser-cutter
146
- - doc/comparison.jpg
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-cutter/aggregator.rb
150
- - lib/laser-cutter/box.rb
151
- - lib/laser-cutter/cli/opt_parser.rb
152
- - lib/laser-cutter/cli/serializer.rb
153
- - lib/laser-cutter/configuration.rb
154
- - lib/laser-cutter/geometry.rb
155
- - lib/laser-cutter/geometry/dimensions.rb
156
- - lib/laser-cutter/geometry/point.rb
157
- - lib/laser-cutter/geometry/shape.rb
158
- - lib/laser-cutter/geometry/shape/line.rb
159
- - lib/laser-cutter/geometry/shape/rect.rb
160
- - lib/laser-cutter/geometry/tuple.rb
161
- - lib/laser-cutter/notching.rb
162
- - lib/laser-cutter/notching/base.rb
163
- - lib/laser-cutter/notching/edge.rb
164
- - lib/laser-cutter/notching/path_generator.rb
165
- - lib/laser-cutter/page_manager.rb
166
- - lib/laser-cutter/renderer.rb
167
- - lib/laser-cutter/renderer/base.rb
168
- - lib/laser-cutter/renderer/box_renderer.rb
169
- - lib/laser-cutter/renderer/layout_renderer.rb
170
- - lib/laser-cutter/renderer/line_renderer.rb
171
- - lib/laser-cutter/renderer/meta_renderer.rb
172
- - lib/laser-cutter/renderer/rect_renderer.rb
173
- - lib/laser-cutter/version.rb
174
- - spec/aggregator_spec.rb
175
- - spec/box_spec.rb
176
- - spec/configuration_spec.rb
177
- - spec/dimensions_spec.rb
178
- - spec/edge_spec.rb
179
- - spec/line_spec.rb
180
- - spec/page_manager_spec.rb
181
- - spec/path_generator_spec.rb
182
- - spec/point_spec.rb
183
- - spec/rect_spec.rb
184
- - spec/renderer_spec.rb
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
- post_install_message:
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
- rubyforge_project:
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
@@ -1,11 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.1.3
4
- script: "CODECLIMATE_REPO_TOKEN=6520104decf84e2f6c2c169d30d67976bfcdaa48cd89b4ec34f6e637f2a0ae02 bundle exec rspec"
5
- notifications:
6
- email:
7
- recipients:
8
- - kigster@gmail.com
9
- on_success: never
10
- on_failure: always
11
-
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