Module: JsonApi::Resources::Base

Included in:
JsonApi::Resource
Defined in:
lib/json_api_ruby/resources/base.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#relationshipsObject (readonly)

Returns the value of attribute relationships.



6
7
8
# File 'lib/json_api_ruby/resources/base.rb', line 6

def relationships
  @relationships
end

Instance Method Details

#attributes_hashObject



32
33
34
35
36
37
38
# File 'lib/json_api_ruby/resources/base.rb', line 32

def attributes_hash
  fields_array.inject({}) do |attrs, attr|
    meth = method(attr)
    attrs[attr.to_s] = meth.call
    attrs
  end
end

#build_object_graphObject

Builds relationship resource classes



41
42
43
44
45
46
47
# File 'lib/json_api_ruby/resources/base.rb', line 41

def build_object_graph
  @relationships ||= []
  relationships_array.each do |relationship|
    rel = relationship.build_resources({parent_resource: self, included: includes})
    @relationships << rel
  end
end

#fields_array(klass = self.class) ⇒ Object

Traverses fields set on super-class(es) and concatinates them into a single set. Stores the set in ‘self.class.fields`, leaving super-class `fields` sets untouched.



52
53
54
55
56
57
58
# File 'lib/json_api_ruby/resources/base.rb', line 52

def fields_array(klass = self.class)
  fields_list = concat_list(self.class.fields, klass.fields)
  unless klass.superclass == Resource
    return fields_array(klass.superclass)
  end
  fields_list
end

#identifier_hashObject



20
21
22
# File 'lib/json_api_ruby/resources/base.rb', line 20

def identifier_hash
  { 'id' => self.id, 'type' =>  self.type }
end


24
25
26
# File 'lib/json_api_ruby/resources/base.rb', line 24

def links_hash
  { 'self' => JsonApi.configuration.base_url + self_link_path }
end

#relationships_array(klass = self.class) ⇒ Object

Traverses relationships set on super-class(es) and concatinates them into a single set. Stores the set in ‘self.class.relationships`, leaving super-class `relationships` sets untouched.



63
64
65
66
67
68
69
# File 'lib/json_api_ruby/resources/base.rb', line 63

def relationships_array(klass = self.class)
  rel_list = concat_list(self.class.relationships, klass.relationships)
  unless klass.superclass == Resource
    return relationships_array(klass.superclass)
  end
  rel_list
end


28
29
30
# File 'lib/json_api_ruby/resources/base.rb', line 28

def self_link_path
  "/#{self.type}/#{self.id}"
end

#to_hashObject



7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/json_api_ruby/resources/base.rb', line 7

def to_hash
  resource_hash = identifier_hash
  resource_hash['attributes'] = attributes_hash if attributes_hash.any?

  relationships.each do |relationship|
    resource_hash['relationships'] ||= {}
    resource_hash['relationships'][relationship.name] = relationship.to_hash
  end

  resource_hash['links'] = links_hash if self.use_links
  resource_hash
end