Sha256: a708c54e69a4b196b6a5bacbb3b1ff855e53a48d8f9b30616c4df38fb65ad06a

Contents?: true

Size: 908 Bytes

Versions: 6

Compression:

Stored size: 908 Bytes

Contents

require 'friendly/named_scope'

module Friendly
  class ScopeProxy
    attr_reader :klass, :scope_klass, :scopes

    def initialize(klass, scope_klass = Scope)
      @klass       = klass
      @scope_klass = scope_klass
      @scopes      = {}
    end

    def add_named(name, parameters)
      scopes[name] = parameters
      add_scope_method_to_klass(name)
    end

    def get(name)
      scopes[name]
    end

    def get_instance(name)
      scope_klass.new(klass, get(name))
    end

    def ad_hoc(parameters)
      scope_klass.new(klass, parameters)
    end

    def has_named_scope?(name)
      scopes.has_key?(name)
    end

    protected
      def add_scope_method_to_klass(scope_name)
        klass.class_eval do
          eval <<-__END__
            def self.#{scope_name}
              scope_proxy.get_instance(:#{scope_name})
            end
          __END__
        end
      end
  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
friendly-0.4.4 lib/friendly/scope_proxy.rb
friendly_postgres-0.4.3 lib/friendly/scope_proxy.rb
friendly-0.4.3 lib/friendly/scope_proxy.rb
friendly-0.4.2 lib/friendly/scope_proxy.rb
friendly-0.4.1 lib/friendly/scope_proxy.rb
friendly-0.4.0 lib/friendly/scope_proxy.rb