Sha256: 5b983471c661ab4f956b6339936b24022de279ac59e2fa1390e9910251a3b4ea
Contents?: true
Size: 1018 Bytes
Versions: 2
Compression:
Stored size: 1018 Bytes
Contents
# encoding: utf-8 module Dusen class Syntax def initialize @scopers = {} end def learn_field(field, &scoper) field = field.to_s @scopers[field] = scoper end def learn_unknown_field(&unknown_scoper) @unknown_scoper = unknown_scoper end def search(root_scope, query) scope = root_scope query = parse(query) if query.is_a?(String) query = query.condensed query.each do |token| scoper = @scopers[token.field] || unknown_scoper scope = scoper.call(scope, token.value) end scope end def fields @scopers end def parse(query) Parser.parse(query) end private DEFAULT_UNKNOWN_SCOPER = lambda do |scope, *args| if scope.respond_to?(:where) # Rails 3 scope.where('1=2') else # Rails 2 scope.scoped(:conditions => ['1=2']) end end def unknown_scoper @unknown_scoper || DEFAULT_UNKNOWN_SCOPER end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dusen-0.4.10 | lib/dusen/syntax.rb |
dusen-0.4.9 | lib/dusen/syntax.rb |