Sha256: bfc3c93369ebdd2fe8f5cd4340a59db6b75068073fcff06c3bbe45c1af9c5721

Contents?: true

Size: 1.31 KB

Versions: 2

Compression:

Stored size: 1.31 KB

Contents

module Hobo
  
  module Scopes
    
    class ScopedProxy
      
      include ApplyScopes
      
      def initialize(klass, scope)
        @klass = klass
        @scope = scope
      end
      
      
      def method_missing(name, *args, &block)
        if name.to_sym.in?(@klass.defined_scopes.keys) || @klass.create_automatic_scope(name)
          proxy = @klass.send(name, *args)
          proxy.instance_variable_set("@parent_scope", self)
          proxy
        else
          _apply_scope { @klass.send(name, *args, &block) }
        end
      end
      
      def first
        self.find(:first)
      end
      
      def member_class
        @klass
      end
      
      private
      def _apply_scope
        if @parent_scope
          @parent_scope.send(:_apply_scope) do
            @scope ? @klass.send(:with_scope, :find => @scope) { yield } : yield
          end
        else
          @scope ? @klass.send(:with_scope, :find => @scope) { yield } : yield
        end
      end
      
    end
    (Object.instance_methods + 
     Object.private_instance_methods +
     Object.protected_instance_methods).each do |m|
      ScopedProxy.send(:undef_method, m) unless
        m.in?(%w{initialize method_missing send instance_variable_set instance_variable_get puts}) || m.starts_with?('_')
      
    end
    
  end
  
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hobo-0.7.5 hobo_files/plugin/lib/hobo/scopes/scoped_proxy.rb
hobo-0.7.4 hobo_files/plugin/lib/hobo/scopes/scoped_proxy.rb