Class: Hypermodel::Serializers::Mongoid

Inherits:
Object
  • Object
show all
Defined in:
lib/hypermodel/serializers/mongoid.rb

Instance Method Summary collapse

Constructor Details

#initialize(resource, controller) ⇒ Mongoid

Returns a new instance of Mongoid.



4
5
6
7
8
# File 'lib/hypermodel/serializers/mongoid.rb', line 4

def initialize(resource, controller)
  @resource   = resource
  @attributes = resource.attributes.dup
  @controller = controller
end

Instance Method Details

#embeddedObject



37
38
39
40
41
42
43
44
45
46
47
# File 'lib/hypermodel/serializers/mongoid.rb', line 37

def embedded
  return {} if embedded_relations.empty?

  embedded_relations.inject({ _embedded: {} }) do |acc, (name, )|
    if attributes = extract_embedded_attributes(name, )
      @attributes.delete(name)
      acc[:_embedded][name] = attributes
    end
    acc
  end
end


15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/hypermodel/serializers/mongoid.rb', line 15

def links
  hash = { self: { href: @controller.polymorphic_url(@resource) } }

  referenced_relations.each do |name, |
    related = @resource.send(name)
    relation = .relation

    if relation == ::Mongoid::Relations::Referenced::In
      unless related.nil? || (related.respond_to?(:empty?) && related.empty?)
        hash.update(name => { href: @controller.polymorphic_url(related) })
      end
    elsif relation == ::Mongoid::Relations::Referenced::Many
      hash.update(name => { href: @controller.polymorphic_url([@resource, name]) })
    else
      raise "Referenced relation type not implemented: #{relation}"
    end

  end

  { _links: hash }
end

#to_json(*opts) ⇒ Object



10
11
12
13
# File 'lib/hypermodel/serializers/mongoid.rb', line 10

def to_json(*opts)
  attrs = @attributes.update(links).update(embedded)
  attrs.to_json(*opts)
end