Sha256: eb2edf635097f0dd4d25cddf8e00569b10967d04b9d0c2b1b387aca3e8a66089

Contents?: true

Size: 1.61 KB

Versions: 4

Compression:

Stored size: 1.61 KB

Contents

module Netzke
  module Sequel
    module RelationExtensions
      def self.included receiver
        receiver.class_eval do
          def_dataset_method :extend_with do |*params|
            scope = params.shift
            case scope.class.name
            when "Symbol" # model's scope
              self.send(scope, *params)
            when "String" # SQL query or SQL query with params (e.g. ["created_at < ?", 1.day.ago])
              params.empty? ? self.where(scope) : self.where([scope, *params])
            when "Array"
              self.extend_with(*scope)
            when "Hash"  # conditions hash
              self.where(scope)
            when "ActiveSupport::HashWithIndifferentAccess" # conditions hash
              self.where(scope)
            when "Proc"   # receives a relation, must return a relation
              scope.call(self)
            else
              raise ArgumentError, "Wrong parameter type for ActiveRecord::Relation#extend_with"
            end
          end

          # Non-destructively extends itself whith a hash of double-underscore'd conditions,
          # where the last part "__" is MetaWhere operator (which is required), e.g.:
          #     {:role__name__like => "%admin"}

          def_dataset_method :extend_with_netzke_conditions do |cond|
            cond.each_pair.inject(self) do |r, (k,v)|
              assoc, method, *operator = k.to_s.split("__")
              operator.empty? ? r.where(assoc.to_sym.send(method) => v) : r.where(assoc.to_sym => {method.to_sym.send(operator.last) => v}).joins(assoc.to_sym)
            end
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
netzke-basepack-0.7.7 lib/netzke/sequel/relation_extensions.rb
netzke-basepack-zh-0.7.6 lib/netzke/sequel/relation_extensions.rb
netzke-basepack-0.7.6 lib/netzke/sequel/relation_extensions.rb
netzke-basepack-0.7.5 lib/netzke/sequel/relation_extensions.rb