Module: DataMapper::Ambition::Query

Defined in:
lib/dm-ambition/query.rb,
lib/dm-ambition/query/filter_processor.rb

Defined Under Namespace

Classes: FilterProcessor

Constant Summary collapse

@@sexps =
{}

Instance Method Summary collapse

Instance Method Details

#filter(&block) ⇒ Object

TODO: spec and document this



8
9
10
11
12
13
14
15
16
17
18
# File 'lib/dm-ambition/query.rb', line 8

def filter(&block)
  # TODO: benchmark Marshal versus just building the sexp on demand

  # deep clone the sexp for multiple re-use
  sexp = Marshal.load(@@sexps[block.to_s] ||= Marshal.dump(block.to_sexp))

  processor = FilterProcessor.new(block.binding, model)
  processor.process(sexp)

  self.class.new(repository, model, options.merge(:conditions => conditions & processor.conditions))
end