class Rooftop::Content::Collection

Public Class Methods

new(content_fields) click to toggle source
# File lib/rooftop/content/collection.rb, line 4
def initialize(content_fields)
  content_fields.each do |field|
    # if the field has a 'fields' key, it is a repeater field. Collect the sub-fields and
    # set the field content to the collection of repeated fields
    if field.has_key?('fields')
      repeated_fields = field[:fields].collect do |repeated_fields|
        repeated_fields.collect{|field| Rooftop::Content::Field.new(field)}
      end
      
      field.delete(:fields)
      field[:value] = repeated_fields
    end

    self << Rooftop::Content::Field.new(field)
  end
end

Public Instance Methods

field_names() click to toggle source
# File lib/rooftop/content/collection.rb, line 33
def field_names
  collect(&:name)
end
Also aliased as: names
find_by(hash) click to toggle source

Find content_fields by attribute. Assume there will only be one attribute in the search

# File lib/rooftop/content/collection.rb, line 22
def find_by(hash)
  raise ArgumentError, "you can only find a field by one attribute at a time" unless hash.length == 1
  attr = hash.first.first
  val = hash.first.last
  self.select {|l| l.send(attr) == val.to_s}
end
method_missing(method, *args, &block) click to toggle source
# File lib/rooftop/content/collection.rb, line 39
def method_missing(method, *args, &block)
  fields = named(method)
  if fields.length > 0
    fields.first.value
  else
    raise Rooftop::Content::FieldNotFoundError, "No field named #{method} was found"
  end
end
named(name) click to toggle source
# File lib/rooftop/content/collection.rb, line 29
def named(name)
  find_by(name: name.to_s)
end
names()
Alias for: field_names
respond_to_missing?(method, private=false) click to toggle source
Calls superclass method
# File lib/rooftop/content/collection.rb, line 48
def respond_to_missing?(method, private=false)
  if named(method).length == 0
    super
  else
    true
  end
end