15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/ruby3mf/model3mf.rb', line 15
def self.parse(zip_entry, relationships)
model_hash = {}
Log3mf.context "parsing model" do |l|
begin
doc = Nokogiri::XML(zip_entry.get_input_stream) do |config|
config.strict.nonet.noblanks
end
l.info "We Found a Model, and it's XML!"
model_hash = Hash.from_xml(doc)
rescue Nokogiri::XML::SyntaxError => e
l.fatal_error "Model file invalid XML. Exception #{e}"
doc.errors.each { |error| l.error error }
end
l.context "verifying 3D payload required resources" do |l|
required_resources = []
model_hash[:model][:resources].each do |key, value|
required_resources << (value)
end
required_resources.flatten!
required_resources.compact!
relationship_resources = relationships.map { |relationship| relationship[:target] }
missing_resources = (required_resources - relationship_resources)
if missing_resources.empty?
l.info "All model required resources are defined in .rels relationship files."
else
missing_resources.each { |mr|
l.error "Missing required resource: #{mr} Resource referenced in model, but not in .rels relationship file", page: 10
}
end
end
end
model_hash
end
|