laser-cutter 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a4b3007500f32bdfa746101e673e39f1926dbff
4
- data.tar.gz: c78f838314670acc0dbe0a938a30ce558e625539
3
+ metadata.gz: 32ce72abddaaccd285d8dbcbf03b9a7644bf0a91
4
+ data.tar.gz: df1bfc141e15b055e054dd70cbf921460f663ce2
5
5
  SHA512:
6
- metadata.gz: cdfc3dae22670701459a011656d8f3e6b2b3afd70958de0caf132067f85d4b01159fefe32974e7a694143d55b321519f2514cdb6d8b7d76742bcd7f5df8430a6
7
- data.tar.gz: ba642a3dcfb26df3626e153ce003452fe2d5e91a94ffa01074c6cf276a9fe8169104a981a993d5fd622096358a0184bc78f54a7e5a2b052df6b3359a46546590
6
+ metadata.gz: 14f27fcf968d47af5505d7430022c02b6b69c33aec68102822ad5b80bb6915e44783509e94e4e169b8ee5af840fdc1173116138b239ac184cb52521d99e5ab13
7
+ data.tar.gz: 90c95f1f44c2ae2f0f15ae978faf130e2a3a62316bf405a719ef70fd26354695f0e905eedf9f440d2d3d591a5ec48ad8cf839c4302ee4fca1c449c217516498a
data/Gemfile CHANGED
@@ -3,4 +3,3 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in laser-cutter-cutter.gemspec
4
4
  gemspec
5
5
 
6
- gem "codeclimate-test-reporter", group: :test, require: nil
data/bin/laser-cutter CHANGED
@@ -62,6 +62,7 @@ EOF
62
62
  opts.separator ""
63
63
  opts.on("-A", "--list-all-page-sizes", "Print all available page sizes with dimensions and exit") { |v| options.list_all_page_sizes = true }
64
64
  opts.on("-v", "--[no-]verbose", "Run verbosely") { |v| options.verbose = v }
65
+ opts.on("-m", "--[no-]metadata", "Print to the PDF metadata") { |value| options.metadata = value }
65
66
  opts.separator ""
66
67
  opts.on("--examples", "Show detailed usage examples") { puts opts; puts examples.yellow; exit }
67
68
  opts.on("--help", "Show this message") { puts opts; exit }
data/laser-cutter.gemspec CHANGED
@@ -26,5 +26,5 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'rake'
27
27
  spec.add_development_dependency 'rspec'
28
28
  spec.add_development_dependency 'rspec-legacy_formatters'
29
-
29
+ spec.add_development_dependency 'codeclimate-test-reporter'
30
30
  end
@@ -6,11 +6,14 @@ module Laser
6
6
  module Cutter
7
7
  class MissingOption < RuntimeError
8
8
  end
9
+ class ZeroValueNotAllowed < MissingOption
10
+ end
9
11
  class Configuration < Hashie::Mash
10
12
  DEFAULTS = {
11
13
  units: 'mm',
12
14
  page_size: 'LETTER',
13
- page_layout: 'portrait'
15
+ page_layout: 'portrait',
16
+ metadata: true
14
17
  }
15
18
 
