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