everywhere

Hash condition syntax for AR query everywhere!

MIT License

Downloads
26.4K
Stars
58
Committers
2

= 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: https://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. http://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 (c) 2011 Akira Matsuda. See MIT-LICENSE for further details.