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.