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

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

Parameters:

  • field (Symbol)

    the field we need to search for

  • children (Array)

    an array of field values to match against

Returns:

  • an entity matching this class, which is the last in the tree



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’)

Parameters:

  • field (Symbol)

    the field to use to create the path

  • opts (Hash) (defaults to: {})

    the delimiter to use. Defaults to “/”

Returns:

  • (String)

    the path as a string



71
72
73
74
75
76
77
78
79
# 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