Sha256: 45212ef5d0b219bad4db72947b4227d91f2fa0d5790bd9500a73c90ea2c35c52

Contents?: true

Size: 1.14 KB

Versions: 12

Compression:

Stored size: 1.14 KB

Contents

module ApiResource
  module Scopes
    extend ActiveSupport::Concern
    
    
    module ClassMethods
      def scopes
        return self.related_objects[:scope]
      end
      
      def scope(name, hsh)
        raise ArgumentError, "Expecting an attributes hash given #{hsh.inspect}" unless hsh.is_a?(Hash)
        self.related_objects[:scope][name.to_sym] = hsh
        # we also need to define a class method for each scope
        self.instance_eval <<-EOE, __FILE__, __LINE__ + 1
          def #{name}(*args)
            return #{ApiResource::Associations::ResourceScope.class_factory(hsh)}.new(self, :#{name}, *args)
          end
        EOE
      end
      
      def scope?(name)
        self.related_objects[:scope][name.to_sym].present?
      end
      
      def scope_attributes(name)
        raise "No such scope #{name}" unless self.scope?(name)
        self.related_objects[:scope][name.to_sym]
      end
    end
    
    def scopes
      return self.class.scopes
    end
    
    def scope?(name)
      return self.class.scope?(name)
    end
    
    def scope_attributes(name)
      return self.class.scope_attributes(name)
    end
    
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
api_resource-0.3.12 lib/api_resource/scopes.rb
api_resource-0.3.11 lib/api_resource/scopes.rb
api_resource-0.3.10 lib/api_resource/scopes.rb
api_resource-0.3.8 lib/api_resource/scopes.rb
api_resource-0.3.7 lib/api_resource/scopes.rb
api_resource-0.3.6 lib/api_resource/scopes.rb
api_resource-0.3.5 lib/api_resource/scopes.rb
api_resource-0.3.4 lib/api_resource/scopes.rb
api_resource-0.3.3 lib/api_resource/scopes.rb
api_resource-0.3.2 lib/api_resource/scopes.rb
api_resource-0.3.1 lib/api_resource/scopes.rb
api_resource-0.3.0 lib/api_resource/scopes.rb