xplenty-api 0.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 +20 -0
- data/.travis.yml +11 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +20 -0
- data/LICENSE +21 -0
- data/README.md +139 -0
- data/Rakefile +29 -0
- data/changelog.txt +0 -0
- data/lib/xplenty-api.rb +3 -0
- data/lib/xplenty/api.rb +107 -0
- data/lib/xplenty/api/cluster_plans.rb +12 -0
- data/lib/xplenty/api/clusters.rb +46 -0
- data/lib/xplenty/api/errors.rb +32 -0
- data/lib/xplenty/api/jobs.rb +53 -0
- data/lib/xplenty/api/mock.rb +87 -0
- data/lib/xplenty/api/mock/cache/clusters.json +1 -0
- data/lib/xplenty/api/mock/cache/jobs.json +1 -0
- data/lib/xplenty/api/mock/clusters.rb +86 -0
- data/lib/xplenty/api/mock/jobs.rb +86 -0
- data/lib/xplenty/api/vendor/okjson.rb +600 -0
- data/lib/xplenty/api/version.rb +5 -0
- data/lib/xplenty/api/watchers.rb +57 -0
- data/test/test_cluster_watchers.rb +31 -0
- data/test/test_clusters.rb +27 -0
- data/test/test_error_conditions.rb +11 -0
- data/test/test_helper.rb +32 -0
- data/test/test_job_watchers.rb +34 -0
- data/test/test_jobs.rb +34 -0
- data/xplenty.gemspec +23 -0
- metadata +128 -0
@@ -0,0 +1,57 @@
|
|
1
|
+
module Xplenty
|
2
|
+
class API
|
3
|
+
# POST /<accountID>/api/clusters/{clusterID}/watchers
|
4
|
+
def watch_cluster(clusterID)
|
5
|
+
request(
|
6
|
+
:expects => 200,
|
7
|
+
:method => :post,
|
8
|
+
:path => "/#{account_id}/api/clusters/#{clusterID}/watchers"
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
# DELETE /<accountID>/api/clusters/{clusterID}/watchers
|
13
|
+
def stop_watching_cluster(clusterID)
|
14
|
+
request(
|
15
|
+
:expects => 204,
|
16
|
+
:method => :delete,
|
17
|
+
:path => "/#{account_id}/api/clusters/#{clusterID}/watchers"
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
# GET /<accountID>/api/clusters/{cluster_id}/watchers
|
22
|
+
def cluster_watchers(clusterID)
|
23
|
+
request(
|
24
|
+
:expects => 200,
|
25
|
+
:method => :get,
|
26
|
+
:path => "/#{account_id}/api/clusters/#{clusterID}/watchers"
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
# POST /<accountID>/api/jobs/{job_id}/watchers
|
31
|
+
def watch_job(jobID)
|
32
|
+
request(
|
33
|
+
:expects => 200,
|
34
|
+
:method => :post,
|
35
|
+
:path => "/#{account_id}/api/jobs/#{jobID}/watchers"
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
# DELETE /<accountID>/api/jobs/{job_id}/watchers
|
40
|
+
def stop_watching_job(jobID)
|
41
|
+
request(
|
42
|
+
:expects => 204,
|
43
|
+
:method => :delete,
|
44
|
+
:path => "/#{account_id}/api/jobs/#{jobID}/watchers"
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
# GET /<accountID>/api/jobs/{job_id}/watchers
|
49
|
+
def job_watchers(jobID)
|
50
|
+
request(
|
51
|
+
:expects => 200,
|
52
|
+
:method => :get,
|
53
|
+
:path => "/#{account_id}/api/jobs/#{jobID}/watchers"
|
54
|
+
)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
=begin
|
2
|
+
# can't implement mock for watchers
|
3
|
+
|
4
|
+
require File.expand_path("#{File.dirname(__FILE__)}/test_helper")
|
5
|
+
|
6
|
+
class TestClusterWatchers < MiniTest::Unit::TestCase
|
7
|
+
def test_watch_cluster
|
8
|
+
with_cluster({'type' => 'sandbox', 'nodes' => 1}) do |cluster|
|
9
|
+
response = xplenty.watch_cluster(cluster['id'])
|
10
|
+
assert_equal(200, response.status)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_stop_watching_job
|
15
|
+
with_cluster({'type' => 'sandbox', 'nodes' => 1}) do |cluster|
|
16
|
+
xplenty.watch_cluster(cluster['id'])
|
17
|
+
response = xplenty.stop_watching_cluster(cluster['id'])
|
18
|
+
assert_equal(200, response.status)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_list_job_watchers
|
23
|
+
with_cluster({'type' => 'sandbox', 'nodes' => 1}) do |cluster|
|
24
|
+
xplenty.watch_cluster(cluster['id'])
|
25
|
+
response = xplenty.cluster_watchers(cluster['id'])
|
26
|
+
assert_equal(200, response.status)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
=end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/test_helper")
|
2
|
+
|
3
|
+
class TestClusters < MiniTest::Unit::TestCase
|
4
|
+
def test_list_clusters
|
5
|
+
response = xplenty.clusters
|
6
|
+
|
7
|
+
data = File.read("#{File.dirname(__FILE__)}/../lib/xplenty/api/mock/cache/clusters.json")
|
8
|
+
|
9
|
+
assert_equal(200, response.status)
|
10
|
+
assert_equal(Xplenty::API::OkJson.decode(data), response.body)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_get_cluster_info
|
14
|
+
with_cluster({:type => 'sandbox', :nodes => 1}) do |cluster|
|
15
|
+
response = xplenty.get_cluster_info(cluster['id'])
|
16
|
+
assert_equal response.status, 200
|
17
|
+
assert_equal response.body['id'], cluster['id']
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_terminate_cluster
|
22
|
+
with_cluster({:type => 'sandbox', :nodes => 1}) do |cluster|
|
23
|
+
response = xplenty.terminate_cluster(cluster['id'])
|
24
|
+
assert_equal response.status, 200
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/test_helper")
|
2
|
+
|
3
|
+
class TestErrorConditions < MiniTest::Unit::TestCase
|
4
|
+
|
5
|
+
def test_request_without_app_returns_a_request_fail_error
|
6
|
+
assert_raises(Xplenty::API::Errors::RequestFailed) do
|
7
|
+
raise Xplenty::API::Errors::RequestFailed.new('TODO', nil) # xplenty.jobs
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../lib/xplenty/api")
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
gem 'minitest' # ensure we are using the gem version
|
5
|
+
require 'minitest/autorun'
|
6
|
+
require 'time'
|
7
|
+
|
8
|
+
MOCK = ENV['MOCK'] != 'false'
|
9
|
+
|
10
|
+
def xplenty
|
11
|
+
# ENV['XPLENTY_API_KEY'] used for :api_key
|
12
|
+
# ENV['XPLENTY_ACCOUNT_ID'] used for :account_id
|
13
|
+
|
14
|
+
ENV['XPLENTY_ACCOUNT_ID'] ||= 'test_account' if MOCK
|
15
|
+
|
16
|
+
Xplenty::API.new(:mock => MOCK)
|
17
|
+
end
|
18
|
+
|
19
|
+
def random_name
|
20
|
+
"xplenty-rb-#{SecureRandom.hex(10)}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def with_cluster(params={}, &block)
|
24
|
+
cluster = (xplenty.clusters.body || []).select{|x| ['available', 'creating', 'pending'].include? x['status']}.first
|
25
|
+
cluster ||= xplenty.create_cluster(params).body
|
26
|
+
@cluster_id = cluster['id']
|
27
|
+
ready = false
|
28
|
+
until ready
|
29
|
+
ready = xplenty.get_cluster_info(@cluster_id).body['status'] == 'available'
|
30
|
+
end
|
31
|
+
yield(cluster)
|
32
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
=begin
|
2
|
+
# can't implement mock for watchers
|
3
|
+
|
4
|
+
require File.expand_path("#{File.dirname(__FILE__)}/test_helper")
|
5
|
+
|
6
|
+
class TestJobWatchers < MiniTest::Unit::TestCase
|
7
|
+
def test_watch_job
|
8
|
+
with_cluster({'type' => 'sandbox', 'nodes' => 1}) do |cluster|
|
9
|
+
job = xplenty.run_job(cluster['id'], 682).body
|
10
|
+
response = xplenty.watch_job(job['id'])
|
11
|
+
assert_equal(200, response.status)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_stop_watching_job
|
16
|
+
with_cluster({'type' => 'sandbox', 'nodes' => 1}) do |cluster|
|
17
|
+
job = xplenty.run_job(cluster['id'], 682).body
|
18
|
+
xplenty.watch_job(job['id'])
|
19
|
+
response = xplenty.stop_watching_job(job['id'])
|
20
|
+
assert_equal(200, response.status)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_list_job_watchers
|
25
|
+
with_cluster({'type' => 'sandbox', 'nodes' => 1}) do |cluster|
|
26
|
+
job = xplenty.run_job(cluster['id'], 682).body
|
27
|
+
xplenty.watch_job(job['id'])
|
28
|
+
response = xplenty.job_watchers(job['id'])
|
29
|
+
assert_equal(200, response.status)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
=end
|
data/test/test_jobs.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/test_helper")
|
2
|
+
|
3
|
+
class TestJobs < MiniTest::Unit::TestCase
|
4
|
+
|
5
|
+
def test_list_jobs
|
6
|
+
response = xplenty.jobs
|
7
|
+
assert_equal(200, response.status)
|
8
|
+
assert_equal(Array, response.body.class)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_run_job
|
12
|
+
with_cluster({'type' => 'sandbox', 'nodes' => 1}) do |cluster|
|
13
|
+
response = xplenty.run_job(cluster['id'], 682)
|
14
|
+
assert_equal(201, response.status)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_get_job_info
|
19
|
+
with_cluster({'type' => 'sandbox', 'nodes' => 1}) do |cluster|
|
20
|
+
job = xplenty.run_job(cluster['id'], 682).body
|
21
|
+
response = xplenty.get_job_info(job['id'])
|
22
|
+
assert_equal(200, response.status)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_terminate_job
|
27
|
+
with_cluster({'type' => 'sandbox', 'nodes' => 1}) do |cluster|
|
28
|
+
job = xplenty.run_job(cluster['id'], 682).body
|
29
|
+
response = xplenty.terminate_job(job['id'])
|
30
|
+
assert_equal(200, response.status)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
data/xplenty.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "xplenty/api/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "xplenty-api"
|
7
|
+
s.version = Xplenty::API::VERSION
|
8
|
+
s.authors = ["xmpolaris (Chen ZhongXue)"]
|
9
|
+
s.email = ["xmpolaris@gmail.com"]
|
10
|
+
s.homepage = "http://github.com/xplenty/xplenty.rb"
|
11
|
+
s.summary = %q{Ruby Client for the Xplenty API}
|
12
|
+
s.description = %q{Ruby Client for the Xplenty API}
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
s.add_runtime_dependency 'excon', '~>0.20.0'
|
20
|
+
|
21
|
+
s.add_development_dependency 'minitest'
|
22
|
+
s.add_development_dependency 'rake'
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xplenty-api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- xmpolaris (Chen ZhongXue)
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-05-14 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: excon
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.20.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.20.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: minitest
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
description: Ruby Client for the Xplenty API
|
63
|
+
email:
|
64
|
+
- xmpolaris@gmail.com
|
65
|
+
executables: []
|
66
|
+
extensions: []
|
67
|
+
extra_rdoc_files: []
|
68
|
+
files:
|
69
|
+
- .gitignore
|
70
|
+
- .travis.yml
|
71
|
+
- Gemfile
|
72
|
+
- Gemfile.lock
|
73
|
+
- LICENSE
|
74
|
+
- README.md
|
75
|
+
- Rakefile
|
76
|
+
- changelog.txt
|
77
|
+
- lib/xplenty-api.rb
|
78
|
+
- lib/xplenty/api.rb
|
79
|
+
- lib/xplenty/api/cluster_plans.rb
|
80
|
+
- lib/xplenty/api/clusters.rb
|
81
|
+
- lib/xplenty/api/errors.rb
|
82
|
+
- lib/xplenty/api/jobs.rb
|
83
|
+
- lib/xplenty/api/mock.rb
|
84
|
+
- lib/xplenty/api/mock/cache/clusters.json
|
85
|
+
- lib/xplenty/api/mock/cache/jobs.json
|
86
|
+
- lib/xplenty/api/mock/clusters.rb
|
87
|
+
- lib/xplenty/api/mock/jobs.rb
|
88
|
+
- lib/xplenty/api/vendor/okjson.rb
|
89
|
+
- lib/xplenty/api/version.rb
|
90
|
+
- lib/xplenty/api/watchers.rb
|
91
|
+
- test/test_cluster_watchers.rb
|
92
|
+
- test/test_clusters.rb
|
93
|
+
- test/test_error_conditions.rb
|
94
|
+
- test/test_helper.rb
|
95
|
+
- test/test_job_watchers.rb
|
96
|
+
- test/test_jobs.rb
|
97
|
+
- xplenty.gemspec
|
98
|
+
homepage: http://github.com/xplenty/xplenty.rb
|
99
|
+
licenses: []
|
100
|
+
post_install_message:
|
101
|
+
rdoc_options: []
|
102
|
+
require_paths:
|
103
|
+
- lib
|
104
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
none: false
|
112
|
+
requirements:
|
113
|
+
- - ! '>='
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
requirements: []
|
117
|
+
rubyforge_project:
|
118
|
+
rubygems_version: 1.8.25
|
119
|
+
signing_key:
|
120
|
+
specification_version: 3
|
121
|
+
summary: Ruby Client for the Xplenty API
|
122
|
+
test_files:
|
123
|
+
- test/test_cluster_watchers.rb
|
124
|
+
- test/test_clusters.rb
|
125
|
+
- test/test_error_conditions.rb
|
126
|
+
- test/test_helper.rb
|
127
|
+
- test/test_job_watchers.rb
|
128
|
+
- test/test_jobs.rb
|