module Her::Model::ORM::ClassMethods

Public Instance Methods

scope(name, code) click to toggle source

Create a new chainable scope

@example

class User
  include Her::Model

  scope :admins, lambda { where(:admin => 1) }
  scope :page, lambda { |page| where(:page => page) }
enc

User.admins # Called via GET "/users?admin=1"
User.page(2).all # Called via GET "/users?page=2"
# File lib/her_extension/model/orm.rb, line 32
        def scope(name, code)
          
          # Add the scope method to the class
          metaclass = (class << self; self end)
          metaclass.send(:define_method, name) do |*args|
            instance_exec(*args, &code)
          end
          Relation.scopes["#{self.to_s}.#{name}"] = code
          
          # Add the scope method to the Relation class
          Relation.class_eval <<-RUBY, __FILE__, __LINE__ + 1
            def #{name}(*args)
              parent_klass = @parent.instance_variable_get("@klass") || @parent.to_s
              instance_exec(*args,&self.class.scopes["\#{parent_klass}.#{name}"])
            end
          RUBY
        end

Private Instance Methods

blank_relation() click to toggle source
# File lib/her_extension/model/orm.rb, line 51
def blank_relation
  @blank_relation ||= Relation.new(self)
  @blank_relation.params = {}
  @blank_relation
end