Module: ContentfulRails::NestedResource
- Defined in:
- lib/contentful_rails/nested_resource.rb
Overview
Module for obtaining object references from paths
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
-
#get_child_entity_from_path_by(field, children) ⇒ Object
Given a field and an array of child fields, we need to recurse through them to get the last one.
-
#nested_path_by(field, opts = {}) ⇒ String
Given a field (and optional delimiter), return a path to the current object.
Class Method Details
.included(base) ⇒ Object
4 5 6 |
# File 'lib/contentful_rails/nested_resource.rb', line 4 def self.included(base) base.extend ClassMethods end |
Instance Method Details
#get_child_entity_from_path_by(field, children) ⇒ Object
Given a field and an array of child fields, we need to recurse through them to get the last one
51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/contentful_rails/nested_resource.rb', line 51 def get_child_entity_from_path_by(field, children) # the next child in the path child_value = children.shift # get the child entity child = send(:children).find { |c| c.send(field) == child_value } # we have some recursion to do - we're not at the end of the array # so call this method again with a smaller set of children return child.get_child_entity_from_path_by(field, children) if child && !children.empty? child # this is the final thing in the array - return it end |
#nested_path_by(field, opts = {}) ⇒ String
Given a field (and optional delimiter), return a path to the current object. e.g. you’d end up with /path/to/page (where this object is ‘page’)
71 72 73 74 75 76 77 78 79 |
# File 'lib/contentful_rails/nested_resource.rb', line 71 def nested_path_by(field, opts = {}) = { delimiter: '/', prefix: '' } .merge!(opts) delimiter = [:delimiter] prefix = [:prefix].empty? ? '' : "#{[:prefix]}#{delimiter}" path = ([self] + ancestors).reverse.collect { |a| a.send(field) }.join(delimiter).gsub(prefix, '') delimiter + path end |