16
19
  UNIT_SPECIFIC_DEFAULTS = {
@@ -52,18 +55,12 @@ module Laser
52
55
 
53
56
  def validate!
54
57
  missing = []
55
- REQUIRED.each do |k|
56
- missing << k if self[k].nil?
57
- end
58
- unless missing.empty?
59
- raise MissingOption.new("#{missing.join(', ')} #{missing.size > 1 ? 'are' : 'is'} required, but missing.")
60
- end
58
+ REQUIRED.each { |k| missing << k if self[k].nil? }
59
+ raise MissingOption.new("#{missing.join(', ')} #{missing.size > 1 ? 'are' : 'is'} required, but missing.") unless missing.empty?
61
60
 
62
- NON_ZERO.each do |k|
63
- if self[k] == 0
64
- raise MissingOption.new("#{missing.join(', ')} #{missing.size > 1 ? 'are' : 'is'} required, but is zero.")
65
- end
66
- end
61
+ zeros = []
62
+ NON_ZERO.each { |k| zeros << k if self[k] == 0 }
63
+ raise ZeroValueNotAllowed.new("#{zeros.join(', ')} #{zeros.size > 1 ? 'are' : 'is'} required, but is zero.") unless zeros.empty?
67
64
  end
68
65
 
69
66
  def page_size_values
@@ -91,7 +88,7 @@ module Laser
91
88
  return if (self.units.eql?(new_units) || !UNIT_SPECIFIC_DEFAULTS.keys.include?(new_units))
92
89
  k = (self.units == 'in') ? 25.4 : 0.039370079
93
90
  FLOATS.each do |field|
94
- self.send("#{field}=".to_sym, self.send(field.to_sym) * k)
91
+ self.send("#{field}=".to_sym, (self.send(field.to_sym) * k).round(5))
95
92
  end
96
93
  self.units = new_units
97
94
  end
@@ -5,6 +5,7 @@ module Laser
5
5
  module Renderer
6
6
  class BoxRenderer < AbstractRenderer
7
7
  alias_method :box, :subject
8
+
8
9
  def initialize(options = {})
9
10
  self.options = options
10
11
  self.subject = Laser::Cutter::Box.new(options)
@@ -16,41 +17,61 @@ module Laser
16
17
  :page_layout => options.page_layout.to_sym)
17
18
  header = <<-EOF
18
19
 
