Sha256: 8d46186b0283ce73faff232a4691dbe1ed1582b07258cb3c3903223fa5af65ae

Contents?: true

Size: 1.33 KB

Versions: 6

Compression:

Stored size: 1.33 KB

Contents

module Faceted

  module Collector

    include Faceted::Model

    def self.included(base)
      base.extend ActiveModel::Naming
      base.send(:attr_accessor, :errors)
      base.send(:attr_accessor, :success)
      base.extend ClassMethods
      base.extend Faceted::Model::ModelClassMethods
    end

    # Class methods ===========================================================

    module ClassMethods

      def collects(name, args={})
        @collects = eval "#{scope}#{args[:class_name] || name.to_s.classify}"
        define_method :"#{name.downcase}" do
          objects
        end
        define_method :finder do
          {"#{args[:find_by]}" => self.send(args[:find_by])}
        end
        self.send(:attr_accessor, args[:find_by])
      end

      def collected_class
        @collects
      end

    end

    # Instance methods =========================================================

    def initialize(args={})
      ! args.empty? && args.symbolize_keys.delete_if{|k,v| v.nil?}.each{|k,v| self.send("#{k}=", v) if self.respond_to?("#{k}=") && ! v.blank? }
      self.errors = []
      self.success = true
    end

    def to_hash
      objects.map{|o| o.to_hash}
    end

    private

    def objects
      return unless self.class.collected_class
      @objects ||= self.class.collected_class.where(self.finder)
    end

  end

end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
faceted-0.8.2 lib/faceted/collector.rb
faceted-0.8.1 lib/faceted/collector.rb
faceted-0.8.0 lib/faceted/collector.rb
faceted-0.7.2 lib/faceted/collector.rb
faceted-0.7.1 lib/faceted/collector.rb
faceted-0.7.0 lib/faceted/collector.rb