sputnik 0.1
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/.gitignore +6 -0
- data/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/README.markdown +12 -0
- data/Rakefile +1 -0
- data/lib/sputnik.rb +29 -0
- data/lib/sputnik/base.rb +7 -0
- data/lib/sputnik/collection.rb +31 -0
- data/lib/sputnik/connection.rb +66 -0
- data/lib/sputnik/database.rb +32 -0
- data/lib/sputnik/database_stats.rb +9 -0
- data/lib/sputnik/document.rb +32 -0
- data/lib/sputnik/index.rb +25 -0
- data/lib/sputnik/plan.rb +13 -0
- data/lib/sputnik/version.rb +3 -0
- data/spec/integration/authentication_spec.rb +0 -0
- data/spec/spec_helper.rb +0 -0
- data/sputnik.gemspec +23 -0
- metadata +87 -0
data/.gitignore
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use ruby-1.9.2@sputnik
|
data/Gemfile
ADDED
data/README.markdown
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# Простейший Спутник-1
|
2
|
+
|
3
|
+

|
4
|
+
|
5
|
+
## Using
|
6
|
+
|
7
|
+
Sputnik.authenticate(:apikey => 'derp', :base_url => 'http://localhost:9000')
|
8
|
+
|
9
|
+
databases = Sputnik::Database.all
|
10
|
+
database = Sputnik::Database.find('joemo')
|
11
|
+
Sputnik::Database.create({'my new derp'})
|
12
|
+
Sputnik::Database.delete('joemo')
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/lib/sputnik.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'sputnik/version'
|
2
|
+
require 'ostruct'
|
3
|
+
require 'json'
|
4
|
+
require 'faraday'
|
5
|
+
require 'sputnik/connection'
|
6
|
+
|
7
|
+
module Sputnik
|
8
|
+
class << self
|
9
|
+
def authenticate(options={})
|
10
|
+
Sputnik.client = Sputnik::Connection.new(options)
|
11
|
+
end
|
12
|
+
|
13
|
+
def client
|
14
|
+
Thread.current[:sputnik_client]
|
15
|
+
end
|
16
|
+
|
17
|
+
def client=(new_client)
|
18
|
+
Thread.current[:sputnik_client] = new_client
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
require 'sputnik/base'
|
24
|
+
require 'sputnik/plan'
|
25
|
+
require 'sputnik/database'
|
26
|
+
require 'sputnik/database_stats'
|
27
|
+
require 'sputnik/collection'
|
28
|
+
require 'sputnik/document'
|
29
|
+
require 'sputnik/index'
|
data/lib/sputnik/base.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
module Sputnik
|
2
|
+
class Collection < Base
|
3
|
+
class << self
|
4
|
+
def all(database_name)
|
5
|
+
response = client.get("/databases/#{database_name}/collections")
|
6
|
+
values = []
|
7
|
+
response.each do |item|
|
8
|
+
values << Collection.new(item)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def find(database_name, collection_name)
|
13
|
+
Collection.new(client.get("/databases/#{database_name}/collections/#{collection_name}"))
|
14
|
+
end
|
15
|
+
|
16
|
+
def create(database_name, params)
|
17
|
+
Collection.new(client.post("/databases/#{database_name}/collections", params))
|
18
|
+
end
|
19
|
+
|
20
|
+
def update(database_name, collection_name, params)
|
21
|
+
Collection.new(client.put("/databases/#{database_name}/collections/#{collection_name}", params))
|
22
|
+
end
|
23
|
+
|
24
|
+
# TODO: how about a "save" option? I could add it here, but it would be two server hits
|
25
|
+
|
26
|
+
def delete(database_name, collection_name)
|
27
|
+
client.delete("/databases/#{database_name}/collections/#{collection_name}", params)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Sputnik
|
2
|
+
DEFAULT_HOST = 'https://api.mongohq.com'
|
3
|
+
|
4
|
+
%w{MissingApikeyError InvalidApikeyError InternalServerError NotImplementedError NotFoundError}.each{|const|
|
5
|
+
Kernel.const_set const, Class.new(RuntimeError)
|
6
|
+
}
|
7
|
+
|
8
|
+
class Connection
|
9
|
+
attr_reader :apikey, :base_url
|
10
|
+
|
11
|
+
def initialize(options={})
|
12
|
+
@apikey = options[:apikey]
|
13
|
+
@base_url = options[:base_url] || DEFAULT_HOST
|
14
|
+
end
|
15
|
+
|
16
|
+
def connect
|
17
|
+
conn = Faraday.new(:url => base_url) do |builder|
|
18
|
+
builder.request :json
|
19
|
+
builder.adapter :net_http
|
20
|
+
end
|
21
|
+
conn
|
22
|
+
end
|
23
|
+
|
24
|
+
def get(path, params={})
|
25
|
+
params = params.merge({:_apikey => apikey})
|
26
|
+
response = connect.get do |req|
|
27
|
+
req.url(path)
|
28
|
+
req.params = params
|
29
|
+
end
|
30
|
+
|
31
|
+
verify_status!(response)
|
32
|
+
|
33
|
+
return JSON.parse(response.body) || {}
|
34
|
+
end
|
35
|
+
|
36
|
+
def post(path, params={})
|
37
|
+
params = params.merge({:_apikey => apikey})
|
38
|
+
response = connect.post do |req|
|
39
|
+
req.url(path)
|
40
|
+
req.params = params
|
41
|
+
req.header = {'Content-Type' => 'application/json'}
|
42
|
+
end
|
43
|
+
|
44
|
+
verify_status!(response)
|
45
|
+
|
46
|
+
return JSON.parse(response.body) || {}
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def verify_status!(response)
|
52
|
+
case response.status
|
53
|
+
when 500
|
54
|
+
raise InternalServerError
|
55
|
+
when 501
|
56
|
+
raise NotImplementedError
|
57
|
+
when 403
|
58
|
+
raise NotFoundError
|
59
|
+
when 404
|
60
|
+
raise NotFoundError
|
61
|
+
else
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Sputnik
|
2
|
+
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
|
+
class << self
|
11
|
+
def all
|
12
|
+
response = client.get('/databases')
|
13
|
+
values = []
|
14
|
+
response.each do |item|
|
15
|
+
values << Database.new(item)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def find(database_name)
|
20
|
+
Database.new(client.get("/databases/#{database_name}"))
|
21
|
+
end
|
22
|
+
|
23
|
+
def create(params)
|
24
|
+
Database.new(client.post('/databases', params))
|
25
|
+
end
|
26
|
+
|
27
|
+
def delete(database_name)
|
28
|
+
client.delete("/databases/#{database_name}", params)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# TODO: this has room to be considerably cooler...
|
2
|
+
module Sputnik
|
3
|
+
class Document < Base
|
4
|
+
class << self
|
5
|
+
def all(database_name, collection_name)
|
6
|
+
response = client.get("/databases/#{database_name}/collections/#{collection_name}/documents")
|
7
|
+
values = []
|
8
|
+
response.each do |item|
|
9
|
+
values << Document.new(item)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def find(database_name, collection_name, document_id)
|
14
|
+
Document.new(client.get("/databases/#{database_name}/collections/#{collection_name}/documents/#{document_id}"))
|
15
|
+
end
|
16
|
+
|
17
|
+
def create(database_name, collection_name, params)
|
18
|
+
Document.new(client.post("/databases/#{database_name}/collections/#{collection_name}/documents", params))
|
19
|
+
end
|
20
|
+
|
21
|
+
def update(database_name, collection_name, document_id, params)
|
22
|
+
Document.new(client.put("/databases/#{database_name}/collections#{collection_name}/documents/#{document_id}", params))
|
23
|
+
end
|
24
|
+
|
25
|
+
# TODO: how about a "save" option? I could add it here, but it would be two server hits
|
26
|
+
|
27
|
+
def delete(database_name, collection_name, document_id)
|
28
|
+
client.delete("/databases/#{database_name}/collections/#{collection_name}/documents/#{document_id}", params)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Sputnik
|
2
|
+
class Index < Base
|
3
|
+
class << self
|
4
|
+
def all(database_name, collection_name)
|
5
|
+
response = client.get("/databases/#{database_name}/collections/#{collection_name}/indexes")
|
6
|
+
values = []
|
7
|
+
response.each do |item|
|
8
|
+
values << Index.new(item)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def find(database_name, collection_name, index_name)
|
13
|
+
Index.new(client.get("/databases/#{database_name}/collections/#{collection_name}/indexes/#{index_name}"))
|
14
|
+
end
|
15
|
+
|
16
|
+
def create(database_name, collection_name, params)
|
17
|
+
Index.new(client.post("/databases/#{database_name}/collections/#{collection_name}/indexes", params))
|
18
|
+
end
|
19
|
+
|
20
|
+
def delete(database_name, collection_name, index_name)
|
21
|
+
client.delete("/databases/#{database_name}/collections/#{collection_name}/indexes/#{index_name}", params)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/sputnik/plan.rb
ADDED
File without changes
|
data/spec/spec_helper.rb
ADDED
File without changes
|
data/sputnik.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "sputnik/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "sputnik"
|
7
|
+
s.version = Sputnik::VERSION
|
8
|
+
s.authors = ["coderoshi"]
|
9
|
+
s.email = ["eric.redmond@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Connects to MongoHQ API}
|
12
|
+
s.description = %q{Connects to MongoHQ API}
|
13
|
+
|
14
|
+
s.rubyforge_project = "sputnik"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_development_dependency "rspec"
|
22
|
+
s.add_runtime_dependency "faraday"
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sputnik
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- coderoshi
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-11-03 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: &70259773429420 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70259773429420
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: faraday
|
27
|
+
requirement: &70259773429000 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70259773429000
|
36
|
+
description: Connects to MongoHQ API
|
37
|
+
email:
|
38
|
+
- eric.redmond@gmail.com
|
39
|
+
executables: []
|
40
|
+
extensions: []
|
41
|
+
extra_rdoc_files: []
|
42
|
+
files:
|
43
|
+
- .gitignore
|
44
|
+
- .rvmrc
|
45
|
+
- Gemfile
|
46
|
+
- README.markdown
|
47
|
+
- Rakefile
|
48
|
+
- lib/sputnik.rb
|
49
|
+
- lib/sputnik/base.rb
|
50
|
+
- lib/sputnik/collection.rb
|
51
|
+
- lib/sputnik/connection.rb
|
52
|
+
- lib/sputnik/database.rb
|
53
|
+
- lib/sputnik/database_stats.rb
|
54
|
+
- lib/sputnik/document.rb
|
55
|
+
- lib/sputnik/index.rb
|
56
|
+
- lib/sputnik/plan.rb
|
57
|
+
- lib/sputnik/version.rb
|
58
|
+
- spec/integration/authentication_spec.rb
|
59
|
+
- spec/spec_helper.rb
|
60
|
+
- sputnik.gemspec
|
61
|
+
homepage: ''
|
62
|
+
licenses: []
|
63
|
+
post_install_message:
|
64
|
+
rdoc_options: []
|
65
|
+
require_paths:
|
66
|
+
- lib
|
67
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ! '>='
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
requirements: []
|
80
|
+
rubyforge_project: sputnik
|
81
|
+
rubygems_version: 1.8.10
|
82
|
+
signing_key:
|
83
|
+
specification_version: 3
|
84
|
+
summary: Connects to MongoHQ API
|
85
|
+
test_files:
|
86
|
+
- spec/integration/authentication_spec.rb
|
87
|
+
- spec/spec_helper.rb
|