Sha256: 8339356310267a1ee7980c65858897f3545a50b614dadae6a02e24e9b84261a3

Contents?: true

Size: 1.15 KB

Versions: 1

Compression:

Stored size: 1.15 KB

Contents

module ApiResource
  module Scopes
    extend ActiveSupport::Concern
    
    
    module ClassMethods
      def scopes
        return self.related_objects[:scopes]
      end
      
      def scope(name, hsh)
        raise ArgumentError, "Expecting an attributes hash given #{hsh.inspect}" unless hsh.is_a?(Hash)
        self.related_objects[:scopes][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[:scopes][name.to_sym].present?
      end
      
      def scope_attributes(name)
        raise "No such scope #{name}" unless self.scope?(name)
        self.related_objects[:scopes][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

1 entries across 1 versions & 1 rubygems

Version Path
api_resource-0.3.14 lib/api_resource/scopes.rb