it is now building a small block out of the term parameters
This commit is contained in:
parent
41ec65a7a2
commit
0cb40b86f2
|
@ -42,12 +42,12 @@ module Polecat
|
||||||
# @param [String] query a String which get's matched against the documents
|
# @param [String] query a String which get's matched against the documents
|
||||||
# @return [Array] a list of all matching documents
|
# @return [Array] a list of all matching documents
|
||||||
def search query
|
def search query
|
||||||
@reader.read.select do |doc|
|
@content = @reader.read if @content.nil?
|
||||||
|
@content.select do |doc|
|
||||||
#doc.attributes.fetch(@default_field).fetch(:value) == query
|
#doc.attributes.fetch(@default_field).fetch(:value) == query
|
||||||
rs = []
|
rs = []
|
||||||
query.terms.each do |term|
|
query.terms.each do |term|
|
||||||
val = doc.send(term.field.to_sym)
|
if term.compare(doc.send(term.field))
|
||||||
if compare val, term.operator, term.value
|
|
||||||
rs << true
|
rs << true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -58,27 +58,5 @@ module Polecat
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# compare the document value with the searched value
|
|
||||||
#
|
|
||||||
# This compares the two values with the operator
|
|
||||||
# @return [Any] trueish for matches or falsey
|
|
||||||
# @private
|
|
||||||
def compare ival, op, tval
|
|
||||||
if op == :eq
|
|
||||||
if tval.class == Regexp
|
|
||||||
ival.match tval
|
|
||||||
else
|
|
||||||
ival == tval
|
|
||||||
end
|
|
||||||
elsif op == :gt
|
|
||||||
ival < tval
|
|
||||||
elsif op == :lt
|
|
||||||
ival > tval
|
|
||||||
else
|
|
||||||
false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
private :compare
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,10 +12,30 @@ module Polecat
|
||||||
@field = field
|
@field = field
|
||||||
@operator = operator
|
@operator = operator
|
||||||
if @operator == :eq && value.class == String
|
if @operator == :eq && value.class == String
|
||||||
@value = /^#{value}$/
|
value = /^#{value}$/
|
||||||
else
|
else
|
||||||
@value = value
|
value = value
|
||||||
end
|
end
|
||||||
|
@value = value
|
||||||
|
|
||||||
|
method_string = 'def compare(inval);'
|
||||||
|
if value.class == Regexp
|
||||||
|
if operator == :eq
|
||||||
|
method_string += " inval.match(@value);"
|
||||||
|
else
|
||||||
|
raise ArgumentError, "operation #{operator} does not work with a regexp"
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if operator == :eq
|
||||||
|
method_string += " inval == @value;"
|
||||||
|
elsif operator == :lt
|
||||||
|
method_string += " inval < @value;"
|
||||||
|
elsif operator == :gt
|
||||||
|
method_string += " inval > @value;"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
method_string += 'end;'
|
||||||
|
self.instance_eval method_string
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,6 +13,17 @@ describe "Term#new" do
|
||||||
t.value.should == /^foo$/
|
t.value.should == /^foo$/
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "creates a method #compare with one argument after initialization" do
|
||||||
|
t = Polecat::Term.new :name, :eq, "foo"
|
||||||
|
t.respond_to?(:compare).should == true
|
||||||
|
t.method(:compare).arity.should == 1
|
||||||
|
end
|
||||||
|
|
||||||
|
it "raises an error if a regexp shall be compared for larger or minor" do
|
||||||
|
lambda { Polecat::Term.new(:name, :lt, /foo/) }.should(
|
||||||
|
raise_error(ArgumentError))
|
||||||
|
end
|
||||||
|
|
||||||
it "raises an error if no argument is given" do
|
it "raises an error if no argument is given" do
|
||||||
lambda { Polecat::Term.new }.should raise_error
|
lambda { Polecat::Term.new }.should raise_error
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue