Module: JsonApi::Resources::Base
- Included in:
- JsonApi::Resource
- Defined in:
- lib/json_api_ruby/resources/base.rb
Instance Attribute Summary collapse
-
#relationships ⇒ Object
readonly
Returns the value of attribute relationships.
Instance Method Summary collapse
- #attributes_hash ⇒ Object
-
#build_object_graph ⇒ Object
Builds relationship resource classes.
-
#fields_array(klass = self.class) ⇒ Object
Traverses fields set on super-class(es) and concatinates them into a single set.
- #identifier_hash ⇒ Object
- #links_hash ⇒ Object
-
#relationships_array(klass = self.class) ⇒ Object
Traverses relationships set on super-class(es) and concatinates them into a single set.
- #self_link_path ⇒ Object
- #to_hash ⇒ Object
Instance Attribute Details
#relationships ⇒ Object (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_hash ⇒ Object
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_graph ⇒ Object
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_hash ⇒ Object
20 21 22 |
# File 'lib/json_api_ruby/resources/base.rb', line 20 def identifier_hash { 'id' => self.id, 'type' => self.type } end |
#links_hash ⇒ Object
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 |
#self_link_path ⇒ Object
28 29 30 |
# File 'lib/json_api_ruby/resources/base.rb', line 28 def self_link_path "/#{self.type}/#{self.id}" end |
#to_hash ⇒ Object
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 |