2008-09-12 06:39:48 +02:00
|
|
|
# Copyright 2008 J. Chris Anderson
|
|
|
|
#
|
|
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
# you may not use this file except in compliance with the License.
|
|
|
|
# You may obtain a copy of the License at
|
|
|
|
#
|
|
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
#
|
|
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
# See the License for the specific language governing permissions and
|
|
|
|
# limitations under the License.
|
2008-09-12 06:31:59 +02:00
|
|
|
|
2008-09-12 06:00:44 +02:00
|
|
|
require "rubygems"
|
|
|
|
require 'json'
|
|
|
|
require 'rest_client'
|
|
|
|
|
2008-09-12 06:16:01 +02:00
|
|
|
$:.unshift File.dirname(__FILE__) unless
|
|
|
|
$:.include?(File.dirname(__FILE__)) ||
|
|
|
|
$:.include?(File.expand_path(File.dirname(__FILE__)))
|
|
|
|
|
|
|
|
|
2008-09-12 06:14:34 +02:00
|
|
|
require 'couchrest/monkeypatches'
|
2008-09-12 06:00:44 +02:00
|
|
|
|
|
|
|
module CouchRest
|
2008-09-12 06:14:34 +02:00
|
|
|
autoload :Server, 'couchrest/core/server'
|
|
|
|
autoload :Database, 'couchrest/core/database'
|
|
|
|
autoload :Pager, 'couchrest/helper/pager'
|
|
|
|
autoload :FileManager, 'couchrest/helper/file_manager'
|
2008-09-12 06:22:43 +02:00
|
|
|
autoload :Streamer, 'couchrest/helper/streamer'
|
2008-09-12 07:42:06 +02:00
|
|
|
autoload :Commands, 'couchrest/commands '
|
2008-09-12 06:14:34 +02:00
|
|
|
|
2008-09-12 06:22:43 +02:00
|
|
|
# The CouchRest module methods handle the basic JSON serialization
|
2008-09-12 06:25:51 +02:00
|
|
|
# and deserialization, as well as query parameters. The module also includes
|
|
|
|
# some helpers for tasks like instantiating a new Database or Server instance.
|
2008-09-12 06:22:43 +02:00
|
|
|
class << self
|
2008-09-12 06:25:51 +02:00
|
|
|
|
|
|
|
# todo, make this parse the url and instantiate a Server or Database instance
|
|
|
|
# depending on the specificity.
|
2008-09-12 06:22:43 +02:00
|
|
|
def new(*opts)
|
|
|
|
Server.new(*opts)
|
|
|
|
end
|
|
|
|
|
2008-09-12 06:25:51 +02:00
|
|
|
# ensure that a database exists
|
|
|
|
# creates it if it isn't already there
|
|
|
|
# returns it after it's been created
|
|
|
|
def database! url
|
|
|
|
uri = URI.parse url
|
|
|
|
path = uri.path
|
|
|
|
uri.path = ''
|
|
|
|
cr = CouchRest.new(uri.to_s)
|
|
|
|
cr.database!(path)
|
|
|
|
end
|
|
|
|
|
|
|
|
def database url
|
|
|
|
uri = URI.parse url
|
|
|
|
path = uri.path
|
|
|
|
uri.path = ''
|
|
|
|
cr = CouchRest.new(uri.to_s)
|
|
|
|
cr.database(path)
|
|
|
|
end
|
|
|
|
|
2008-09-12 06:22:43 +02:00
|
|
|
def put uri, doc = nil
|
|
|
|
payload = doc.to_json if doc
|
|
|
|
JSON.parse(RestClient.put(uri, payload))
|
|
|
|
end
|
|
|
|
|
|
|
|
def get uri
|
|
|
|
JSON.parse(RestClient.get(uri), :max_nesting => false)
|
|
|
|
end
|
|
|
|
|
|
|
|
def post uri, doc = nil
|
|
|
|
payload = doc.to_json if doc
|
|
|
|
JSON.parse(RestClient.post(uri, payload))
|
|
|
|
end
|
|
|
|
|
|
|
|
def delete uri
|
|
|
|
JSON.parse(RestClient.delete(uri))
|
|
|
|
end
|
|
|
|
|
|
|
|
def paramify_url url, params = nil
|
|
|
|
if params
|
|
|
|
query = params.collect do |k,v|
|
|
|
|
v = v.to_json if %w{key startkey endkey}.include?(k.to_s)
|
|
|
|
"#{k}=#{CGI.escape(v.to_s)}"
|
|
|
|
end.join("&")
|
|
|
|
url = "#{url}?#{query}"
|
|
|
|
end
|
|
|
|
url
|
|
|
|
end
|
|
|
|
end # class << self
|
2008-09-12 06:00:44 +02:00
|
|
|
end
|