Sha256: 2d46de95002937cc0f8e868b7957b801e38008dbed60caba92a307b468df09ad
Contents?: true
Size: 1.82 KB
Versions: 1
Compression:
Stored size: 1.82 KB
Contents
require 'active_record/relation/query_methods' module ActiveRecord module QueryMethods class WhereChain def initialize(scope) @scope = scope end def overlap(opts) opts.each do |key, value| @scope = @scope.where(arel_table[key].overlap(value)) end @scope end def contained_within(opts) opts.each do |key, value| @scope = @scope.where(arel_table[key].contained_within(value)) end @scope end def contained_within_or_equals(opts) opts.each do |key, value| @scope = @scope.where(arel_table[key].contained_within_or_equals(value)) end @scope end def contains(opts) opts.each do |key, value| @scope = @scope.where(arel_table[key].contains(value)) end @scope end def contains_or_equals(opts) opts.each do |key, value| @scope = @scope.where(arel_table[key].contains_or_equals(value)) end @scope end def any(opts) equality_to_function('ANY', opts) end def all(opts) equality_to_function('ALL', opts) end private def arel_table @arel_table ||= @scope.engine.arel_table end def equality_to_function(function_name, opts) opts.each do |key, value| any_function = Arel::Nodes::NamedFunction.new(function_name, [arel_table[key]]) predicate = Arel::Nodes::Equality.new(value, any_function) @scope = @scope.where(predicate) end @scope end end def where_with_chaining(opts = :chaining, *rest) if opts == :chaining WhereChain.new(self) else where_without_chaining(opts, *rest) end end alias_method_chain :where, :chaining end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
postgres_ext-0.3.0 | lib/postgres_ext/active_record/relation/query_methods.rb |