Sha256: 629723715673cb76954855fa5c8441bff78681b7f9f7d987b7192211066d2448

Contents?: true

Size: 1.11 KB

Versions: 2

Compression:

Stored size: 1.11 KB

Contents

module Rooftop
  module Content
    class Collection < ::Array
      def initialize(content_fields)
          content_fields.each do |field|
            self << Rooftop::Content::Field.new(field)
          end
      end

      # Find content_fields by attribute. Assume there will only be one attribute in the search
      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

      def named(name)
        find_by(name: name.to_s)
      end

      def field_names
        collect(&:name)
      end

      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

      def respond_to_missing?(method, private=false)
        if named(method).length == 0
          super
        else
          true
        end
      end

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rooftop-0.0.6 lib/rooftop/content/collection.rb
rooftop-0.0.5 lib/rooftop/content/collection.rb