Sha256: 6516961b3230f144455c4532d82b08a46aa292afe78fb7ded10a1ef12d200290

Contents?: true

Size: 939 Bytes

Versions: 11

Compression:

Stored size: 939 Bytes

Contents

require 'active_support/concern'

module ActiveHouse
  module Querying
    module Scope
      extend ActiveSupport::Concern

      included do
        private :apply_scope, :scope?
      end

      class_methods do
        def new(*)
          super._apply_default_scope
        end
      end

      def _apply_default_scope
        return self if model_class._default_scope.nil?
        apply_scope(model_class._default_scope)
      end

      def respond_to_missing?(method_name, *_args)
        scope?(method_name) || super
      end

      def method_missing(method_name, *args, &_block)
        if scope?(method_name)
          apply_scope(method_name, *args)
        else
          super
        end
      end

      def apply_scope(name, *args)
        scope = model_class._scopes.fetch(name)
        instance_exec(*args, &scope)
      end

      def scope?(name)
        model_class.scope?(name.to_sym)
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
active_house-0.8.0 lib/active_house/querying/scope.rb
active_house-0.7.0 lib/active_house/querying/scope.rb
active_house-0.6.6 lib/active_house/querying/scope.rb
active_house-0.6.5 lib/active_house/querying/scope.rb
active_house-0.6.4 lib/active_house/querying/scope.rb
active_house-0.6.3 lib/active_house/querying/scope.rb
active_house-0.6.2 lib/active_house/querying/scope.rb
active_house-0.6.1 lib/active_house/querying/scope.rb
active_house-0.6.0 lib/active_house/querying/scope.rb
active_house-0.5.1 lib/active_house/querying/scope.rb
active_house-0.5.0 lib/active_house/querying/scope.rb