sputnik 0.1 → 0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/sputnik.rb +3 -1
- data/lib/sputnik/collection.rb +32 -2
- data/lib/sputnik/connection.rb +8 -2
- data/lib/sputnik/database.rb +12 -7
- data/lib/sputnik/document.rb +24 -4
- data/lib/sputnik/index.rb +18 -1
- data/lib/sputnik/version.rb +1 -1
- metadata +6 -6
data/lib/sputnik.rb
CHANGED
@@ -5,13 +5,15 @@ require 'faraday'
|
|
5
5
|
require 'sputnik/connection'
|
6
6
|
|
7
7
|
module Sputnik
|
8
|
+
ConnectionNotAuthenticatedError = Class.new(RuntimeError)
|
9
|
+
|
8
10
|
class << self
|
9
11
|
def authenticate(options={})
|
10
12
|
Sputnik.client = Sputnik::Connection.new(options)
|
11
13
|
end
|
12
14
|
|
13
15
|
def client
|
14
|
-
Thread.current[:sputnik_client]
|
16
|
+
Thread.current[:sputnik_client] || (raise ConnectionNotAuthenticatedError, 'You must first call the authenticate method to connect to MongoHQ.')
|
15
17
|
end
|
16
18
|
|
17
19
|
def client=(new_client)
|
data/lib/sputnik/collection.rb
CHANGED
@@ -5,8 +5,9 @@ module Sputnik
|
|
5
5
|
response = client.get("/databases/#{database_name}/collections")
|
6
6
|
values = []
|
7
7
|
response.each do |item|
|
8
|
-
values << Collection.new(item)
|
8
|
+
values << Collection.new({col: item})
|
9
9
|
end
|
10
|
+
values
|
10
11
|
end
|
11
12
|
|
12
13
|
def find(database_name, collection_name)
|
@@ -24,8 +25,37 @@ module Sputnik
|
|
24
25
|
# TODO: how about a "save" option? I could add it here, but it would be two server hits
|
25
26
|
|
26
27
|
def delete(database_name, collection_name)
|
27
|
-
client.delete("/databases/#{database_name}/collections/#{collection_name}"
|
28
|
+
client.delete("/databases/#{database_name}/collections/#{collection_name}")
|
28
29
|
end
|
29
30
|
end
|
31
|
+
|
32
|
+
def all
|
33
|
+
Collection.all(database.db)
|
34
|
+
end
|
35
|
+
|
36
|
+
def find(collection_name=nil)
|
37
|
+
Collection.find(database.db, collection_name || self.name)
|
38
|
+
end
|
39
|
+
|
40
|
+
def create(params=nil)
|
41
|
+
Collection.create(database.db, params || self.to_hash)
|
42
|
+
end
|
43
|
+
|
44
|
+
def update(collection_name=nil, params=nil)
|
45
|
+
Collection.update(database.db, collection_name || self.name, params || self.to_hash)
|
46
|
+
end
|
47
|
+
|
48
|
+
def delete(collection_name=nil)
|
49
|
+
Collection.delete(database.db, collection_name || self.name)
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
def documents
|
54
|
+
Document.new(:database => self.database, :collection => self)
|
55
|
+
end
|
56
|
+
|
57
|
+
def indexes
|
58
|
+
Index.new(:database => self.database, :collection => self)
|
59
|
+
end
|
30
60
|
end
|
31
61
|
end
|
data/lib/sputnik/connection.rb
CHANGED
@@ -25,6 +25,7 @@ module Sputnik
|
|
25
25
|
params = params.merge({:_apikey => apikey})
|
26
26
|
response = connect.get do |req|
|
27
27
|
req.url(path)
|
28
|
+
req.headers['User-Agent'] = default_header
|
28
29
|
req.params = params
|
29
30
|
end
|
30
31
|
|
@@ -38,7 +39,8 @@ module Sputnik
|
|
38
39
|
response = connect.post do |req|
|
39
40
|
req.url(path)
|
40
41
|
req.params = params
|
41
|
-
req.
|
42
|
+
req.headers['Content-Type'] = 'application/json'
|
43
|
+
req.headers['User-Agent'] = default_header
|
42
44
|
end
|
43
45
|
|
44
46
|
verify_status!(response)
|
@@ -46,12 +48,16 @@ module Sputnik
|
|
46
48
|
return JSON.parse(response.body) || {}
|
47
49
|
end
|
48
50
|
|
51
|
+
def default_header
|
52
|
+
"Sputnik/#{VERSION}/ruby"
|
53
|
+
end
|
54
|
+
|
49
55
|
private
|
50
56
|
|
51
57
|
def verify_status!(response)
|
52
58
|
case response.status
|
53
59
|
when 500
|
54
|
-
raise InternalServerError
|
60
|
+
raise InternalServerError, (JSON.parse(response.body) || {})['error']
|
55
61
|
when 501
|
56
62
|
raise NotImplementedError
|
57
63
|
when 403
|
data/lib/sputnik/database.rb
CHANGED
@@ -1,12 +1,7 @@
|
|
1
|
+
# TODO: use command pattern to build an enumerable
|
2
|
+
# command that's not called until it's used
|
1
3
|
module Sputnik
|
2
4
|
class Database < Base
|
3
|
-
def collection
|
4
|
-
raise "Not Yet Implemented"
|
5
|
-
# TODO: call this database's collection
|
6
|
-
# for example, to get a database's collections:
|
7
|
-
# Sputnik::Database.new(:name => 'derp').collection.all
|
8
|
-
end
|
9
|
-
|
10
5
|
class << self
|
11
6
|
def all
|
12
7
|
response = client.get('/databases')
|
@@ -14,6 +9,7 @@ module Sputnik
|
|
14
9
|
response.each do |item|
|
15
10
|
values << Database.new(item)
|
16
11
|
end
|
12
|
+
values
|
17
13
|
end
|
18
14
|
|
19
15
|
def find(database_name)
|
@@ -28,5 +24,14 @@ module Sputnik
|
|
28
24
|
client.delete("/databases/#{database_name}", params)
|
29
25
|
end
|
30
26
|
end
|
27
|
+
|
28
|
+
# Sputnik::Database.new(:name => 'derp').collection.all
|
29
|
+
def collection
|
30
|
+
Collection.new(:database => self)
|
31
|
+
end
|
32
|
+
|
33
|
+
def stats
|
34
|
+
DatabaseStats.find(db)
|
35
|
+
end
|
31
36
|
end
|
32
37
|
end
|
data/lib/sputnik/document.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
# TODO: this has room to be considerably cooler...
|
2
1
|
module Sputnik
|
3
2
|
class Document < Base
|
4
3
|
class << self
|
5
|
-
def all(database_name, collection_name)
|
6
|
-
response = client.get("/databases/#{database_name}/collections/#{collection_name}/documents")
|
4
|
+
def all(database_name, collection_name, params={})
|
5
|
+
response = client.get("/databases/#{database_name}/collections/#{collection_name}/documents", params)
|
7
6
|
values = []
|
8
7
|
response.each do |item|
|
9
8
|
values << Document.new(item)
|
10
9
|
end
|
10
|
+
values
|
11
11
|
end
|
12
12
|
|
13
13
|
def find(database_name, collection_name, document_id)
|
@@ -25,8 +25,28 @@ module Sputnik
|
|
25
25
|
# TODO: how about a "save" option? I could add it here, but it would be two server hits
|
26
26
|
|
27
27
|
def delete(database_name, collection_name, document_id)
|
28
|
-
client.delete("/databases/#{database_name}/collections/#{collection_name}/documents/#{document_id}"
|
28
|
+
client.delete("/databases/#{database_name}/collections/#{collection_name}/documents/#{document_id}")
|
29
29
|
end
|
30
30
|
end
|
31
|
+
|
32
|
+
def all(params=nil)
|
33
|
+
Document.all(collection.database.db, collection.name, params || self.to_hash)
|
34
|
+
end
|
35
|
+
|
36
|
+
def find(id=nil, params=nil)
|
37
|
+
Document.find(collection.database.db, collection.name, id || self._id, params || self.to_hash)
|
38
|
+
end
|
39
|
+
|
40
|
+
def create(params=nil)
|
41
|
+
Document.create(collection.database.db, collection.name, params || self.to_hash)
|
42
|
+
end
|
43
|
+
|
44
|
+
def update(id=nil, params=nil)
|
45
|
+
Document.update(collection.database.db, collection.name, id || self._id, params || self.to_hash)
|
46
|
+
end
|
47
|
+
|
48
|
+
def delete(id=nil)
|
49
|
+
Document.delete(collection.database.db, collection.name, id || self._id)
|
50
|
+
end
|
31
51
|
end
|
32
52
|
end
|
data/lib/sputnik/index.rb
CHANGED
@@ -7,6 +7,7 @@ module Sputnik
|
|
7
7
|
response.each do |item|
|
8
8
|
values << Index.new(item)
|
9
9
|
end
|
10
|
+
values
|
10
11
|
end
|
11
12
|
|
12
13
|
def find(database_name, collection_name, index_name)
|
@@ -18,8 +19,24 @@ module Sputnik
|
|
18
19
|
end
|
19
20
|
|
20
21
|
def delete(database_name, collection_name, index_name)
|
21
|
-
client.delete("/databases/#{database_name}/collections/#{collection_name}/indexes/#{index_name}"
|
22
|
+
client.delete("/databases/#{database_name}/collections/#{collection_name}/indexes/#{index_name}")
|
22
23
|
end
|
23
24
|
end
|
25
|
+
|
26
|
+
def all(params=nil)
|
27
|
+
Index.all(collection.database.db, collection.name, params || self.to_hash)
|
28
|
+
end
|
29
|
+
|
30
|
+
def find(name=nil, params=nil)
|
31
|
+
Index.find(collection.database.db, collection.name, name || self.name, params || self.to_hash)
|
32
|
+
end
|
33
|
+
|
34
|
+
def create(params=nil)
|
35
|
+
Index.create(collection.database.db, collection.name, params || self.to_hash)
|
36
|
+
end
|
37
|
+
|
38
|
+
def delete(name=nil)
|
39
|
+
Index.delete(collection.database.db, collection.name, name || self.name)
|
40
|
+
end
|
24
41
|
end
|
25
42
|
end
|
data/lib/sputnik/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sputnik
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.2'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-11-
|
12
|
+
date: 2011-11-13 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70124238869940 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70124238869940
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: faraday
|
27
|
-
requirement: &
|
27
|
+
requirement: &70124238869520 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70124238869520
|
36
36
|
description: Connects to MongoHQ API
|
37
37
|
email:
|
38
38
|
- eric.redmond@gmail.com
|