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
-
#parse_for_includes(includes) ⇒ Object
Very basic.
-
#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
39 40 41 42 43 44 45 |
# File 'lib/json_api_ruby/resources/base.rb', line 39 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
48 49 50 51 52 53 54 55 |
# File 'lib/json_api_ruby/resources/base.rb', line 48 def build_object_graph @relationships ||= [] relationships_array.each do |relationship| included = includes.include?(relationship.name) rel = relationship.build_resources({parent_resource: self, included: included}) @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.
60 61 62 63 64 65 66 |
# File 'lib/json_api_ruby/resources/base.rb', line 60 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
27 28 29 |
# File 'lib/json_api_ruby/resources/base.rb', line 27 def identifier_hash { 'id' => self.id, 'type' => self.type } end |
#links_hash ⇒ Object
31 32 33 |
# File 'lib/json_api_ruby/resources/base.rb', line 31 def links_hash { 'self' => JsonApi.configuration.base_url + self_link_path } end |
#parse_for_includes(includes) ⇒ Object
Very basic. Eventually this will need to parse things like “article.comments” and “article-comments”, so, leaving the method here but only supporting the most basic of things
23 24 25 |
# File 'lib/json_api_ruby/resources/base.rb', line 23 def parse_for_includes(includes) Array(includes).map(&:to_s) 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.
71 72 73 74 75 76 77 |
# File 'lib/json_api_ruby/resources/base.rb', line 71 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
35 36 37 |
# File 'lib/json_api_ruby/resources/base.rb', line 35 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 resource_hash end |