Sha256: bbf5b216000bb3395c12326ff3550db2511316ea9dd192e2ea708ba678e6a42c

Contents?: true

Size: 866 Bytes

Versions: 3

Compression:

Stored size: 866 Bytes

Contents

require 'active_support/concern'

module ActiveHouse
  module Scoping
    extend ActiveSupport::Concern

    included do
      class_attribute :_default_scope, instance_accessor: false
      class_attribute :_scopes, instance_accessor: false
      self._scopes = {}
    end

    class_methods do
      def default_scope(&block)
        self._default_scope = block
      end

      def scope(name, block)
        self._scopes = _scopes.merge(name.to_sym => block)
      end

      def respond_to_missing?(method_name, *_args)
        _scopes.key?(method_name.to_sym)
      end

      def method_missing(method_name, *args, &_block)
        method_name = method_name.to_sym
        if _scopes.key?(method_name)
          scope = _scopes.fetch(method_name)
          all.instance_exec(*args, &scope)
        else
          super
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
active_house-0.1.2 lib/active_house/scoping.rb
active_house-0.1.1 lib/active_house/scoping.rb
active_house-0.1.0 lib/active_house/scoping.rb