Skip to content
This repository has been archived by the owner on Dec 12, 2021. It is now read-only.

Commit

Permalink
serialize dates/times properly when in a string
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanb committed Nov 30, 2011
1 parent 02a3ec4 commit 7ddf02f
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
6 changes: 5 additions & 1 deletion lib/xapit.rb
Expand Up @@ -58,11 +58,15 @@ def search(*args)
def serialize_value(value)
if value.kind_of?(Time)
Xapian.sortable_serialise(value.to_i)
elsif value.kind_of?(Numeric) || value.to_s =~ /^[0-9]+$/
elsif value.to_s =~ /^"?\d{4}-\d{2}-\d{2}/
Xapian.sortable_serialise(Time.parse(value.to_s).to_i)
elsif value.kind_of?(Numeric) || value.to_s =~ /^\d+$/
Xapian.sortable_serialise(value.to_f)
else
value.to_s.downcase
end
rescue ArgumentError # in case Time.parse errors out
value.to_s.downcase
end

def enable
Expand Down
6 changes: 6 additions & 0 deletions spec/xapit/server/query_spec.rb
Expand Up @@ -33,6 +33,12 @@
query.applied_facet_options.should eq([{:id => Xapit.facet_identifier(:priority, "3"), :name => "priority", :value => "3"}])
end

it "fetches results based on time in string" do
Xapit.database.add_document(:attributes => {:priority => {:value => 3.days.ago, :field => {}}}, :id => 123, :class => "Greeting")
query = Xapit::Server::Query.new([{:where => {:priority => {from: 5.days.ago.to_json, to: 1.day.ago.to_json}}}])
query.records.first[:id].should eq("123")
end

describe "with priorities" do
before(:each) do
(1..5).each do |number|
Expand Down
9 changes: 9 additions & 0 deletions spec/xapit/xapit_spec.rb
Expand Up @@ -31,4 +31,13 @@
Xapit.config[:query_class] = "String"
Xapit.query_class.should eq(String)
end

it "serialize_value converts time and numbers properly" do
time = 2.days.ago
Xapit.serialize_value(time).should eq(Xapian.sortable_serialise(time.to_i))
Xapit.serialize_value(time.to_json).should eq(Xapian.sortable_serialise(time.to_i))
Xapit.serialize_value(123).should eq(Xapian.sortable_serialise(123))
Xapit.serialize_value("123").should eq(Xapian.sortable_serialise(123))
Xapit.serialize_value("1234-56-78foo").should eq("1234-56-78foo")
end
end

0 comments on commit 7ddf02f

Please sign in to comment.