crystalscad 0.5.8 → 0.6.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 ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ N2M3M2I5ZDA0NTgwMGQ2NmMxMTE1OTc5YmU5NDEwNGIzODdhY2UyZg==
5
+ data.tar.gz: !binary |-
6
+ MTVmNWNiOWY0NjdjY2NhZjM4MTVlNTgwMGE2ODk0OTJkYjU4MTU5MQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ YmYxNTI2YWI2YWNlMDMxNDkzZTRiMmMzOTU5YjliNTM3NjMzZTZhYzQzZmRi
10
+ NWUyNzcxYWQ3ZjQyYWNiMDEwOTRjNDJiZTU3NjY4ZThlNzY4OWI1ZmZlNmUz
11
+ YWY1ODRjMzcwN2EwZTM3ZWM3NmM4YWE2YjRiNDJmNzhlNzhkMDY=
12
+ data.tar.gz: !binary |-
13
+ ODcyMWM5ZmUzYzMxYzNhN2NlNjkzOWUwODliNTQwM2FiM2U3ZjNlMmJhYTI2
14
+ ZTRiMmM1MTU4ZDdmZWY4ZjgwNDIxYWJiNWY2ZDNlZWJlNjBjNDUwNTRlZmVk
15
+ ZWM3ZTM2OTc3YjZhMWIyYzIyNjM4ODA3MGEwMDFjZmY1MmZjYWU=
data/bin/crystalgen CHANGED
@@ -8,9 +8,9 @@ require "thor/actions"
8
8
  class CrystalGen < Thor
9
9
  include Thor::Actions
10
10
 
11
- desc "project APP_NAME", "creates a new project stub"
11
+ desc "new APP_NAME", "creates a new project stub"
12
12
 
13
- def project(name)
13
+ def new(name)
14
14
 
15
15
  create_file("#{name}/#{name}.rb") do
16
16
  "#!/usr/bin/ruby1.9.3
@@ -30,10 +30,8 @@ require_all \"lib/**/*.rb\"
30
30
  # Design -> Automatic Reload and Compile
31
31
  # activated.
32
32
 
