Class: Rgltf::ExtensionRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/rgltf/extension.rb

Instance Method Summary collapse

Constructor Details

#initializeExtensionRegistry

Returns a new instance of ExtensionRegistry.



5
6
7
# File 'lib/rgltf/extension.rb', line 5

def initialize
  @entries = {}
end

Instance Method Details

#add(name, handler, on:) ⇒ Object



9
10
11
12
# File 'lib/rgltf/extension.rb', line 9

def add(name, handler, on:)
  Array(on).each { |owner_type| @entries[[name, owner_type.to_sym]] = handler }
  self
end

#decode_primitive(primitive, doc:) ⇒ Object



36
37
38
39
40
41
42
43
44
45
# File 'lib/rgltf/extension.rb', line 36

def decode_primitive(primitive, doc:)
  primitive.extensions.reduce(primitive) do |current, (name, _value)|
    handler = @entries[[name, :primitive]]
    if handler.respond_to?(:decode_primitive)
      handler.decode_primitive(current, doc:) || current
    else
      current
    end
  end
end

#known?(name) ⇒ Boolean

Returns:

  • (Boolean)


14
15
16
# File 'lib/rgltf/extension.rb', line 14

def known?(name)
  @entries.any? { |(registered_name, _), _| registered_name == name }
end

#namesObject



32
33
34
# File 'lib/rgltf/extension.rb', line 32

def names
  @entries.keys.map(&:first).uniq.freeze
end

#parse(name, json, on:, owner:, doc:) ⇒ Object



18
19
20
21
# File 'lib/rgltf/extension.rb', line 18

def parse(name, json, on:, owner:, doc:)
  handler = @entries[[name, on.to_sym]]
  handler ? handler.parse(json, owner:, doc:) : json
end

#registered_on?(name, on:) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/rgltf/extension.rb', line 28

def registered_on?(name, on:)
  @entries.key?([name, on.to_sym])
end

#serialize(name, object, on:, doc:) ⇒ Object



23
24
25
26
# File 'lib/rgltf/extension.rb', line 23

def serialize(name, object, on:, doc:)
  handler = @entries[[name, on.to_sym]]
  handler ? handler.serialize(object, doc:) : object
end