Server URI can now include a prefix to the database name
This commit is contained in:
parent
190bd13723
commit
14acd95444
|
@ -2,9 +2,19 @@ module CouchRest
|
|||
class Server
|
||||
attr_accessor :uri, :uuid_batch_count, :available_databases
|
||||
def initialize(server = 'http://127.0.0.1:5984', uuid_batch_count = 1000)
|
||||
@uri = server
|
||||
case server
|
||||
when %r{\A(http://[^/]+)/(.*)\z}
|
||||
@uri, @prefix = $1, $2
|
||||
else
|
||||
@uri, @prefix = server, ""
|
||||
end
|
||||
@uuid_batch_count = uuid_batch_count
|
||||
end
|
||||
|
||||
# Add default prefix to database name
|
||||
def expand(name)
|
||||
@prefix + name
|
||||
end
|
||||
|
||||
# Lists all "available" databases.
|
||||
# An available database, is a database that was specified
|
||||
|
@ -32,7 +42,7 @@ module CouchRest
|
|||
# @couch.available_database?(:default)
|
||||
#
|
||||
def available_database?(ref_or_name)
|
||||
ref_or_name.is_a?(Symbol) ? available_databases.keys.include?(ref_or_name) : available_databases.values.map{|db| db.name}.include?(ref_or_name)
|
||||
ref_or_name.is_a?(Symbol) ? available_databases.keys.include?(ref_or_name) : available_databases.values.map{|db| db.name}.include?(expand(ref_or_name))
|
||||
end
|
||||
|
||||
def default_database=(name, create_unless_exists = true)
|
||||
|
@ -45,12 +55,17 @@ module CouchRest
|
|||
|
||||
# Lists all databases on the server
|
||||
def databases
|
||||
CouchRest.get "#{@uri}/_all_dbs"
|
||||
dbs = CouchRest.get "#{@uri}/_all_dbs"
|
||||
unless @prefix.empty?
|
||||
pfx = @prefix.gsub('/','%2F')
|
||||
dbs.reject! { |db| db.index(pfx) != 0 }
|
||||
end
|
||||
dbs
|
||||
end
|
||||
|
||||
# Returns a CouchRest::Database for the given name
|
||||
def database(name)
|
||||
CouchRest::Database.new(self, name)
|
||||
CouchRest::Database.new(self, expand(name))
|
||||
end
|
||||
|
||||
# Creates the database if it doesn't exist
|
||||
|
@ -66,7 +81,7 @@ module CouchRest
|
|||
|
||||
# Create a database
|
||||
def create_db(name)
|
||||
CouchRest.put "#{@uri}/#{name}"
|
||||
CouchRest.put "#{@uri}/#{expand(name).gsub('/','%2F')}"
|
||||
database(name)
|
||||
end
|
||||
|
||||
|
|
|
@ -2,6 +2,36 @@ require File.dirname(__FILE__) + '/../../spec_helper'
|
|||
|
||||
describe CouchRest::Server do
|
||||
|
||||
describe "named databases" do
|
||||
it "should generate database without prefix" do
|
||||
couch = CouchRest::Server.new "http://192.0.2.1:1234"
|
||||
db = couch.database("foo")
|
||||
db.name.should == "foo"
|
||||
db.uri.should == "http://192.0.2.1:1234/foo"
|
||||
end
|
||||
|
||||
it "should generate database with prefix" do
|
||||
couch = CouchRest::Server.new "http://192.0.2.1:1234/dev"
|
||||
db = couch.database("foo")
|
||||
db.name.should == "devfoo"
|
||||
db.uri.should == "http://192.0.2.1:1234/devfoo"
|
||||
end
|
||||
|
||||
it "should generate database with prefix and slash" do
|
||||
couch = CouchRest::Server.new "http://192.0.2.1:1234/dev/"
|
||||
db = couch.database("foo")
|
||||
db.name.should == "dev/foo"
|
||||
db.uri.should == "http://192.0.2.1:1234/dev%2Ffoo"
|
||||
end
|
||||
|
||||
it "should generate database with slashes" do
|
||||
couch = CouchRest::Server.new "http://192.0.2.1:1234/dev/sample/"
|
||||
db = couch.database("foo/bar")
|
||||
db.name.should == "dev/sample/foo/bar"
|
||||
db.uri.should == "http://192.0.2.1:1234/dev%2Fsample%2Ffoo%2Fbar"
|
||||
end
|
||||
end
|
||||
|
||||
describe "available databases" do
|
||||
before(:each) do
|
||||
@couch = CouchRest::Server.new
|
||||
|
|
Loading…
Reference in a new issue