Module: Ladder::Resource::Dynamic::InstanceMethods

Defined in:
lib/ladder/resource/dynamic.rb

Instance Method Summary collapse

Instance Method Details

#<<(data) ⇒ Object

Overload Ladder #<<

See Also:



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/ladder/resource/dynamic.rb', line 77

def <<(data)
  # ActiveTriples::Resource expects: RDF::Statement, Hash, or Array
  data = RDF::Statement.from(data) unless data.is_a? RDF::Statement

  unless resource_class.properties.values.map(&:predicate).include? data.predicate
    # Generate a dynamic field name
    qname = data.predicate.qname
    field_name = (respond_to? qname.last or :name == qname.last) ? qname.join('_').to_sym : qname.last

    # Define property on class
    property field_name, predicate: data.predicate
  end

  super(data)
end

#update_resource(opts = {}) ⇒ Object

Overload Ladder #update_resource

See Also:



58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/ladder/resource/dynamic.rb', line 58

def update_resource(opts = {})
  # NB: super has to go first or AT clobbers properties
  super(opts)

  if self._context
    self._context.each do |field_name, uri|
      value = self.send(field_name)
      cast_uri = RDF::URI.new(value)
      resource.set_value(RDF::Vocabulary.find_term(uri), cast_uri.valid? ? cast_uri : value)
    end
  end

  resource
end