engineering 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: edf0dffae8854098af2df322958e8540d05676a2
4
+ data.tar.gz: f1a408fab212a5268b6a10f81117dd9c5be3c6c1
5
+ SHA512:
6
+ metadata.gz: 8427c54453c06709181a6ac2f8c7480af92bab90c4a59dd8482bdc6f5d20770acf13204b82cc1facb74259cd39ef16255796ce37e081725f78b640f8fd6ae042
7
+ data.tar.gz: 406eb9aa3eb061de7b520f6e6c1ddbced71fa279aec59c7c2e18312f9a6a9c2457cb3e94cbbafb6d3cd65dfd965fbb53efa779f2f647b1e8bcce675fc05447d5
data/Gemfile CHANGED
@@ -3,4 +3,5 @@ source "http://rubygems.org"
3
3
  # Specify your gem's dependencies in engineering.gemspec
4
4
  gemspec
5
5
 
6
- gem 'units', github: 'bfoz/units'
6
+ gem 'model', github: 'bfoz/model'
7
+ gem 'units', github: 'bfoz/units-ruby
@@ -14,13 +14,13 @@ the module and adds whatever is missing, if that's more your style.
14
14
  License
15
15
  -------
16
16
 
17
- Copyright 2012-2013 Brandon Fosdick <bfoz@bfoz.net> and released under the BSD license.
17
+ Copyright 2012-2014 Brandon Fosdick <bfoz@bfoz.net> and released under the BSD license.
18
18
 
19
19
  Dependencies
20
20
  ------------
21
21
 
