ruby3mf 0.1.8 → 0.1.10
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 +4 -4
- data/lib/ruby3mf/document.rb +8 -5
- data/lib/ruby3mf/model3mf.rb +20 -3
- data/lib/ruby3mf/texture3mf.rb +2 -2
- data/lib/ruby3mf/thumbnail3mf.rb +2 -1
- data/lib/ruby3mf/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f15c7a59a41748c2b7f788fbdc89a930f4799f74
|
4
|
+
data.tar.gz: e0cfb446ab590d4d036f939f25c4b1cb10c5c692
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4d79b78bf1b7ef8a7e4a72e1caac69dd7dd73147928e22d65d83aab3b1c5ec67c752842f4f18c2c217a8d2227c360b65bba61e9f40c7ef052d00454e812ea8b7
|
7
|
+
data.tar.gz: 735bcb3499bcbf02278a8dd58f5a956b3a101cd157493d2aa730318e47e68249e9d8135c2ad3f37a34fae3d223e197a067fb9b285c6d42ec31e581c3520cc3bc
|
data/lib/ruby3mf/document.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
class Document
|
2
2
|
|
3
|
+
attr_accessor :types
|
4
|
+
attr_accessor :relationships
|
3
5
|
attr_accessor :models
|
4
6
|
attr_accessor :thumbnails
|
5
7
|
attr_accessor :textures
|
@@ -18,6 +20,8 @@ class Document
|
|
18
20
|
self.thumbnails=[]
|
19
21
|
self.textures=[]
|
20
22
|
self.objects={}
|
23
|
+
self.relationships=[]
|
24
|
+
self.types=[]
|
21
25
|
@zip_filename = zip_filename
|
22
26
|
end
|
23
27
|
|
@@ -37,7 +41,7 @@ class Document
|
|
37
41
|
# 1. Get Content Types
|
38
42
|
content_type_match = zip_file.glob('\[Content_Types\].xml').first
|
39
43
|
if content_type_match
|
40
|
-
|
44
|
+
m.types = ContentTypes.parse(content_type_match)
|
41
45
|
else
|
42
46
|
l.error "Missing required file: [Content_Types].xml", page: 4
|
43
47
|
end
|
@@ -52,15 +56,14 @@ class Document
|
|
52
56
|
rel_file = zip_file.glob('_rels/.rels').first
|
53
57
|
l.fatal_error "Missing required file _rels/.rels", page: 4 unless rel_file
|
54
58
|
|
55
|
-
@relationships=[]
|
56
59
|
zip_file.glob('**/*.rels').each do |rel|
|
57
|
-
|
60
|
+
m.relationships += Relationships.parse(rel)
|
58
61
|
end
|
59
62
|
end
|
60
63
|
|
61
64
|
l.context "relationship elements" do |l|
|
62
65
|
# 3. Validate all relationships
|
63
|
-
|
66
|
+
m.relationships.each do |rel|
|
64
67
|
l.context rel[:target] do |l|
|
65
68
|
target = rel[:target].gsub(/^\//, "")
|
66
69
|
relationship_file = zip_file.glob(target).first
|
@@ -73,7 +76,7 @@ class Document
|
|
73
76
|
m.send(relationship_type[:collection]) << {
|
74
77
|
rel_id: rel[:id],
|
75
78
|
target: rel[:target],
|
76
|
-
object: Object.const_get(relationship_type[:klass]).parse(m, relationship_file
|
79
|
+
object: Object.const_get(relationship_type[:klass]).parse(m, relationship_file)
|
77
80
|
}
|
78
81
|
end
|
79
82
|
else
|
data/lib/ruby3mf/model3mf.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
class Model3mf
|
2
2
|
|
3
|
-
def self.parse(document, zip_entry
|
3
|
+
def self.parse(document, zip_entry)
|
4
4
|
model_doc = nil
|
5
5
|
|
6
6
|
Log3mf.context "parsing model" do |l|
|
@@ -17,8 +17,8 @@ class Model3mf
|
|
17
17
|
# results = model_doc.css("model resources m:texture2d")
|
18
18
|
required_resources = model_doc.css("//model//resources//*[path]").collect { |n| n["path"] }
|
19
19
|
|
20
|
-
# for each, ensure that they exist in
|
21
|
-
relationship_resources = relationships.map { |relationship| relationship[:target] }
|
20
|
+
# for each, ensure that they exist in m.relationships
|
21
|
+
relationship_resources = document.relationships.map { |relationship| relationship[:target] }
|
22
22
|
|
23
23
|
missing_resources = (required_resources - relationship_resources)
|
24
24
|
if missing_resources.empty?
|
@@ -29,6 +29,23 @@ class Model3mf
|
|
29
29
|
}
|
30
30
|
end
|
31
31
|
|
32
|
+
l.context "verifying 3D resource types" do |l|
|
33
|
+
model_types = model_doc.css("//model//resources//*[path]").collect { |t| t["contenttype"] }
|
34
|
+
|
35
|
+
#for each, ensure they exist in ContentTypes
|
36
|
+
all_types = document.types.map { |t, v| v }
|
37
|
+
|
38
|
+
bad_types = (model_types - all_types)
|
39
|
+
if bad_types.empty?
|
40
|
+
l.info "All model resource contenttypes are valid"
|
41
|
+
else
|
42
|
+
bad_types.each { |bt|
|
43
|
+
puts "bad type: #{bt}"
|
44
|
+
l.error "resource in model has invalid contenttype #{bt}", page: 10
|
45
|
+
}
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
32
49
|
end
|
33
50
|
end
|
34
51
|
model_doc
|
data/lib/ruby3mf/texture3mf.rb
CHANGED
@@ -5,14 +5,14 @@ class Texture3mf
|
|
5
5
|
@doc = document
|
6
6
|
end
|
7
7
|
|
8
|
-
def self.parse(document, relationship_file
|
8
|
+
def self.parse(document, relationship_file)
|
9
9
|
|
10
10
|
t = new(document)
|
11
11
|
t.name = relationship_file.name
|
12
12
|
stream = relationship_file.get_input_stream
|
13
13
|
img_type = MimeMagic.by_magic(stream)
|
14
|
-
@bytes = stream.read
|
15
14
|
Log3mf.context "Texture3mf" do |l|
|
15
|
+
l.fatal_error "Texture file must be valid image file", spec: :material, page: 16 unless img_type
|
16
16
|
l.debug "texture is of type: #{img_type}"
|
17
17
|
l.error "Expected a png or jpeg texture but the texture was of type #{img_type}", spec: :material, page: 16 unless ['image/png', 'image/jpeg'].include? img_type.type
|
18
18
|
end
|
data/lib/ruby3mf/thumbnail3mf.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
class Thumbnail3mf
|
2
2
|
|
3
|
-
def self.parse(doc, relationship_file
|
3
|
+
def self.parse(doc, relationship_file)
|
4
4
|
img_type = MimeMagic.by_magic(relationship_file.get_input_stream)
|
5
5
|
Log3mf.context "Thumbnail3mf" do |l|
|
6
|
+
l.fatal_error "thumbnail file must be valid image file", page: 10 unless img_type
|
6
7
|
l.debug "thumbnail is of type: #{img_type}"
|
7
8
|
l.error "Expected a png or jpeg thumbnail but the thumbnail was of type #{img_type}", page: 12 unless ['image/png', 'image/jpeg'].include? img_type.type
|
8
9
|
end
|
data/lib/ruby3mf/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby3mf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Whitmarsh, Jeff Porter, and William Hertling
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|