diff --git a/app/logical/post_query_builder.rb b/app/logical/post_query_builder.rb index 5578da617..296933682 100644 --- a/app/logical/post_query_builder.rb +++ b/app/logical/post_query_builder.rb @@ -1145,6 +1145,9 @@ class PostQueryBuilder def parse_range(string, type = :integer) range = case string + when /\A(.+?)\.\.\.(.+)/ # A...B + lo, hi = [parse_cast($1, type), parse_cast($2, type)].sort + [:between, (lo...hi)] when /\A(.+?)\.\.(.+)/ lo, hi = [parse_cast($1, type), parse_cast($2, type)].sort [:between, (lo..hi)] diff --git a/test/unit/post_query_builder_test.rb b/test/unit/post_query_builder_test.rb index ba02fc97e..6ccaac141 100644 --- a/test/unit/post_query_builder_test.rb +++ b/test/unit/post_query_builder_test.rb @@ -141,8 +141,12 @@ class PostQueryBuilderTest < ActiveSupport::TestCase assert_tag_match([posts[2], posts[1]], "id:>=#{posts[1].id}") assert_tag_match([posts[1], posts[0]], "id:<=#{posts[1].id}") assert_tag_match([posts[2], posts[0]], "id:#{posts[0].id},#{posts[2].id}") - assert_tag_match(posts.reverse, "id:#{posts[0].id}..#{posts[2].id}") - assert_tag_match(posts.reverse, "id:#{posts[2].id}..#{posts[0].id}") + + assert_tag_match([posts[2], posts[1]], "id:#{posts[1].id}..") + assert_tag_match([posts[1], posts[0]], "id:..#{posts[1].id}") + assert_tag_match([posts[1], posts[0]], "id:#{posts[0].id}..#{posts[1].id}") + assert_tag_match([posts[1], posts[0]], "id:#{posts[1].id}..#{posts[0].id}") + assert_tag_match([posts[1], posts[0]], "id:#{posts[0].id}...#{posts[2].id}") assert_tag_match([], "id:#{posts[0].id} id:#{posts[2].id}") assert_tag_match([posts[1]], "id:>#{posts[0].id} id:<#{posts[2].id}")