module ContentfulRails::NestedResource
Module for obtaining object references from paths
Public Class Methods
included(base)
click to toggle source
# File lib/contentful_rails/nested_resource.rb, line 4 def self.included(base) base.extend ClassMethods end
Public Instance Methods
get_child_entity_from_path_by(field, children)
click to toggle source
Given a field and an array of child fields, we need to recurse through them to get the last one
@param field [Symbol] the field we need to search for @param children [Array] an array of field values to match against @return an entity matching this class, which is the last in the tree
# 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 = {})
click to toggle source
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')
@param field [Symbol] the field to use to create the path @param opts [Hash] the delimiter to use. Defaults to “/” @return [String] the path as a string
# File lib/contentful_rails/nested_resource.rb, line 71 def nested_path_by(field, opts = {}) options = { delimiter: '/', prefix: '' } options.merge!(opts) delimiter = options[:delimiter] prefix = options[:prefix].empty? ? '' : "#{options[:prefix]}#{delimiter}" path = ([self] + ancestors).reverse.collect { |a| a.send(field) }.join(delimiter).gsub(prefix, '') delimiter + path end