Sha256: a14c48e6db40a123471d9fc07f6656e272b4e8bfcdf3e89d453b216046e70501

Contents?: true

Size: 995 Bytes

Versions: 1

Compression:

Stored size: 995 Bytes

Contents

module ScopedFrom

  module ActiveRecord

    def self.included(base)
      base.extend(ClassMethods)
    end

    module ClassMethods
      
      def scope(name, scope_options, &block)
        super
        scope_arities[name] = scope_options.is_a?(Proc) ? scope_options.arity : -1
      end
      
      def scope_with_one_argument?(name)
        scope_arities[name] == 1
      end
      
      def scope_without_argument?(name)
        [-1, 0].include?(scope_arities[name])
      end
      
      def scoped_from(params, options = {})
        query_class = "#{name}Query".constantize rescue nil
        query_class = Query unless query_class.is_a?(Class) && query_class.ancestors.include?(Query)
        query_class.new(self, params, options).scope
      end
      
      private
      
      def scope_arities
        read_inheritable_attribute(:scope_arities) || write_inheritable_attribute(:scope_arities, ActiveSupport::HashWithIndifferentAccess.new)
      end

    end
    
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
scoped_from-0.1 lib/scoped_from/active_record.rb