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.
Files changed (104) 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 -5
  6. data/.plans/001.00-dry-cli-migration/plan.md +29 -0
  7. data/.relaxed_rubocop.yml +153 -0
  8. data/.rspec +1 -0
  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 +110 -87
  16. data/Rakefile +27 -13
  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/box.rb +173 -0
  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 +23 -22
  44. data/lib/laser/cutter/notching/infinite_iterator.rb +27 -0
  45. data/lib/{laser-cutter → laser/cutter}/notching/path_generator.rb +76 -94
  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 +35 -22
  78. data/spec/support/aruba.rb +10 -0
  79. metadata +202 -76
  80. data/.travis.yml +0 -26
  81. data/BOXMAKER.md +0 -51
  82. data/LICENSE +0 -22
  83. data/bin/laser-cutter +0 -19
  84. data/lib/laser-cutter/aggregator.rb +0 -57
  85. data/lib/laser-cutter/box.rb +0 -183
  86. data/lib/laser-cutter/cli/opt_parser.rb +0 -131
  87. data/lib/laser-cutter/cli/serializer.rb +0 -51
  88. data/lib/laser-cutter/configuration.rb +0 -83
  89. data/lib/laser-cutter/face.rb +0 -18
  90. data/lib/laser-cutter/geometry.rb +0 -11
  91. data/lib/laser-cutter/notching.rb +0 -9
  92. data/lib/laser-cutter/page_manager.rb +0 -43
  93. data/lib/laser-cutter/renderer/box_renderer.rb +0 -36
  94. data/lib/laser-cutter/renderer/layout_renderer.rb +0 -59
  95. data/lib/laser-cutter/renderer/line_renderer.rb +0 -17
  96. data/lib/laser-cutter/renderer/meta_renderer.rb +0 -77
  97. data/lib/laser-cutter/renderer.rb +0 -14
  98. data/lib/laser-cutter/version.rb +0 -5
  99. data/spec/aggregator_spec.rb +0 -65
  100. data/spec/box_spec.rb +0 -39
  101. data/spec/configuration_spec.rb +0 -81
  102. data/spec/edge_spec.rb +0 -43
  103. data/spec/renderer_spec.rb +0 -72
  104. /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: 1.0.5
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: 2018-01-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,13 +94,13 @@ dependencies:
53
94
  - !ruby/object:Gem::Version
54
95
  version: '0'
55
96
  - !ruby/object:Gem::Dependency
56
- name: yard
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: :development
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: simplecov
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: bundler
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: rake
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: rspec
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,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
- - ".travis.yml"
139
- - BOXMAKER.md
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
- - bin/laser-cutter
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-cutter/aggregator.rb
151
- - lib/laser-cutter/box.rb
152
- - lib/laser-cutter/cli/opt_parser.rb
153
- - lib/laser-cutter/cli/serializer.rb
154
- - lib/laser-cutter/configuration.rb
155
- - lib/laser-cutter/face.rb
156
- - lib/laser-cutter/geometry.rb
157
- - lib/laser-cutter/geometry/dimensions.rb
158
- - lib/laser-cutter/geometry/point.rb
159
- - lib/laser-cutter/geometry/shape.rb
160
- - lib/laser-cutter/geometry/shape/line.rb
161
- - lib/laser-cutter/geometry/shape/rect.rb
162
- - lib/laser-cutter/geometry/tuple.rb
163
- - lib/laser-cutter/notching.rb
164
- - lib/laser-cutter/notching/edge.rb
165
- - lib/laser-cutter/notching/path_generator.rb
166
- - lib/laser-cutter/page_manager.rb
167
- - lib/laser-cutter/renderer.rb
168
- - lib/laser-cutter/renderer/base.rb
169
- - lib/laser-cutter/renderer/box_renderer.rb
170
- - lib/laser-cutter/renderer/layout_renderer.rb
171
- - lib/laser-cutter/renderer/line_renderer.rb
172
- - lib/laser-cutter/renderer/meta_renderer.rb
173
- - lib/laser-cutter/renderer/rect_renderer.rb
174
- - lib/laser-cutter/version.rb
175
- - spec/aggregator_spec.rb
176
- - spec/box_spec.rb
177
- - spec/configuration_spec.rb
178
- - spec/dimensions_spec.rb
179
- - spec/edge_spec.rb
180
- - spec/line_spec.rb
181
- - spec/page_manager_spec.rb
182
- - spec/path_generator_spec.rb
183
- - spec/point_spec.rb
184
- - spec/rect_spec.rb
185
- - 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
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
- post_install_message:
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
- rubyforge_project:
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
- ![LaserCutter Comparison](docs/comparison.jpg).
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