Sha256: 14de82d58599e91247083a3257f3d17856d8d96eccbecec54902840868ed3fcc

Contents?: true

Size: 1.26 KB

Versions: 4

Compression:

Stored size: 1.26 KB

Contents

module Faceted

  module Presenter

    include Faceted::HasObject

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

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

    module ClassMethods

      def klass
        @presents
      end

      def presents(name, args={})
        class_name = args[:class_name] || name.to_s.classify
        @presents = eval(class_name)
        define_method :find_by do
          args[:find_by] || :id
        end
        define_method :"#{class_name.downcase}" do
          object
        end
      end

      def where(args)
        if klass.respond_to? :fields
          if klass.fields.respond_to?(:keys)
            # Mongoid
            attrs = args.select{|k,v| klass.fields.keys.include? k.to_s}
          else
            attrs = args.select{|k,v| klass.fields.include? k.to_s}
          end
        else
          # ActiveRecord et al
          attrs = args.select{|k,v| klass.column_names.include? k.to_s}
        end
        materialize(klass.where(attrs))
      end

    end

  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
faceted-1.2.3 lib/faceted/presenter.rb
faceted-1.2.2 lib/faceted/presenter.rb
faceted-1.2.1 lib/faceted/presenter.rb
faceted-1.2.0 lib/faceted/presenter.rb