Module: Metabolical::AR3Scopes

Defined in:
lib/metabolical/scopes.rb

Class Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/metabolical/scopes.rb', line 16

def self.included(klass)
  class_eval do
    klass.send :named_scope, :with_meta, lambda{|k| joins([:meta]).where({"meta_data.key" => k}) }
    klass.send :named_scope, :with_metas, includes(:meta)
    klass.send :named_scope, :with_meta_data, lambda{|k, v| joins(:meta).where("meta_data.key" => k, "meta_data.data" => v.to_yaml)}
    # TODO: find a better way to define this
    # Arel provides a way to specify left joins by using
    # join(left).on(... syntax
    klass.send :named_scope, :without_meta, lambda{|k| {:joins => "left join meta_data md on md.metabolized_id = #{klass.table_name}.#{klass.primary_key} and md.metabolized_type = '#{klass.to_s}' and md.key = '#{k}'", :conditions => "md.metabolized_id is null"}
    }
  end
end