22
22
  - DXF [GitHub](http://github.com/bfoz/ruby-dxf) [RubyGems](https://rubygems.org/gems/dxf)
23
- - Units [GitHub](https://github.com/bfoz/units)
23
+ - Units [GitHub](https://github.com/bfoz/units-ruby)
24
24
  - Geometry [GitHub](https://github.com/bfoz/geometry) [RubyGems](https://rubygems.org/gems/geometry)
25
25
  - Sketch [GitHub](https://github.com/bfoz/sketch)
26
26
  - Model [GitHub](https://github.com/bfoz/model)
@@ -30,7 +30,7 @@ Installation
30
30
 
31
31
  Engineering has a number of dependencies. Some of which are hosted on rubygems.org
32
32
  and can therefore be handled by the gem utility, but others must be installed
33
- manually. The easiest option is to use [Bundler](http://gembundler.com/), but
33
+ manually. The easiest option is to use [Bundler](http://bundler.io/), but
34
34
  *gem* can be used if you're willing to install the *units* gem manually.
35
35
 
36
36
  ### Using Bundler
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "engineering"
6
- s.version = 0.1
6
+ s.version = '0.2'
7
7
  s.authors = ["Brandon Fosdick"]
8
8
  s.email = ["bfoz@bfoz.net"]
9
9
  s.homepage = "http://github.com/bfoz/engineering"
@@ -17,8 +17,9 @@ Gem::Specification.new do |s|
17
17
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
18
  s.require_paths = ["lib"]
19
19
 
20
- s.add_dependency 'dxf'
21
- s.add_dependency 'model'
22
- s.add_dependency 'sketch'
23
- s.add_dependency 'units', '>= 2'
20
+ s.add_dependency 'dxf', '~> 0.2'
21
+ s.add_dependency 'geometry', '~> 6.1'
22
+ s.add_dependency 'model', '~> 0.1'
23
+ s.add_dependency 'sketch', '~> 0.2'
24
+ s.add_dependency 'units', '~> 2.2'
24
25
  end
@@ -17,47 +17,70 @@ module Engineering
17
17
  private
18
18
 
19
19
  # Create a new {Extrusion} subclass and initialize it with the given block
20
- # @param [Symbol] symbol The name of the resulting subclass
21
- # @return [Extrusion]
22
- def extrusion(symbol=nil, &block)
20
+ # @param name [Symbol] The name of the resulting subclass
21
+ def extrusion(symbol, &block)
22
+ builder = Model::Extrusion::Builder.new
23
+ builder.evaluate(&block) if block_given?
24
+ initial_arguments = {sketch: builder.extrusion.sketch, length: builder.extrusion.length}.select {|k,v| v }
25
+
23
26
  klass = Class.new(Model::Extrusion)
24
- klass.const_set(:INITIALIZER_BLOCK, block)
25
- klass.class_eval %q[
26
- def initialize(*args)
27
- super
28
- Model::Extrusion::Builder.new(self).evaluate(&INITIALIZER_BLOCK)
29
- end
30
- ]
31
- symbol ? Object.const_set(symbol, klass) : klass
27
+
28
+ if initial_arguments.has_key?(:length)
29
+ klass.instance_variable_set :@length, initial_arguments[:length]
30
+ klass.class.send(:define_method, :length) { @length }
31
+ end
32
+
33
+ klass.instance_variable_set :@sketch, initial_arguments[:sketch]
34
+ klass.class.send(:define_method, :sketch) { @sketch }
35
+
36
+ klass.send :define_method, :initialize do |options={}, &block|
37
+ raise ArgumentError, "Can't initialize with a length when #{self} already has a length attribute" if initial_arguments.has_key?(:length) and options.has_key?(:length)
38
+ super initial_arguments.merge(options), &block
39
+ end
40
+
41
+ Object.const_set(symbol, klass)
32
42
  end
33
43
 
34
44
  # Create a new {Model} subclass and initialize it with the given block
35
- # @param [Symbol] symbol The name of the {Model} subclass
36
- # @return [Model]
37
- def model(symbol=nil, &block)
45
+ # @param name [Symbol] The name of the new {Model} subclass
46
+ def model(name, &block)
38
47
  klass = Class.new(Model)
39
- klass.const_set(:INITIALIZER_BLOCK, block)
40
- klass.class_eval %q[
41
- def initialize(*args)
42
- super
43
- Model::Builder.new(self).evaluate(&INITIALIZER_BLOCK)
44
- end
45
- ]
46
- symbol ? Object.const_set(symbol, klass) : klass
48
+ builder = Model::Builder.new
49
+ builder.evaluate(&block) if block_given?
50
+ initial_elements = builder.elements
51
+
52
+ # The defaults are hidden in an instance variable so that the passed block can't accidentally corrupt them
53
+ attribute_defaults = builder.instance_variable_get(:@attribute_defaults) || {}
54
+
55
+ # Bind any attribute getters and setters to the new subclass
56
+ attribute_getters = builder.instance_variable_get(:@attribute_getters) || {}
57
+ attribute_getters.each {|k, m| klass.send :define_method, k, m }
58
+
59
+ attribute_setters = builder.instance_variable_get(:@attribute_setters) || {}
60
+ attribute_setters.each {|k, m| klass.send :define_method, k, m }
61
+
62
+ klass.send :define_method, :initialize do |*args, &block|
63
+ super *(attribute_defaults.map {|k,v| { k => (v.respond_to?(:call) ? v.call : v) } }), *args, &block
64
+ initial_elements.each {|a| push a }
65
+ end
66
+
67
+ Object.const_set(name, klass)
47
68
  end
48
69
 
49
70
  # Create a new {Sketch} subclass and initialize it with the given block
50
- # @param [Symbol] symbol The name of the {Sketch} subclass
51
- def sketch(symbol=nil, &block)
71
+ # @param name [Symbol] The name of the {Sketch} subclass
72
+ def sketch(symbol, &block)
73
+ builder = Sketch::Builder.new
74
+ builder.evaluate(&block) if block_given?
75
+ initial_elements = builder.elements
76
+
52
77
  klass = Class.new(Sketch)
53
- klass.const_set(:INITIALIZER_BLOCK, block)
54
- klass.class_eval %q[
55
- def initialize(*args)
56
- super
57
- Sketch::Builder.new(self).evaluate(&INITIALIZER_BLOCK)
58
- end
59
- ]
60
- symbol ? Object.const_set(symbol, klass) : klass
78
+ klass.send :define_method, :initialize do |*args, &block|
79
+ super *args, &block
80
+ initial_elements.each {|a| push a }
81
+ end
82
+
83
+ Object.const_set(symbol, klass)
61
84
  end
62
85
 
63
86
  class Geometry::Polygon
@@ -31,7 +31,7 @@ module SketchUp
31
31
  end
32
32
 
33
33
  def to_a
34
- a = to_array(@container) # Generates the definitions as a side effect
34
+ a = to_array(@container) || [] # Generates the definitions as a side effect
35
35
  HEADER_LINES + @definition_names.values.flatten + a
36
36
  end
37
37
 
@@ -101,12 +101,21 @@ module SketchUp
101
101
  else
102
102
  container.elements.map {|element| to_array(element, parent) }.flatten
103
103
  end
104
- when Sketch
105
- container.geometry.map {|element| to_sketchup(element, parent, transformation) }
104
+ when Sketch::Group
105
+ container.geometry.map {|element| to_sketchup(element, parent, container.transformation) }.flatten
106
+ when Sketch # !!! Must be after all subclasses of Sketch
107
+ container.geometry.map do |element|
108
+ case element
109
+ when Sketch::Group then to_array(element, parent)
110
+ else
111
+ to_sketchup(element, parent, transformation)
112
+ end
113
+ end.flatten
106
114
  end
107
115
  end
108
116
 
109
117
  # Convert the given entity to a string that SketchUp can read
118
+ # @return [String]
110
119
  def to_sketchup(entity, parent='model.entities', transformation=nil)
111
120
  case entity
112
121
  when Array
@@ -114,7 +123,7 @@ module SketchUp
114
123
  when Geometry::Arc
115
124
  "#{parent}.add_arc(#{to_sketchup(entity.center)}, [1,0,0], [0,0,1], #{to_sketchup(entity.radius)}, #{to_sketchup(entity.start_angle)}, #{to_sketchup(entity.end_angle)})"
116
125
  when Geometry::Circle
117
- "lambda{ points = #{parent}.add_circle(#{to_sketchup(entity.center)}, [0,0,1], #{to_sketchup(entity.radius)}); points[0].find_faces; points[0].faces[0]}.call"
126
+ "lambda{ points = #{parent}.add_circle(#{to_sketchup(entity.center, parent, transformation)}, [0,0,1], #{to_sketchup(entity.radius)}); points[0].find_faces; points[0].faces[0]}.call"
118
127
  when Geometry::Edge
119
128
  "#{parent}.add_edges(#{to_sketchup(entity.first)}, #{to_sketchup(entity.last)})"
120
129
  when Geometry::Line
@@ -126,6 +135,8 @@ module SketchUp
126
135
  vertices = entity.vertices.map {|v| to_sketchup(v, parent, transformation) }.join ', '
127
136
  method = entity.is_a?(Geometry::Polygon) ? 'add_face' : 'add_curve'
128
137
  "#{parent}.#{method}(#{vertices})"
138
+ when Geometry::PointZero
139
+ to_sketchup(Point[0,0], parent, transformation)
129
140
  when Geometry::Point
130
141
  if transformation and not transformation.identity?
131
142
  'Geom::Point3d.new(' + to_sketchup(entity.to_a) + ').transform!(' + to_sketchup(transformation) + ')'
@@ -138,8 +149,8 @@ module SketchUp
138
149
  "#{parent}.add_face(#{to_sketchup(entity.points, parent, transformation)})"
139
150
  when Geometry::Transformation
140
151
  pt = '[' + (entity.translation ? to_sketchup(entity.translation.to_a) : '0,0,0') + ']'
141
- x_axis = '[' + (entity.rotation.x ? to_sketchup(entity.rotation.x.to_a) : '1,0,0') + ']'
142
- y_axis = '[' + (entity.rotation.y ? to_sketchup(entity.rotation.y.to_a) : '0,1,0') + ']'
152
+ x_axis = '[' + ((entity.rotation && entity.rotation.x) ? to_sketchup(entity.rotation.x.to_a) : '1,0,0') + ']'
153
+ y_axis = '[' + ((entity.rotation && entity.rotation.y) ? to_sketchup(entity.rotation.y.to_a) : '0,1,0') + ']'
143
154
  "Geom::Transformation.new(#{[pt,x_axis,y_axis].join(',')})"
144
155
  when Geometry::Triangle
145
156
  "#{parent}.add_face(#{to_sketchup(entity.points, parent, transformation)})"
@@ -150,7 +161,7 @@ module SketchUp
150
161
  when Units
151
162
  s = entity.to_s
152
163
  SKETCHUP_UNITS[s] or raise "SketchUp won't recognize '#{s}'"
153
- when Units::Literal
164
+ when Units::Numeric
154
165
  [entity.value, entity.units].compact.map {|a| to_sketchup(a)}.join '.'
155
166
  else
156
167
  entity.to_s
@@ -75,6 +75,45 @@ describe Engineering do
75
75
  end
76
76
  end
77
77
 
78
+ describe 'when creating a Model subclass with attributes' do
79
+ before do
80
+ model :TestModel4 do
81
+ attribute :attribute0
82
+ end
83
+ end
84
+
85
+ it 'must define the attributes' do
86
+ TestModel4.new.must_be :respond_to?, :attribute0
87
+ TestModel4.new.must_be :respond_to?, :attribute0=
88
+ end
89
+
90
+ it 'must have working accessors' do
91
+ test_model = TestModel4.new
92
+ test_model.attribute0 = 42
93
+ test_model.attribute0.must_equal 42
94
+ end
95
+
96
+ it 'must be able to initialize the attribute during construction' do
97
+ TestModel4.new(attribute0: 37).attribute0.must_equal 37
98
+ end
99
+ end
100
+
101
+ describe 'when creating a Model subclass with attributes that have default values' do
102
+ subject do
103
+ model :TestModel5 do
104
+ attribute :attribute0, 42
105
+ end
106
+ end
107
+
108
+ it 'must have the default value' do
109
+ subject.new.attribute0.must_equal 42
110
+ end
111
+
112
+ it 'must allow the default value to be overriden' do
113
+ subject.new(attribute0: 24).attribute0.must_equal 24
114
+ end
115
+ end
116
+
78
117
  describe "when creating an Extrusion subclass" do
79
118
  after do
80
119
  Object.send(:remove_const, :TestExtrusion)
@@ -94,6 +133,10 @@ describe Engineering do
94
133
  (TestExtrusion < Model::Extrusion).must_equal true
95
134
  end
96
135
 
136
+ it 'must have a class attribute for the Sketch' do
137
+ TestExtrusion.sketch.must_be_kind_of Sketch
138
+ end
139
+
97
140
  describe "when initializing a new instance" do
98
141
  subject { TestExtrusion.new(length: 5) }
99
142
 
@@ -107,6 +150,31 @@ describe Engineering do
107
150
  end
108
151
  end
109
152
 
153
+ describe 'when creating an Extrusion subclass with a length' do
154
+ after { Object.send :remove_const, :TestExtrusion }
155
+
156
+ before do
157
+ extrusion :TestExtrusion do
158
+ length 10
159
+ square 5
160
+ end
161
+ end
162
+
163
+ it 'must have a class attribute for the length' do
164
+ TestExtrusion.length.must_equal 10
165
+ end
166
+
167
+ describe 'when initializing a new instance' do
168
+ it 'must reject a length argument' do
169
+ -> { TestExtrusion.new(length:5) }.must_raise ArgumentError
170
+ end
171
+
172
+ it 'must have the proper length' do
173
+ TestExtrusion.new.length.must_equal 10
174
+ end
175
+ end
176
+ end
177
+
110
178
  describe "when creating a Model that uses global constants" do
111
179
  before do
112
180
  LENGTH = 5
@@ -0,0 +1,3 @@
1
+ model = Sketchup.active_model
2
+ model.entities.clear!
3
+ model.definitions.purge_unused
@@ -0,0 +1,4 @@
1
+ model = Sketchup.active_model
2
+ model.entities.clear!
3
+ model.definitions.purge_unused
4
+ model.entities.add_face([5.0, 0.0], [2.5000000000000004, 4.330127018922193], [-2.499999999999999, 4.3301270189221945], [-5.0, 6.123233995736766e-16], [-2.500000000000002, -4.330127018922192], [2.4999999999999964, -4.330127018922195])
@@ -0,0 +1,4 @@
1
+ model = Sketchup.active_model
2
+ model.entities.clear!
3
+ model.definitions.purge_unused
4
+ model.entities.add_line([0, 0], [1, 0])
@@ -0,0 +1,4 @@
1
+ model = Sketchup.active_model
2
+ model.entities.clear!
3
+ model.definitions.purge_unused
4
+ model.entities.add_face([0, 0], [0, 1], [1, 1], [1, 0])
@@ -0,0 +1,4 @@
1
+ model = Sketchup.active_model
2
+ model.entities.clear!
3
+ model.definitions.purge_unused
4
+ model.entities.add_face([0, 0], [0, 20], [10, 20], [10, 0]).pushpull(-5)
@@ -0,0 +1,4 @@
1
+ model = Sketchup.active_model
2
+ model.entities.clear!
3
+ model.definitions.purge_unused
4
+ model.entities.add_face([0, 0], [0, 10], [1.m, 10], [1.m, 0]).pushpull(-5.m)
@@ -0,0 +1,4 @@
1
+ model = Sketchup.active_model
2
+ model.entities.clear!
3
+ model.definitions.purge_unused
4
+ lambda{ points = model.entities.add_circle(Geom::Point3d.new(0, 0).transform!(Geom::Transformation.new([1, 2],[1,0,0],[0,1,0])), [0,0,1], 0.5); points[0].find_faces; points[0].faces[0]}.call
@@ -20,4 +20,12 @@ describe Geometry::Edge do
20
20
  edge.last.must_equal Point[4.meters, 5.meters]
21
21
  end
22
22
  end
23
+
24
+ it "must preserve units in the vector method" do
25
+ Edge.new([0.meters, 0.meters], [1.meter, 0.meters]).vector.must_equal Point[1.meter, 0.meters]
26
+ end
27
+
28
+ it "must not preserve units in the direction method" do
29
+ Edge.new([0.meters, 0.meters], [1.meter, 0.meters]).direction.must_equal Point[1, 0]
30
+ end
23
31
  end
@@ -15,7 +15,7 @@ describe Model::Builder do
15
15
  before do
16
16
  builder.evaluate do
17
17
  extrude length:10.meters, sketch:Sketch.new do
18
- rectangle 5, 6
18
+ rectangle size:[5, 6]
19
19
  end
20
20
  end
21
21
  end
@@ -2,6 +2,8 @@ require 'minitest/autorun'
2
2
  require 'sketchup'
3
3
 
4
4
  describe SketchUp::Builder do
5
+ Size = Geometry::Size
6
+
5
7
  subject { SketchUp::Builder.new }
6
8
 
7
9
  before do
@@ -27,7 +29,7 @@ describe SketchUp::Builder do
27
29
  describe "when given an empty Model object" do
28
30
  before do
29
31
  model = Model.new
30
- model.add_extrusion Model::Extrusion.new(length:5, sketch:Sketch.new)
32
+ model.push Model::Extrusion.new(length:5, sketch:Sketch.new)
31
33
  @builder.container = model
32
34
  end
33
35
 
@@ -38,10 +40,10 @@ describe SketchUp::Builder do
38
40
 
39
41
  describe "when given a Model of a translated Extrusion" do
40
42
  sketch = Sketch.new
41
- sketch.add_rectangle 10, 20
43
+ sketch.add_rectangle size:[10, 20]
42
44
  before do
43
45
  subject.container = Model.new do
44
- add_extrusion Model::Extrusion.new(length:5, sketch:sketch, transformation:Geometry::Transformation.new(origin:[1,2,3]))
46
+ push Model::Extrusion.new(length:5, sketch:sketch, transformation:Geometry::Transformation.new(origin:[1,2,3]))
45
47
  end
46
48
  end
47
49
 
@@ -52,9 +54,9 @@ describe SketchUp::Builder do
52
54
 
53
55
  it "should generate the correct text from a Model of a simple extrusion" do
54
56
  sketch = Sketch.new
55
- sketch.add_rectangle 10, 20
57
+ sketch.add_rectangle size:[10, 20]
56
58
  model = Model.new do
57
- add_extrusion Model::Extrusion.new(length:5, sketch:sketch)
59
+ push Model::Extrusion.new(length:5, sketch:sketch)
58
60
  end
59
61
  @builder.container = model
60
62
  @builder.to_s.must_equal File.read('test/fixtures/sketchup/simple_extrusion.su')
@@ -62,9 +64,9 @@ describe SketchUp::Builder do
62
64
 
63
65
  it "should generate the correct text from a Model of a simple extrusion with units" do
64
66
  sketch = Sketch.new
65
- sketch.add_rectangle 1.meter, 10
67
+ sketch.add_rectangle size:[1.meter, 10]
66
68
  model = Model.new
67
- model.add_extrusion Model::Extrusion.new(length:5.meters, sketch:sketch)
69
+ model.push Model::Extrusion.new(length:5.meters, sketch:sketch)
68
70
  @builder.container = model
69
71
  @builder.to_s.must_equal File.read('test/fixtures/sketchup/simple_extrusion_units.su')
70
72
  end
@@ -81,9 +83,16 @@ describe SketchUp::Builder do
81
83
  @builder.to_s.must_equal File.read('test/fixtures/sketchup/line_sketch.su')
82
84
  end
83
85
 
86
+ describe "when given a Sketch" do
87
+ it "must RegularPolygon" do
88
+ subject.container = Sketch.new.tap {|s| s.push RegularPolygon.new(sides:6, center:[0,0], radius:5) }
89
+ subject.to_s.must_equal File.read('test/fixtures/sketchup/hexagon_sketch.su')
90
+ end
91
+ end
92
+
84
93
  it "should generate correct text from a Sketch object with a single Rectangle" do
85
94
  sketch = Sketch.new
86
- sketch.add_rectangle [0,0], Geometry::Size[1,1]
95
+ sketch.add_rectangle origin:[0,0], size:[1,1]
87
96
  @builder.container = sketch
88
97
  @builder.to_s.must_equal rectangle_sketch_fixture
89
98
  end
@@ -109,9 +118,23 @@ describe SketchUp::Builder do
109
118
  builder.to_s.must_match %r{model = Sketchup.active_model\nmodel.entities.clear!\nmodel.definitions.purge_unused\nlambda {|m|\n\t\n}.call(model.definitions.add('Model(\d+)'))\nmodel.entities.add_instance(model.definitions\['Model(\d+)'\], Geom::Transformation.new(\[3, 2, 1\],\[1,0,0\],\[0,1,0\]))}
110
119
  end
111
120
 
121
+ describe "when unparsing a Sketch" do
122
+ describe "when the Sketch has a Group" do
123
+ before do
124
+ builder = Sketch::Builder.new
125
+ builder.group origin:[1,2] { circle diameter:1 }
126
+ subject.container = builder.sketch
127
+ end
128
+
129
+ it "must generate the correct text" do
130
+ subject.to_s.must_equal File.read('test/fixtures/sketchup/sketch_group.su')
131
+ end
132
+ end
133
+ end
134
+
112
135
  it "Path" do
113
136
  sketch = Sketch.new
114
- sketch.add_path [0,0], Geometry::Arc.new([0,0],5,0,90*Math::PI/180), [0,0]
137
+ sketch.add_path [0,0], Geometry::Arc.new(center:[0,0], radius:5, start:0, end:90*Math::PI/180), [0,0]
115
138
  builder = SketchUp::Builder.new( Model::Builder.new.evaluate { extrude length:5, sketch:sketch })
116
139
  end
117
140
  end
@@ -8,10 +8,10 @@ require 'units'
8
8
  # there's no good way to test their integration at a lower level.
9
9
 
10
10
  def Literal(*args)
11
- Units::Literal.new(*args)
11
+ Units::Numeric.new(*args)
12
12
  end
13
13
 
14
- describe Units::Literal do
14
+ describe Units::Numeric do
15
15
  let(:one_meter) { Literal(1, :meter) }
16
16
  let(:three_meters) { Literal(3, :meters) }
17
17
  let(:four_meters) { Literal(4, :meters) }
metadata CHANGED
@@ -1,80 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: engineering
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
5
- prerelease:
4
+ version: '0.2'
6
5
  platform: ruby
7
6
  authors:
8
7
  - Brandon Fosdick
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-04-21 00:00:00.000000000 Z
11
+ date: 2014-01-13 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: dxf
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ~>
20
18
  - !ruby/object:Gem::Version
21
- version: '0'
19
+ version: '0.2'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ~>
28
25
  - !ruby/object:Gem::Version
29
- version: '0'
26
+ version: '0.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: geometry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '6.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '6.1'
30
41
  - !ruby/object:Gem::Dependency
31
42
  name: model
32
43
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
44
  requirements:
35
- - - ! '>='
45
+ - - ~>
36
46
  - !ruby/object:Gem::Version
37
- version: '0'
47
+ version: '0.1'
38
48
  type: :runtime
39
49
  prerelease: false
40
50
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
51
  requirements:
43
- - - ! '>='
52
+ - - ~>
44
53
  - !ruby/object:Gem::Version
45
- version: '0'
54
+ version: '0.1'
46
55
  - !ruby/object:Gem::Dependency
47
56
  name: sketch
48
57
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
58
  requirements:
51
- - - ! '>='
59
+ - - ~>
52
60
  - !ruby/object:Gem::Version
53
- version: '0'
61
+ version: '0.2'
54
62
  type: :runtime
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
- - - ! '>='
66
+ - - ~>
60
67
  - !ruby/object:Gem::Version
61
- version: '0'
68
+ version: '0.2'
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: units
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
- - - ! '>='
73
+ - - ~>
68
74
  - !ruby/object:Gem::Version
69
- version: '2'
75
+ version: '2.2'
70
76
  type: :runtime
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
- - - ! '>='
80
+ - - ~>
76
81
  - !ruby/object:Gem::Version
77
- version: '2'
82
+ version: '2.2'
78
83
  description: Tools for Mad Engineers and those who want to be
79
84
  email:
80
85
  - bfoz@bfoz.net
@@ -90,6 +95,13 @@ files:
90
95
  - lib/engineering.rb
91
96
  - lib/sketchup.rb
92
97
  - test/engineering.rb
98
+ - test/fixtures/sketchup/empty.su
99
+ - test/fixtures/sketchup/hexagon_sketch.su
100
+ - test/fixtures/sketchup/line_sketch.su
101
+ - test/fixtures/sketchup/rectangle_sketch.su
102
+ - test/fixtures/sketchup/simple_extrusion.su
103
+ - test/fixtures/sketchup/simple_extrusion_units.su
104
+ - test/fixtures/sketchup/sketch_group.su
93
105
  - test/fixtures/translated_extrusion.su
94
106
  - test/geometry.rb
95
107
  - test/geometry/edge.rb
@@ -102,30 +114,36 @@ files:
102
114
  - test/units/literal.rb
103
115
  homepage: http://github.com/bfoz/engineering
104
116
  licenses: []
117
+ metadata: {}
105
118
  post_install_message:
106
119
  rdoc_options: []
107
120
  require_paths:
108
121
  - lib
109
122
  required_ruby_version: !ruby/object:Gem::Requirement
110
- none: false
111
123
  requirements:
112
- - - ! '>='
124
+ - - '>='
113
125
  - !ruby/object:Gem::Version
114
126
  version: '0'
115
127
  required_rubygems_version: !ruby/object:Gem::Requirement
116
- none: false
117
128
  requirements:
118
- - - ! '>='
129
+ - - '>='
119
130
  - !ruby/object:Gem::Version
120
131
  version: '0'
121
132
  requirements: []
122
133
  rubyforge_project: engineering
123
- rubygems_version: 1.8.25
134
+ rubygems_version: 2.1.11
124
135
  signing_key:
125
- specification_version: 3
136
+ specification_version: 4
126
137
  summary: Mad Engineering, Ruby style
127
138
  test_files:
128
139
  - test/engineering.rb
140
+ - test/fixtures/sketchup/empty.su
141
+ - test/fixtures/sketchup/hexagon_sketch.su
142
+ - test/fixtures/sketchup/line_sketch.su
143
+ - test/fixtures/sketchup/rectangle_sketch.su
144
+ - test/fixtures/sketchup/simple_extrusion.su
145
+ - test/fixtures/sketchup/simple_extrusion_units.su
146
+ - test/fixtures/sketchup/sketch_group.su
129
147
  - test/fixtures/translated_extrusion.su
130
148
  - test/geometry.rb
131
149
  - test/geometry/edge.rb
@@ -136,4 +154,3 @@ test_files:
136
154
  - test/sketchup.rb
137
155
  - test/sketchup/builder.rb
138
156
  - test/units/literal.rb
139
- has_rdoc: