Project

everywhere

0.02
No commit activity in last 3 years
No release in over 3 years
Hash condition syntax for AR query everywhere!
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0

Runtime

 Project Readme

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 © 2011 Akira Matsuda. See MIT-LICENSE for further details.