Module: Ladder::Searchable

Extended by:
ActiveSupport::Concern
Defined in:
lib/ladder/searchable.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#as_qname(opts = {}) ⇒ Object

Generate a qname-based JSON representation



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/ladder/searchable.rb', line 16

def as_qname(opts = {})
  qname_hash = type.empty? ? {} : {rdf: {type: type.first.pname }}

  resource_class.properties.each do |field_name, property|
    ns, name = property.predicate.qname
    qname_hash[ns] ||= Hash.new

    object = self.send(field_name)

    if relations.keys.include? field_name
      if opts[:related]
        qname_hash[ns][name] = object.to_a.map { |obj| obj.as_qname }
      else
        qname_hash[ns][name] = object.to_a.map { |obj| "#{obj.class.name.underscore.pluralize}:#{obj.id}" }
      end
    elsif fields.keys.include? field_name
      qname_hash[ns][name] = read_attribute(field_name)
    end
  end

  qname_hash
end