class DanarchyCouchDB::Connection

Public Class Methods

new(connection) click to toggle source
# File lib/danarchy_couchdb.rb, line 8
def initialize(connection)
  @connection = connection
  uri = 'http' if !@connection[:ssl]
  uri = 'https' if @connection[:ssl]
  @uri = "#{uri}://#{connection[:hostname]}:#{connection[:port]}"
end

Public Instance Methods

delete(*args) click to toggle source
# File lib/danarchy_couchdb.rb, line 65
def delete(*args)
  database = args.shift
  document = args.shift
  revision = args.shift
  
  uri  = "#{@uri}/#{database}"
  uri += "/#{document}"      if document
  uri += "/?rev=#{revision}" if revision

  uri = URI.parse(URI.encode(uri))
  JSON.parse(request(Net::HTTP::Delete.new(uri)), symbolize_names: true)
end
delete_attachment(*args) click to toggle source
# File lib/danarchy_couchdb.rb, line 78
def delete_attachment(*args)
  database   = args.shift
  document   = args.shift
  revision   = args.shift
  attachment = args.shift
  
  uri  = "#{@uri}/#{database}/#{document}/#{attachment}?rev=#{revision}"
  uri = URI.parse(URI.encode(uri))
  JSON.parse(request(Net::HTTP::Delete.new(uri)), symbolize_names: true)
end
get(*args) click to toggle source
# File lib/danarchy_couchdb.rb, line 15
def get(*args)
  database = args.shift
  document = args.shift
  revision = args.shift
  
  uri  = "#{@uri}/#{database}"
  uri += "/#{document}"        if document
  uri += "/?rev=#{revision}"   if revision

  uri = URI.parse(URI.encode(uri))
  JSON.parse(request(Net::HTTP::Get.new(uri)), symbolize_names: true)
end
get_attachment(database, document, attachment) click to toggle source
# File lib/danarchy_couchdb.rb, line 28
def get_attachment(database, document, attachment)
  uri  = "#{@uri}/#{database}/#{document}/#{attachment}"
  uri = URI.parse(URI.encode(uri))
  request(Net::HTTP::Get.new(uri))
end
put(*args) click to toggle source
# File lib/danarchy_couchdb.rb, line 34
def put(*args)
  database = args.shift
  document = args.shift
  data     = args.shift
  
  uri  = "#{@uri}/#{database}"
  uri += "/#{document}" if document

  uri = URI.parse(URI.encode("#{@uri}/#{database}/#{document}"))
  req = Net::HTTP::Put.new(uri)
  req["content-type"] = "application/json"
  req.body = data.to_json if data
  JSON.parse(request(req), symbolize_names: true)
end
put_attachment(*args) click to toggle source
# File lib/danarchy_couchdb.rb, line 49
def put_attachment(*args)
  database   = args.shift
  document   = args.shift
  revision   = args.shift
  attachment = args.shift
  data       = args.shift
  type       = args.shift
  
  uri  = "#{@uri}/#{database}/#{document}/#{attachment}?rev=#{revision}"
  uri = URI.parse(URI.encode(uri))
  req = Net::HTTP::Put.new(uri)
  req["content-type"] = "#{type}"
  req.body = data if data
  JSON.parse(request(req), symbolize_names: true)
end

Private Instance Methods

handle_error(req, res) click to toggle source
# File lib/danarchy_couchdb.rb, line 111
def handle_error(req, res)
  puts RuntimeError.new("#{res.code}:#{res.message}\nMETHOD:#{req.method}\nURI:#{req.path}\n#{res.body}")
end
request(uri) click to toggle source
# File lib/danarchy_couchdb.rb, line 90
def request(uri)
  response = nil

  begin
    Net::HTTP.start(@connection[:hostname], @connection[:port], :use_ssl => @connection[:ssl]) do |http|
      uri.basic_auth @connection[:username], @connection[:password]

      response = http.request(uri)

      unless response.kind_of?(Net::HTTPSuccess)
        handle_error(uri, response)
        break
      end
    end
  rescue
    return "{\"error\":\"Connection Failed\",\"reason\":\"#{uri.uri} is unreachable.\"}\n"
  end

  response.body
end