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