19
- Produced with Laser Cutter Ruby Gem (v#{Laser::Cutter::VERSION})
20
- Credits to Prawn (for ruby PDF generation),
21
- and BoxMaker (for the inspiration).
22
- © 2014 Konstantin Gredeskoul, MIT license.
20
+ Made with Laser Cutter Ruby Gem (v#{Laser::Cutter::VERSION})
21
+ Credits to Prawn for ruby PDF generation,
22
+ and BoxMaker for inspiration.
23
+
24
+ Online: http://makeabox.io/
23
25
  https://github.com/kigster/laser-cutter
24
- Generated at #{Time.new}.
25
26
  EOF
26
27
 
27
28
  renderer = self
28
29
 
30
+ meta_color = "406080"
31
+ meta_top = 150
32
+ metadata = renderer.options.to_hash
33
+ metadata.delete_if { |k| %w(verbose metadata open).include?(k) }
29
34
  pdf.instance_eval do
30
35
  self.line_width = renderer.options.stroke.send(renderer.options.units.to_sym)
31
- float do
32
- bounding_box([0, 50], :width => 150, :height => 40) do
33
- stroke_color '0080FF'
34
- stroke_bounds
35
-
36
- indent 10 do
37
- font('Courier', :size => 5) do
38
- text header, :color => "0080FF"
36
+ if renderer.options.metadata
37
+ float do
38
+ bounding_box([0, meta_top], :width => 140, :height => 150) do
39
+ stroke_color meta_color
40
+ stroke_bounds
41
+ indent 10 do
42
+ font('Helvetica', :size => 6) do
43
+ text header, :color => meta_color
44
+ end
39
45
  end
40
- end
41
- end
42
- bounding_box([480, 120], :width => 110, :height => 110) do
43
- stroke_color '00DF20'
44
- stroke_bounds
45
- indent 10 do
46
- font('Courier', :size => 6) do
47
- out = JSON.pretty_generate(renderer.options.to_hash).gsub(/[\{\}",]/,'')
48
- text out, :color => "00DF20"
46
+ float do
47
+ bounding_box([0, 100], :width => 140, :height => 100) do
48
+ stroke_color meta_color
49
+ stroke_bounds
50
+ float do
51
+ bounding_box([0, 100], :width => 70, :height => 100) do
52
+ indent 10 do
53
+ font('Helvetica', :size => 6) do
54
+ out = JSON.pretty_generate(metadata).gsub(/[\{\}",]/, '').gsub(/:.*\n/x, "\n")
55
+ text out, :color => meta_color, align: :right
56
+ end
57
+ end
58
+ end
59
+ end
60
+ float do
61
+ bounding_box([60, 100], :width => 70, :height => 100) do
62
+ indent 10 do
63
+ font('Helvetica', :size => 6) do
64
+ out = JSON.pretty_generate(metadata).gsub(/[\{\}",]/, '').gsub(/\n?.*:/x, "\n:")
65
+ text out, :color => meta_color
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
49
71
  end
50
72
  end
51
73
  end
52
74
  end
53
-
54
75
  stroke_color "000000"
55
76
  renderer.box.notches.each do |notch|
56
77
  LineRenderer.new(notch, renderer.options).render(self)
@@ -1,5 +1,5 @@
1
1
  module Laser
2
2
  module Cutter
3
- VERSION = "0.4.1"
3
+ VERSION = "0.4.3"
4
4
  end
5
5
  end
@@ -16,11 +16,20 @@ module Laser
16
16
  end
17
17
  end
18
18
  context '#validate' do
19
+ context 'missing options' do
19
20
  let(:opts) { {"height" => "23"} }
20
21
  it 'should be able to validate missing options' do
21
22
  expect(config.height).to eql(23.0)
22
23
  expect { config.validate! }.to raise_error(Laser::Cutter::MissingOption)
23
24
  end
25
+ end
26
+ context 'zero options' do
27
+ let(:opts) { {"size" => "2.0x0.0x2/0.125/0.5", "inches" => true, 'file' => '/tmp/a'} }
28
+ it 'should be able to validate missing options' do
29
+ expect(config.height).to eql(0.0)
30
+ expect { config.validate! }.to raise_error(Laser::Cutter::ZeroValueNotAllowed)
31
+ end
32
+ end
24
33
  end
25
34
  context '#list_page_sizes' do
26
35
  context 'formatting of output' do
@@ -48,14 +57,14 @@ module Laser
48
57
 
49
58
  context "#change_units" do
50
59
  context "from inches" do
51
- let(:opts) { {"size" => "2.0x3x2/0.125/0.5", 'padding' => '4.0', "units" => 'in'} }
60
+ let(:opts) { {"size" => "2.0x3x2/0.125/0.5", 'padding' => '4.2', "units" => 'in'} }
52
61
  it "should convert to mm" do
53
62
  expect(config.width).to eql(2.0)
54
63
  config.change_units('in')
55
64
  expect(config.width).to eql(2.0)
56
65
  config.change_units('mm')
57
66
  expect(config.width).to eql(50.8)
58
- expect(config.padding).to eql(101.6)
67
+ expect(config.padding).to eql(106.68)
59
68
  expect(config.units).to eql('mm')
60
69
  end
61
70
  end
@@ -66,8 +75,8 @@ module Laser
66
75
  config.change_units('mm')
67
76
  expect(config.width).to eql(20.0)
68
77
  config.change_units('in')
69
- expect(config.width).to be_within(0.001).of(0.787401575)
70
- expect(config.margin).to be_within(0.001).of(0.393700787)
78
+ expect(config.width).to be_within(0.00001).of(0.787401575)
79
+ expect(config.margin).to be_within(0.00001).of(0.393700787)
71
80
  expect(config.units).to eql('in')
72
81
  end
73
82
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: laser-cutter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Gredeskoul
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-27 00:00:00.000000000 Z
11
+ date: 2014-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prawn
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: codeclimate-test-reporter
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  description: Similar to the older BoxMaker, this ruby gem generates PDFs that can
112
126
  be used as a basis for cutting boxes on a typical laser cutter. The intention was
113
127
  to create an extensible, well tested, and modern ruby gem for generating PDF templates