Sha256: 5823a4db1bed87e8f524e492a38c0461dc2a3dc3ca220bd4313e7cea9e87ae8b

Contents?: true

Size: 1.49 KB

Versions: 2

Compression:

Stored size: 1.49 KB

Contents

module Ratlas
  class Query

    def initialize(target, scope = :all, conditions = {})
      @target = target
      @scope = scope
      @conditions = {:limit => "50"}.merge(conditions)
      @conditions.delete_if{|k,v| @target.respond_to?(:exclude) && @target.exclude.include?(k)}
    end

    def where(conditions)
      raise "#where expects a conditions hash" unless conditions.is_a?(Hash)
      add_conditions(conditions)
      self
    end
    
    def each &block
      execute.each &block
    end
    
    def to_a
      execute.to_a
    end

    def and(conditions)
      where(conditions)
    end

    def limit(limit)
      add_condition(:limit => limit )
    end

    def to_params
      to_uri.query
    end

    def to_uri
      uri = Addressable::URI.new
      uri.host = Ratlas::ENDPOINT
      uri.path = Ratlas::ENDPOINT_VERSION + '/' + @target.resource_name + '.json'
      uri.query_values = conditions_for_query
      uri
    end
    
    def request
      JSON.parse(Net::HTTP.get_response(URI.parse('http:'+to_uri.to_s)).body)
    end
    
    def execute
      Ratlas::Response.new(request, @target.resource_key)
    end

    protected

    def conditions_for_query
      output = {}
      @conditions.each{|k,v| output[k.to_s.camelize!(false)] = v}
      return output
    end

    def add_condition(key, value)
      @conditions[key.to_sym] = value.to_s
    end

    def add_conditions(conditions)
      conditions.each do |key, value|
        add_condition(key, value)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ratlas-0.1.2 lib/ratlas/query.rb
ratlas-0.1.1 lib/ratlas/query.rb