33
-
34
- res = #{name.capitalize}Assembly.new.show
35
-
36
- res.save(\"#{name}.scad\",\"$fn=64;\")
33
+ # Scans every file in lib/**/*.rb for classes and saves them in the output/ directory
34
+ save!
37
35
 
38
36
  @@bom.save(\"bom.txt\")
39
37
 
@@ -50,9 +48,30 @@ res.save(\"#{name}.scad\",\"$fn=64;\")
50
48
 
51
49
  create_file("#{name}/lib/assemblies/#{name}_assembly.rb") do
52
50
  "class #{name.capitalize}Assembly < CrystalScad::Assembly
51
+
52
+ # Assemblies are used to show how different parts interact on your design.
53
+
54
+ # Skip generation of the 'output' method for this assembly.
55
+ # (will still generate 'show')
56
+ skip :output
53
57
 
54
58
  def part(show)
55
- res = TestCube.new.show
59
+ # Create a test cube
60
+ cube = TestCube.new
61
+
62
+ # And another one, but translate this one next to the cube and change the color
63
+ # You can use any transformation on the class itself.
64
+ another_cube = TestCube.new.translate(z:cube.z).color(\"MediumTurquoise\")
65
+
66
+ # We're calling the show method on both cubes
67
+ res = cube.show
68
+ res += another_cube.show
69
+
70
+ # There's a bolt going through the cubes and a nut on the bottom. Let's show it
71
+ res += cube.show_hardware
72
+
73
+ # always make sure the lowest statement always returns the object that you're working on
74
+ res
56
75
  end
57
76
 
58
77
  end
@@ -62,11 +81,59 @@ end
62
81
  create_file("#{name}/lib/printed/testcube.rb") do
63
82
  "class TestCube < CrystalScad::Printed
64
83
  def initialize()
65
- @size = [20,20,10]
84
+ # Here is a good place to define instance variables that make your part parametric.
85
+ # These variables are acessable from outside:
86
+ @x = 25
87
+ @y = 25
88
+ @z = 20
89
+ @hardware = []
90
+ @color = \"BurlyWood\"
91
+
92
+ # The variable below is not accessable from the outside unless you specify so with attr_accessable
93
+ @diameter = 10
66
94
  end
67
-
95
+
68
96
  def part(show)
69
- cube(@size)
97
+ # We start with a cube and center it in x and y direction. The cube starts at z = 0 with this.
98
+ res = cube(@x,@y,@z).center_xy
99
+
100
+ # We want a bolt to go through it. It will be facing upwards however, so we will need to mirror it.
101
+ # Also translating it to twice the height, as we want to stack two of these cubes together in the assembly.
102
+ bolt = Bolt.new(4,40).mirror(z:1).translate(z:@z*2)
103
+ @hardware << bolt
104
+
105
+ # We also want a nut. And since the printing direction is from the bottom, we decide to add support to it.
106
+ nut = Nut.new(4,support:true,support_layer_height:0.3)
107
+ @hardware << nut
108
+
109
+ # substracting the @hardware array will call the .output method on each hardware item automatically
110
+ res -= @hardware
111
+
112
+ # colorize is a convenience thing to colorize your part differently in assemblies.
113
+ # You can specify @color in initalize (as default color), or set a different color in the assembly this way.
114
+ res = colorize(res)
115
+
116
+ # Note: Make sure you do this before adding parts (i.e. hardware) that have their own color and that
117
+ # you do not want to colorize.
118
+
119
+ # You can go ahead and show the hardware when the part produces its 'show' output file by uncommenting this:
120
+ # res += @hardware if show
121
+ # However, in this example, the Assembly file calls show_hardware in order to not show it twice.
122
+
123
+ # always make sure the lowest statement always returns the object that you're working on
124
+ res
125
+ end
126
+
127
+ # with view you can define more outputs of a file.
128
+ # This is useful when you are designing subassemblies of an object.
129
+ view :my_subassembly
130
+
131
+ def my_subassembly
132
+ res = hull(
133
+ cylinder(d:@diameter,h:@z),
134
+ cube(@x,@y,@z)
135
+ )
136
+ res
70
137
  end
71
138
 
72
139
  end
@@ -80,10 +147,6 @@ watch( \'#{name}.rb' ) {|md|
80
147
  system(\"./#{name}.rb\")
81
148
  }
82
149
 
83
- watch( 'lib/(.*)\.rb' ) {|md|
84
- system(\"./#{name}.rb\")
85
- }
86
-
87
150
  watch( 'lib/*/(.*)\.rb' ) {|md|
88
151
  system(\"./#{name}.rb\")
89
152
  }
@@ -17,7 +17,6 @@ res2+= cube([10,10,50]).center
17
17
 
18
18
  res = res1-res2
19
19
  res*=cylinder(r1:20,r2:5,h:50,center:true).translate(z:5)
20
-
21
20
  res.save("example002.scad")
22
21
 
23
22
 
data/examples/pipe.rb CHANGED
@@ -28,11 +28,13 @@ pipe.ccw(30,160,"blue")
28
28
  pipe.ccw(30,60,"pink")
29
29
 
30
30
 
31
- #pipe.cw(30,60,"blue")
32
- #pipe.cw(20,60,"green")
33
- #pipe.cw(10,60,"black")
34
- #pipe.line(33)
35
- #pipe.cw(30,90,"white")
31
+ pipe.cw(30,60,"blue")
32
+ pipe.cw(20,60,"green")
33
+
34
+ pipe.cw(10,60,"black")
35
+ pipe.line(33)
36
+ pipe.ccw(30,60,"pink")
37
+ pipe.cw(30,90,"white")
36
38
  #pipe.cw(15,95,"silver")
37
39
  #pipe.line(10,"pink")
38
40
  res = pipe.pipe
@@ -4,11 +4,11 @@ require "crystalscad"
4
4
  include CrystalScad
5
5
 
6
6
 
7
- g1 = PrintedGear.new(module:2.0,teeth:40,bore:5,height:4)
7
+ g1 = PrintedGear.new(module:2.0,teeth:40,bore:8,height:4)
8
8
  g2 = PrintedGear.new(module:2.0,teeth:20,bore:5,height:4,rotation:0.5) # rotation in number of teeth
9
9
 
10
- res = g1.show.color("red").rotate(z:"$t*360")
11
- res += g2.show.rotate(z:"-$t*360*#{g1.ratio(g2)}").translate(x:g1.distance_to(g2))
10
+ res = g1.show.color("red")
11
+ res += g2.show.translate(x:g1.distance_to(g2))
12
12
 
13
- res.save("printed_gear.scad")
13
+ res.save("printed_gear.scad","$fn=64;")
14
14
 
data/lib/crystalscad.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  require 'crystalscad/version'
2
2
  require 'crystalscad/BillOfMaterial'
3
3
  require 'crystalscad/CrystalScadObject'
4
- require 'crystalscad/Assembly'
5
4
  require 'crystalscad/Primitive'
5
+ require 'crystalscad/Assembly'
6
6
  require 'crystalscad/Hardware'
7
7
 
8
8
  require 'crystalscad/LinearBearing'
@@ -14,12 +14,21 @@
14
14
  # along with CrystalScad. If not, see <http://www.gnu.org/licenses/>.
15
15
 
16
16
  module CrystalScad
17
- class Assembly
18
- attr_accessor :height,:x,:y,:z
17
+ class Assembly < CrystalScad::Primitive
18
+ attr_accessor :height,:x,:y,:z,:skip,:color,:hardware,:transformations
19
+
20
+ def transform(obj)
21
+ return obj if @transformations == nil
22
+ @transformations.each do |t|
23
+ obj.transformations << t
24
+ end
25
+
26
+ return obj
27
+ end
19
28
 
20
29
  def initialize(args={})
21
30
  @args = args if @args == nil
22
-
31
+
23
32
  @x = args[:x]
24
33
  @y = args[:y]
25
34
  @z = args[:z]
@@ -39,11 +48,11 @@ module CrystalScad
39
48
  end
40
49
 
41
50
  def show
42
- part(true)
51
+ transform(part(true))
43
52
  end
44
53
 
45
54
  def output
46
- part(false)
55
+ transform(part(false))
47
56
  end
48
57
 
49
58
  def part(show=false)
@@ -65,18 +74,6 @@ module CrystalScad
65
74
  def *(args)
66
75
  return self.output*args
67
76
  end
68
-
69
- def translate(args)
70
- return self.output.translate(args)
71
- end
72
-
73
- def mirror(args)
74
- return self.output.mirror(args)
75
- end
76
-
77
- def rotate(args)
78
- return self.output.rotate(args)
79
- end
80
77
 
81
78
  def scad_output()
82
79
  return self.output.scad_output
@@ -100,6 +97,62 @@ module CrystalScad
100
97
  return a
101
98
  end
102
99
 
100
+ # Makes the save_all method in CrystalScad skip the specified method(s)
101
+ def self.skip(args)
102
+ @skip = [] if @skip == nil
103
+ if args.kind_of? Array
104
+ args.each do |arg|
105
+ skip(arg)
106
+ end
107
+ return
108
+ end
109
+
110
+ @skip << args.to_s
111
+ return
112
+ end
113
+
114
+ def self.get_skip
115
+ @skip
116
+ end
117
+
118
+
119
+ def self.view(args)
120
+ @added_views = [] if @added_views == nil
121
+ if args.kind_of? Array
122
+ args.each do |arg|
123
+ view(arg)
124
+ end
125
+ return
126
+ end
127
+
128
+ @added_views << args.to_s
129
+ return
130
+ end
131
+
132
+ def self.get_views
133
+ @added_views || []
134
+ end
135
+
136
+
137
+ def color(args)
138
+ @color = args
139
+ return self
140
+ end
141
+
142
+ def colorize(res)
143
+ return res if @color == nil
144
+ return res.color(@color)
145
+ end
146
+
147
+ def show_hardware
148
+ return nil if @hardware == nil or @hardware == []
149
+ res = nil
150
+ @hardware.each do |part|
151
+ res += part.show
152
+ end
153
+ transform(res)
154
+ end
155
+
103
156
  end
104
157
 
105
158
  class Printed < Assembly
@@ -105,7 +105,7 @@ module CrystalScad
105
105
  end
106
106
  end
107
107
 
108
- def cube(args={})
108
+ def cube(args={},y=nil,z=nil)
109
109
  if args.kind_of? Array
110
110
  args = {size:args}
111
111
  elsif args.kind_of? Hash
@@ -113,6 +113,9 @@ module CrystalScad
113
113
  args[:y] ||= 0
114
114
  args[:z] ||= 0
115
115
  args = {size:[args[:x],args[:y],args[:z]]}
116
+ elsif args.kind_of? Numeric
117
+ x = args
118
+ args = {size:[x,y,z]}
116
119
  end
117
120
  Cube.new(args)
118
121
  end
@@ -322,11 +325,11 @@ module CrystalScad
322
325
  if args.kind_of? Array
323
326
  r = self
324
327
  args.each do |a|
325
- if a.respond_to? :show
326
- r = Union.new(r,a.show)
327
- else
328
+ # if a.respond_to? :show
329
+ # r = Union.new(r,a.show)
330
+ # else
328
331
  r = Union.new(r,a)
329
- end
332
+ # end
330
333
  end
331
334
  r
332
335
  else
@@ -339,11 +342,11 @@ module CrystalScad
339
342
  if args.kind_of? Array
340
343
  r = self
341
344
  args.each do |a|
342
- if a.respond_to? :output
343
- r = Difference.new(r,a.output)
344
- else
345
+ #if a.respond_to? :output
346
+ # r = Difference.new(r,a.output)
347
+ #else
345
348
  r = Difference.new(r,a)
346
- end
349
+ #end
347
350
  end
348
351
  r
349
352
  else
@@ -573,6 +576,10 @@ module CrystalScad
573
576
  end
574
577
 
575
578
 
579
+ def save!
580
+ Dir.glob("lib/**/*.rb").map{|l| get_classes_from_file(l)}.flatten.map{|l| save_all(l)}
581
+ end
582
+
576
583
  # Saves all files generated of a CrystalScad file
577
584
  # Saves outputs of
578
585
  # - show
@@ -581,8 +588,16 @@ module CrystalScad
581
588
  def save_all(class_name,fn=$fn)
582
589
 
583
590
  res = class_name.send :new
591
+
592
+ # skip defined classes
593
+ skip = class_name.send :get_skip
594
+ skip = [] if skip == nil
595
+ skip << "show_hardware"
596
+ added_views = class_name.send :get_views
597
+
584
598
  # regexp for output* view* show*
585
- res.methods.grep(Regexp.union(/^output/,/^view/,/^show/)).each do |i|
599
+ (res.methods.grep(Regexp.union(/^output/,/^view/,/^show/)) + added_views).each do |i|
600
+ next if skip.include? i.to_s
586
601
  output = nil
587
602
 
588
603
  res.send :initialize # ensure default values are loaded at each interation
@@ -15,8 +15,10 @@
15
15
 
16
16
  module CrystalScad::Hardware
17
17
 
18
- class Bolt < CrystalScad::Primitive
19
- attr_accessor :transformations
18
+ class Hardware < CrystalScad::Assembly
19
+ end
20
+
21
+ class Bolt < Hardware
20
22
 
21
23
  def initialize(size,length,args={})
22
24
  @args = args
@@ -86,14 +88,6 @@ module CrystalScad::Hardware
86
88
  transform(res)
87
89
  end
88
90
 
89
- def transform(obj)
90
- @transformations.each do |t|
91
- obj.transformations << t
92
- end
93
-
94
- return obj
95
- end
96
-
97
91
  # ISO 7380
98
92
  def bolt_7380(additional_length=0, addtional_diameter=0)
99
93
  chart_iso7380 = {
@@ -173,7 +167,7 @@ module CrystalScad::Hardware
173
167
 
174
168
  end
175
169
 
176
- class Washer < CrystalScad::Assembly
170
+ class Washer < Hardware
177
171
  def initialize(size,args={})
178
172
  @args=args
179
173
  @size = size
@@ -197,7 +191,7 @@ module CrystalScad::Hardware
197
191
  end
198
192
  @height = @chart_din125[@size][:height]
199
193
 
200
-
194
+ @transformations ||= []
201
195
  end
202
196
 
203
197
  def description
@@ -209,20 +203,26 @@ module CrystalScad::Hardware
209
203
  washer = cylinder(d:@chart_din125[@size][:outer_diameter].to_f,h:@chart_din125[@size][:height].to_f)
210
204
  washer-= cylinder(d:@size,h:@chart_din125[@size][:outer_diameter].to_f+0.2).translate(z:-0.1)
211
205
  washer.color("Gainsboro")
206
+ transform(washer)
212
207
  end
213
208
 
214
209
  end
215
210
 
216
- class Nut < CrystalScad::Assembly
211
+ class Nut < Hardware
217
212
  attr_accessor :height
218
213
  def initialize(size,args={})
219
214
  @size = size
220
215
  @type = args[:type] ||= "934"
221
216
  @material = args[:material] ||= "8.8"
222
217
  @surface = args[:surface] ||= "zinc plated"
218
+ @support = args[:support] ||= false
219
+ @support_layer_height = args[:support_layer_height] ||= 0.2
220
+
223
221
 
222
+ @transformations ||= []
224
223
  @args = args
225
224
  prepare_data
225
+ @height = args[:height] || @height
226
226
  end
227
227
 
228
228
  def description
@@ -251,14 +251,13 @@ module CrystalScad::Hardware
251
251
  @s = chart_934[@size][:side_to_side]
252
252
  @height = chart_934[@size][:height]
253
253
  @support_diameter = chart_934[@size][:support_diameter]
254
-
255
254
  if @type == "985"
256
255
  @height = chart_985[@size][:height]
257
256
  end
258
257
 
259
258
  end
260
259
 
261
- def add_support(layer_height=0.2)
260
+ def add_support(layer_height=@support_layer_height)
262
261
  res = cylinder(d:@support_diameter,h:@height-layer_height)
263
262
  # on very small nuts, add a support base of one layer height, so the support won't fall over
264
263
  if @size < 6
@@ -269,19 +268,22 @@ module CrystalScad::Hardware
269
268
 
270
269
  def output(margin=0.3)
271
270
  add_to_bom
272
- return nut_934(false,margin)
271
+ return transform(nut_934(false,margin))
273
272
  end
274
273
 
275
274
  def show
276
275
  add_to_bom
277
- return nut_934
276
+ return transform(nut_934)
278
277
  end
279
278
 
280
279
  def nut_934(show=true,margin=0)
281
280
  @s += margin
282
- nut=cylinder(d:(@s/Math.sqrt(3))*2,h:@height,fn:6)
283
- nut-=cylinder(d:@size,h:@height) if show == true
284
- nut.color("Gainsboro")
281
+ res = cylinder(d:(@s/Math.sqrt(3))*2,h:@height,fn:6)
282
+ res -= cylinder(d:@size,h:@height) if show == true
283
+ if @support
284
+ res -= add_support
285
+ end
286
+ res.color("Gainsboro")
285
287
  end
286
288
 
287
289
  end
@@ -8,6 +8,7 @@ module CrystalScad
8
8
  if args[:z] == nil
9
9
  args[:z] = 0
10
10
  end
11
+ @transformations ||= []
11
12
  @transformations << Rotate.new(args)
12
13
  self
13
14
  end
@@ -18,16 +19,19 @@ module CrystalScad
18
19
  end
19
20
 
20
21
  def translate(args)
22
+ @transformations ||= []
21
23
  @transformations << Translate.new(args)
22
- self
24
+ self
23
25
  end
24
26
 
25
27
  def union(args)
28
+ @transformations ||= []
26
29
  @transformations << Union.new(args)
27
30
  self
28
31
  end
29
32
 
30
33
  def mirror(args)
34
+ @transformations ||= []
31
35
  @transformations << Mirror.new(args)
32
36
  self
33
37
  end
@@ -36,6 +40,7 @@ module CrystalScad
36
40
  if args.kind_of? Numeric or args.kind_of? Array
37
41
  args = {v:args}
38
42
  end
43
+ @transformations ||= []
39
44
  @transformations << Scale.new(args)
40
45
  self
41
46
  end
@@ -1,4 +1,4 @@
1
1
  module CrystalScad
2
- VERSION = "0.5.8"
2
+ VERSION = "0.6.0"
3
3
  end
4
4
 
metadata CHANGED
@@ -1,94 +1,79 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: crystalscad
3
- version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease:
6
- segments:
7
- - 0
8
- - 5
9
- - 8
10
- version: 0.5.8
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Joachim Glauche
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2015-04-28 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2015-05-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: rubyscad
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 15
29
- segments:
30
- - 1
31
- - 0
32
- version: "1.0"
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
33
20
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: require_all
37
21
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 9
44
- segments:
45
- - 1
46
- - 3
47
- version: "1.3"
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: require_all
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
48
34
  type: :runtime
49
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
51
- name: wijet-thor
52
35
  prerelease: false
53
- requirement: &id003 !ruby/object:Gem::Requirement
54
- none: false
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- hash: 51
59
- segments:
60
- - 0
61
- - 14
62
- - 10
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: wijet-thor
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
63
47
  version: 0.14.10
64
48
  type: :runtime
65
- version_requirements: *id003
66
- - !ruby/object:Gem::Dependency
67
- name: observr
68
49
  prerelease: false
69
- requirement: &id004 !ruby/object:Gem::Requirement
70
- none: false
71
- requirements:
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- hash: 29
75
- segments:
76
- - 1
77
- - 0
78
- - 5
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.14.10
55
+ - !ruby/object:Gem::Dependency
56
+ name: observr
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
79
61
  version: 1.0.5
80
62
  type: :runtime
81
- version_requirements: *id004
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: 1.0.5
82
69
  description: Inspired by SolidPython, based on RubyScad
83
- email:
70
+ email:
84
71
  - webmaster@joaz.de
85
- executables:
72
+ executables:
86
73
  - crystalgen
87
74
  extensions: []
88
-
89
75
  extra_rdoc_files: []
90
-
91
- files:
76
+ files:
92
77
  - COPYING
93
78
  - Gemfile
94
79
  - README.md
@@ -132,39 +117,27 @@ files:
132
117
  - static/logo.png
133
118
  - static/logo_small.png
134
119
  homepage: http://github.com/Joaz/CrystalScad
135
- licenses:
120
+ licenses:
136
121
  - GPL-3
122
+ metadata: {}
137
123
  post_install_message:
138
124
  rdoc_options: []
139
-
140
- require_paths:
125
+ require_paths:
141
126
  - lib
142
- required_ruby_version: !ruby/object:Gem::Requirement
143
- none: false
144
- requirements:
145
- - - ">="
146
- - !ruby/object:Gem::Version
147
- hash: 53
148
- segments:
149
- - 1
150
- - 9
151
- - 3
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
152
131
  version: 1.9.3
153
- required_rubygems_version: !ruby/object:Gem::Requirement
154
- none: false
155
- requirements:
156
- - - ">="
157
- - !ruby/object:Gem::Version
158
- hash: 3
159
- segments:
160
- - 0
161
- version: "0"
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ! '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
162
137
  requirements: []
163
-
164
138
  rubyforge_project:
165
- rubygems_version: 1.8.15
139
+ rubygems_version: 2.2.2
166
140
  signing_key:
167
- specification_version: 3
141
+ specification_version: 4
168
142
  summary: CrystalScad is a framework for programming OpenScad models in Ruby
169
143
  test_files: []
170
-