diff options
author | Keenan Brock <keenan@thebrocks.net> | 2015-12-05 20:23:12 -0500 |
---|---|---|
committer | Keenan Brock <keenan@thebrocks.net> | 2015-12-05 20:23:12 -0500 |
commit | d2e6be1677b124b3eef5b3ebe0fd4a0d31d8a2bf (patch) | |
tree | 8715cc5153868d329596827edf97dc1443122e6b | |
parent | 4e7b4693b89d920e43f5c2c94b44957a3f392a80 (diff) | |
download | rails-d2e6be1677b124b3eef5b3ebe0fd4a0d31d8a2bf.tar.gz rails-d2e6be1677b124b3eef5b3ebe0fd4a0d31d8a2bf.tar.bz2 rails-d2e6be1677b124b3eef5b3ebe0fd4a0d31d8a2bf.zip |
introduce predicate {does_not_}matches_regexp
-rw-r--r-- | lib/arel/predications.rb | 8 | ||||
-rw-r--r-- | test/visitors/test_postgres.rb | 19 |
2 files changed, 21 insertions, 6 deletions
diff --git a/lib/arel/predications.rb b/lib/arel/predications.rb index ed083f5402..1d2b0de235 100644 --- a/lib/arel/predications.rb +++ b/lib/arel/predications.rb @@ -122,6 +122,10 @@ Passing a range to `#not_in` is deprecated. Call `#not_between`, instead. Nodes::Matches.new self, quoted_node(other), escape, case_sensitive end + def matches_regexp other, case_sensitive = true + Nodes::Regexp.new self, quoted_node(other), case_sensitive + end + def matches_any others, escape = nil, case_sensitive = false grouping_any :matches, others, escape, case_sensitive end @@ -134,6 +138,10 @@ Passing a range to `#not_in` is deprecated. Call `#not_between`, instead. Nodes::DoesNotMatch.new self, quoted_node(other), escape, case_sensitive end + def does_not_match_regexp other, case_sensitive = true + Nodes::NotRegexp.new self, quoted_node(other), case_sensitive + end + def does_not_match_any others, escape = nil grouping_any :does_not_match, others, escape end diff --git a/test/visitors/test_postgres.rb b/test/visitors/test_postgres.rb index 4209712e8e..5901c56968 100644 --- a/test/visitors/test_postgres.rb +++ b/test/visitors/test_postgres.rb @@ -114,21 +114,25 @@ module Arel describe "Nodes::Regexp" do it "should know how to visit" do - node = Arel::Nodes::Regexp.new(@table[:name], Nodes.build_quoted('foo.*')) + node = @table[:name].matches_regexp('foo.*') + node.must_be_kind_of Nodes::Regexp + node.case_sensitive.must_equal(true) compile(node).must_be_like %{ "users"."name" ~ 'foo.*' } end it "can handle case insensitive" do - node = Arel::Nodes::Regexp.new(@table[:name], Nodes.build_quoted('foo.*'), false) + node = @table[:name].matches_regexp('foo.*', false) + node.must_be_kind_of Nodes::Regexp + node.case_sensitive.must_equal(false) compile(node).must_be_like %{ "users"."name" ~* 'foo.*' } end it 'can handle subqueries' do - subquery = @table.project(:id).where(Arel::Nodes::Regexp.new(@table[:name], Nodes.build_quoted('foo.*'))) + subquery = @table.project(:id).where(@table[:name].matches_regexp('foo.*')) node = @attr.in subquery compile(node).must_be_like %{ "users"."id" IN (SELECT id FROM "users" WHERE "users"."name" ~ 'foo.*') @@ -138,21 +142,24 @@ module Arel describe "Nodes::NotRegexp" do it "should know how to visit" do - node = Arel::Nodes::NotRegexp.new(@table[:name], Nodes.build_quoted('foo.*')) + node = @table[:name].does_not_match_regexp('foo.*') + node.must_be_kind_of Nodes::NotRegexp + node.case_sensitive.must_equal(true) compile(node).must_be_like %{ "users"."name" !~ 'foo.*' } end it "can handle case insensitive" do - node = Arel::Nodes::NotRegexp.new(@table[:name], Nodes.build_quoted('foo.*'), false) + node = @table[:name].does_not_match_regexp('foo.*', false) + node.case_sensitive.must_equal(false) compile(node).must_be_like %{ "users"."name" !~* 'foo.*' } end it 'can handle subqueries' do - subquery = @table.project(:id).where(Arel::Nodes::NotRegexp.new(@table[:name], Nodes.build_quoted('foo.*'))) + subquery = @table.project(:id).where(@table[:name].does_not_match_regexp('foo.*')) node = @attr.in subquery compile(node).must_be_like %{ "users"."id" IN (SELECT id FROM "users" WHERE "users"."name" !~ 'foo.*') |