Everywhere¶ ↑
Hash condition syntax for AR query everywhere!
Features¶ ↑
where + not¶ ↑
“Everywhere
” enables you to construct where + not query such as below using AR Hash query syntax.
SELECT "users".* FROM "users" WHERE ("users"."name" != 'foo') SELECT "users".* FROM "users" WHERE ("users"."created_at" IS NOT NULL) SELECT "users".* FROM "users" WHERE ("users"."status" NOT IN ('inactive', 'deleted'))
where + like¶ ↑
Same for where + like.
SELECT "users".* FROM "users" WHERE ("users"."name" LIKE 'Akira%')
where + not like¶ ↑
And where + “not like” as well.
SELECT "users".* FROM "users" WHERE ("users"."name" NOT LIKE 'Matz%')
Syntaxes¶ ↑
“Everywhere
” supports 5 syntaxes. Note that you can use only one syntax at a time, and others will be disabled. The chain
syntax will be enabled by default.
-
chain
Model.where
with no args can be chained with not
, like
, and not_like
methods. This syntax was proposed by Jeremy Kemper: github.com/rails/rails/pull/5950#issuecomment-5591330
User.where.not(:name => 'foo') => SELECT "users".* FROM "users" WHERE ("users"."name" != 'foo')
-
hash_value
Push the value into a Hash indexed by :not
. Similar to MongoDB. www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24ne
User.where(:name => {:not => 'foo'}) => SELECT "users".* FROM "users" WHERE ("users"."name" != 'foo')
-
hash_key
Put the whole key + value Hash into another Hash indexed by :not
.
User.where(:not => {:name => 'foo'}) => SELECT "users".* FROM "users" WHERE ("users"."name" != 'foo')
-
symbol
Put :not
as the first parameter of where
method.
User.where(:not, :name => 'foo') => SELECT "users".* FROM "users" WHERE ("users"."name" != 'foo')
-
method
Use the special method named where_not
.
User.where_not(:name => 'foo') => SELECT "users".* FROM "users" WHERE ("users"."name" != 'foo')
See specs for more details.
Supported versions¶ ↑
ActiveRecord 3.0.x, 3.1.x, 3.2.x, and 4.0 (edge)
Usage¶ ↑
Bundle ‘everywhere’ gem.
Configuring the syntax¶ ↑
You can choose one from four syntaxes listed above. For example, if you prefer the symbol syntax, put the following line in your config file.
config.active_record.where_syntax = :hash_value
The default value is :chain
.
-
for users of previous versions
Note that the default behaviour has been changed since 2.0 release if you’ve not explicitly configured the syntax.
Running specs¶ ↑
There is spec file for each syntax but there is no Rake task for running all the specs at once, because there’s no way to load these freedom-patches without interfering each other. So, please run the rspec
command specifying one spec file.
% bundle e rspec spec/chain_spec.rb
Contributing to Everywhere¶ ↑
-
Fork, fix, then send me a pull request.
Copyright¶ ↑
Copyright © 2011 Akira Matsuda. See MIT-LICENSE for further details.