relaxo 0.4.4 → 0.4.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -7
- data/Gemfile +6 -1
- data/lib/relaxo.rb +2 -2
- data/lib/relaxo/connection.rb +14 -3
- data/lib/relaxo/database.rb +9 -1
- data/lib/relaxo/transaction.rb +8 -3
- data/lib/relaxo/version.rb +1 -1
- data/relaxo.gemspec +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f271109f32a46b527537f02d2d74d11c0b6bec8
|
4
|
+
data.tar.gz: f420d81ae8aefaa83d76aeff87e14ce1a3bf4041
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0303b6aa8c28daca4eab2de9485fd0fead7a9ae2272d2c10c936d3ce15481344555cc2744b1bae5221dea1955e8b253a77832a5f1e838d597837e3b10ffdf727
|
7
|
+
data.tar.gz: 96314b1bbc9dd5fb2b9a036c1b7e37da3dac2ad9516c1d9fa91ad88179f1095b8740270a0513f5dee371dcfa40cef9dc7dd587fe73b5b0621fc2f1404d31b1db
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/lib/relaxo.rb
CHANGED
@@ -21,7 +21,7 @@
|
|
21
21
|
require 'relaxo/database'
|
22
22
|
|
23
23
|
module Relaxo
|
24
|
-
def self.connect(url)
|
24
|
+
def self.connect(url, metadata = nil)
|
25
25
|
host = "http://localhost:5984"
|
26
26
|
|
27
27
|
if url =~ /^(https?:\/\/.+?)\/(.+)$/
|
@@ -37,6 +37,6 @@ module Relaxo
|
|
37
37
|
end
|
38
38
|
|
39
39
|
connection = Connection.new(host)
|
40
|
-
database = Database.new(connection, name)
|
40
|
+
database = Database.new(connection, name, metadata)
|
41
41
|
end
|
42
42
|
end
|
data/lib/relaxo/connection.rb
CHANGED
@@ -20,6 +20,8 @@
|
|
20
20
|
|
21
21
|
require 'relaxo/client'
|
22
22
|
|
23
|
+
require 'thread'
|
24
|
+
|
23
25
|
module Relaxo
|
24
26
|
class Connection
|
25
27
|
DEFAULT_UUID_FETCH_COUNT = 10
|
@@ -27,18 +29,23 @@ module Relaxo
|
|
27
29
|
def initialize(url)
|
28
30
|
@url = url
|
29
31
|
@uuids = []
|
32
|
+
|
33
|
+
@uuid_lock = Mutex.new
|
30
34
|
end
|
31
35
|
|
32
36
|
attr :url
|
33
37
|
|
34
|
-
def fetch_uuids(count)
|
38
|
+
private def fetch_uuids(count)
|
35
39
|
@uuids += Client.get("#{@url}/_uuids?count=#{count}")["uuids"]
|
36
40
|
end
|
37
41
|
|
42
|
+
# This implementation could be improved. It's not exactly fast to request 1 UUID at a time. One idea is to add a UUID queue to Transaction which allows UUIDs to be fetched in bulk on a per-transaction basis, and reused if the transaction fails.
|
38
43
|
def next_uuid
|
39
|
-
|
44
|
+
@uuid_lock.synchronize do
|
45
|
+
fetch_uuids(DEFAULT_UUID_FETCH_COUNT) if @uuids.size == 0
|
40
46
|
|
41
|
-
|
47
|
+
return @uuids.pop
|
48
|
+
end
|
42
49
|
end
|
43
50
|
|
44
51
|
def info
|
@@ -49,5 +56,9 @@ module Relaxo
|
|
49
56
|
def databases
|
50
57
|
Client.get("#{@url}/_all_dbs")
|
51
58
|
end
|
59
|
+
|
60
|
+
def configuration
|
61
|
+
Client.get("#{@url}/_config")
|
62
|
+
end
|
52
63
|
end
|
53
64
|
end
|
data/lib/relaxo/database.rb
CHANGED
@@ -27,10 +27,12 @@ module Relaxo
|
|
27
27
|
DELETED = '_deleted'
|
28
28
|
|
29
29
|
class Database
|
30
|
-
def initialize(connection, name)
|
30
|
+
def initialize(connection, name, metadata = {})
|
31
31
|
@connection = connection
|
32
32
|
@name = name
|
33
33
|
|
34
|
+
@metadata = metadata
|
35
|
+
|
34
36
|
@root = connection.url + "/" + CGI.escape(name)
|
35
37
|
end
|
36
38
|
|
@@ -38,6 +40,12 @@ module Relaxo
|
|
38
40
|
attr :name
|
39
41
|
attr :root
|
40
42
|
|
43
|
+
attr :metadata
|
44
|
+
|
45
|
+
def [] key
|
46
|
+
@metadata[key]
|
47
|
+
end
|
48
|
+
|
41
49
|
# Create the database, will potentially throw an exception if it already exists.
|
42
50
|
def create!
|
43
51
|
Client.put @root
|
data/lib/relaxo/transaction.rb
CHANGED
@@ -25,8 +25,8 @@ module Relaxo
|
|
25
25
|
|
26
26
|
# We monkey-patch this in as Transaction is basically an optional feature for doing bulk_saves.
|
27
27
|
class Database
|
28
|
-
def transaction(klass = nil)
|
29
|
-
transaction = Transaction.new(self)
|
28
|
+
def transaction(klass = nil, metadata = {})
|
29
|
+
transaction = Transaction.new(self, metadata)
|
30
30
|
|
31
31
|
catch(:abort) do
|
32
32
|
yield transaction
|
@@ -43,13 +43,18 @@ module Relaxo
|
|
43
43
|
end
|
44
44
|
|
45
45
|
class Transaction
|
46
|
-
def initialize(database)
|
46
|
+
def initialize(database, metadata = {})
|
47
47
|
@database = database
|
48
|
+
@metadata = {}
|
48
49
|
|
49
50
|
@documents = []
|
50
51
|
@uuids = []
|
51
52
|
end
|
52
53
|
|
54
|
+
def [] key
|
55
|
+
@metadata[key] || @database[key]
|
56
|
+
end
|
57
|
+
|
53
58
|
def get(*args)
|
54
59
|
@database.get(*args)
|
55
60
|
end
|
data/lib/relaxo/version.rb
CHANGED
data/relaxo.gemspec
CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_dependency "json", "~> 1.8"
|
26
26
|
spec.add_dependency "rest-client"
|
27
27
|
|
28
|
-
spec.add_development_dependency "rspec", "~> 3.
|
28
|
+
spec.add_development_dependency "rspec", "~> 3.4.0"
|
29
29
|
spec.add_development_dependency "bundler", "~> 1.3"
|
30
30
|
spec.add_development_dependency "rake"
|
31
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: relaxo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 3.
|
47
|
+
version: 3.4.0
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 3.
|
54
|
+
version: 3.4.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -132,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
132
|
version: '0'
|
133
133
|
requirements: []
|
134
134
|
rubyforge_project:
|
135
|
-
rubygems_version: 2.
|
135
|
+
rubygems_version: 2.5.1
|
136
136
|
signing_key:
|
137
137
|
specification_version: 4
|
138
138
|
summary: Relaxo is a helper for loading and working with CouchDB.
|