Sha256: 7d4131f747f0ee39cfdd43a6cf91a1fb9bcb400793896491270136d60cfe951a

Contents?: true

Size: 943 Bytes

Versions: 1

Compression:

Stored size: 943 Bytes

Contents

module Aqua::Query
  
  def self.included( klass ) 
    klass.class_eval do
      extend ClassMethods
      include InstanceMethods
      
      klass.class_eval " 
        def self.storage 
          #{klass}::Storage
        end  
       " 
    end  
  end 
  
  module ClassMethods
    def index_on( *ivars )
      ivars.each do |var|
        storage.index_on_ivar( var )
      end  
    end
    
    def query( index, opts={} )
      opts = Mash.new( opts )
      equals = opts.delete(:equals)
      opts[:equals] = _encode_query( equals ) if equals
      _build_results( storage.query( index, opts ) )
    end
    
    def _encode_query( object ) 
      CGI.escape( Aqua::Translator.pack_object( object ).pack.to_json )
    end
    
    def _build_results( docs )
      if docs.is_a? Array
        docs.map{ |doc| build( doc ) }
      else
        build( doc )
      end    
    end        
  end
  
  module InstanceMethods
  end

end   

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
aqua-0.2.0 lib/aqua/object/query.rb