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