examples/sequel_example.rb in search_lingo-1.0.3 vs examples/sequel_example.rb in search_lingo-2.0.0.pre1

- old
+ new

@@ -27,13 +27,14 @@ class Task < Sequel::Model # :nodoc: many_to_one :category end class CategoryParser # :nodoc: - def call(token) + def call(token, chain) if token.modifier == 'cat' - [:where, { Sequel.qualify('category', 'name') => token.term }] + chain.eager_graph(:category) + .where Sequel.qualify('category', 'name') => token.term end end end class TaskSearch < SearchLingo::AbstractSearch # :nodoc: @@ -41,36 +42,35 @@ # Match categories with priority less than or greater than a given value. # # <2 => Categories with priority < 2 # >5 => Categories with priority > 5 - parser do |token| + parser do |token, chain| token.match /\A([<>])([[:digit:]]+)\z/ do |m| - [:where, Sequel.expr { priority.send m[1], m[2] }] + chain.eager_graph(:category) + .where Sequel.expr { priority.send m[1], m[2] } end end # Match tasks with a given due_date. # # 7/4/1776 => Tasks with due_date == Date.new(1776, 7, 4) # 7/4/17 => Tasks with due_date == Date.new(2017, 7, 4) - parser do |token| - token.match %r{\A(?<m>\d{1,2})/(?<d>\d{1,2})/(?<y>\d{2}\d{2}?)\z} do |m| - begin - [:where, { due_date: Date.parse("#{m[:y]}/#{m[:m]}/#{m[:d]}") }] - rescue ArgumentError - end + parser do |token, chain| + token.match %r{\A(\d{1,2})/(\d{1,2})/(\d{2}\d{2}?)\z} do |m| + date = begin + Date.parse '%d/%d/%d' % m.values_at(3, 1, 2) + rescue ArgumentError + return nil + end + chain.where due_date: date end end # Match tasks with names that contain a given term. # # pay bills => Match tasks with names like "pay bills", "pay bills by today" # brush teeth => Match tasks with names like "brush teeth", "brush teeth and floss" - def default_parse(token) - [:where, Sequel.lit('tasks.name LIKE ?', "%#{token.term}%")] - end - - def scope - @scope.eager_graph(:category) + def default_parse(token, chain) + chain.where Sequel.lit 'tasks.name LIKE ?', "%#{token.term}%" end end