didata_cloud_sdk 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/Gemfile +4 -0
- data/README.md +63 -0
- data/doc/Cloud-REST-API-v09-121313.pdf +0 -0
- data/doc/deprecated_sections.txt +21 -0
- data/doc/doc.txt +11201 -0
- data/doc/pagination-and-filtering.txt +24 -0
- data/doc/schemas.txt +10 -0
- data/doc/sections.txt +101 -0
- data/doc/urls.txt +101 -0
- data/lib/opsource/api/account.rb +13 -0
- data/lib/opsource/api/core.rb +127 -0
- data/lib/opsource/api/directory.rb +8 -0
- data/lib/opsource/api/image.rb +24 -0
- data/lib/opsource/api/network.rb +65 -0
- data/lib/opsource/api/report.rb +24 -0
- data/lib/opsource/api/server.rb +185 -0
- data/lib/opsource/api/vip.rb +125 -0
- data/lib/opsource/client.rb +91 -0
- data/lib/opsource/connection.rb +60 -0
- data/lib/opsource/exceptions.rb +14 -0
- data/lib/opsource/params.rb +62 -0
- data/lib/opsource/version.rb +22 -0
- data/lib/opsource/xml.rb +53 -0
- data/lib/opsource.rb +22 -0
- data/opsource.gemspec +27 -0
- metadata +157 -0
@@ -0,0 +1,125 @@
|
|
1
|
+
module Opsource::API
|
2
|
+
class VIP < Core
|
3
|
+
|
4
|
+
# Real Server section
|
5
|
+
def real_servers_list (network_id)
|
6
|
+
org_endpoint "/network/#{network_id}/realServer"
|
7
|
+
get
|
8
|
+
end
|
9
|
+
|
10
|
+
# Examples name = RealServer1, server_id = "415a7f70-1008-42a3-8375-5dcf52636cc5", in_service = true/false
|
11
|
+
def real_server_create (network_id, name, server_id, in_service)
|
12
|
+
org_endpoint "/network/#{network_id}/realServer"
|
13
|
+
xml_params(tag: "NewRealServer", schema: "vip", name: name, server_id: server_id, in_service: in_service)
|
14
|
+
post
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
def real_server_delete (network_id, rserver_id)
|
19
|
+
org_endpoint "/network/#{network_id}/realServer/#{rserver_id}?delete"
|
20
|
+
get
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
def real_server_modify (network_id, rserver_id, in_service)
|
25
|
+
org_endpoint "/network/#{network_id}/realServer/#{rserver_id}"
|
26
|
+
xml_params(in_service: in_service)
|
27
|
+
post
|
28
|
+
end
|
29
|
+
|
30
|
+
# Probe section
|
31
|
+
def probe_list (network_id)
|
32
|
+
org_endpoint "/network/#{network_id}/probe"
|
33
|
+
get
|
34
|
+
end
|
35
|
+
|
36
|
+
# Note this is for TCP, UDP & ICMP only additional xml fields need to be added to be complete
|
37
|
+
# Examples name = Probe1, type = TCP, probeIntervalSeconds = "60", errorCountBeforeServerFail = "5" maxReplyWaitSeconds = "10"
|
38
|
+
def probe_create
|
39
|
+
org_endpoint "/network/#{network_id}/probe"
|
40
|
+
xml_params(name: name, type: type, probeIntervalSeconds: probeIntervalSeconds, errorCountBeforeServerFail: errorCountBeforeServerFail, successCountBeforeServerEnable: successCountBeforeServerEnable, failedProbeIntervalSeconds: failedProbeIntervalSeconds, maxReplyWaitSeconds: maxReplyWaitSeconds)
|
41
|
+
post
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
def probe_delete (network_id, probe_id)
|
46
|
+
org_endpoint "/network/#{network_id}/probe/{probe_id}?delete"
|
47
|
+
get
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
# Server Farm Section
|
52
|
+
def server_farm_list (network_id)
|
53
|
+
org_endpoint "/network/#{network_id}/serverFarm"
|
54
|
+
get
|
55
|
+
end
|
56
|
+
|
57
|
+
def server_farm_details (network_id, server_farm_id)
|
58
|
+
org_endpoint "/network/#{network_id}/serverFarm/#{server_farm_id}"
|
59
|
+
get
|
60
|
+
end
|
61
|
+
|
62
|
+
def server_farm_create (network_id, name, real_server_id, port, predictor)
|
63
|
+
if ["ROUND_ROBIN", "LEAST_CONNECTIONS"].include? predictor
|
64
|
+
org_endpoint "/network/#{network_id}/serverFarm"
|
65
|
+
xml_params(schema: "vip", tag: "NewServerFarm", name: name, predictor: predictor, real_server: {id: real_server_id, port: port})
|
66
|
+
post
|
67
|
+
else
|
68
|
+
raise "Unknown predictor: #{predictor}"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def server_farm_delete (network_id, server_farm_id)
|
73
|
+
org_endpoint "/network/#{network_id}/serverFarm/#{server_farm_id}?delete"
|
74
|
+
get
|
75
|
+
end
|
76
|
+
|
77
|
+
# Examples realServerId = "RealServer1", realSeverPort = "80"
|
78
|
+
def real_server_to_server_farm (network_id, server_farm_id, real_server_id, real_server_port)
|
79
|
+
org_endpoint "/network/#{network_id}/serverFarm/#{server_farm_id}/addRealServer"
|
80
|
+
simple_params(real_server_id: real_server_id, real_server_port: real_server_port)
|
81
|
+
post_simple
|
82
|
+
end
|
83
|
+
|
84
|
+
# Examples realServerId = "RealServer1", realSeverPort = "80"
|
85
|
+
def real_server_from_server_farm (network_id, server_farm_id, real_server_id, real_server_port)
|
86
|
+
org_endpoint "/network/#{network_id}/serverFarm/#{server_farm_id}/removeRealServer"
|
87
|
+
simple_params(real_server_id: real_server_id, real_server_port: real_server_port)
|
88
|
+
post_simple
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
# Examples probe_id = TCP1
|
93
|
+
def probe_to_server_farm (network_id, server_farm_id, probe_id)
|
94
|
+
org_endpoint "/network/#{network_id}/serverFarm/#{server_farm_id}/addProbe"
|
95
|
+
xml_params(probe_id: probe_id)
|
96
|
+
post
|
97
|
+
end
|
98
|
+
|
99
|
+
# Examples probe_id = TCP1
|
100
|
+
def probe_from_server_farm (network_id, server_farm_id, probe_id)
|
101
|
+
org_endpoint "/network/#{network_id}/serverFarm/#{server_farm_id}/removeProbe"
|
102
|
+
xml_params(probe_id: probe_id)
|
103
|
+
post
|
104
|
+
end
|
105
|
+
|
106
|
+
# Examples predictor= LEAST_CONNECTIONS | ROUND_ROBIN
|
107
|
+
def server_farm_predictor(network_id, server_farm_id, predictor)
|
108
|
+
org_endpoint "/network/#{network_id}/serverFarm/#{server_farm_id}"
|
109
|
+
xml_params(predictor: predictor)
|
110
|
+
post
|
111
|
+
end
|
112
|
+
|
113
|
+
def vip_list(network_id)
|
114
|
+
org_endpoint "/network/#{network_id}/vip"
|
115
|
+
get
|
116
|
+
end
|
117
|
+
|
118
|
+
def vip_create(network_id, name, port, protocol, server_farm_id)
|
119
|
+
org_endpoint "/network/#{network_id}/vip"
|
120
|
+
xml_params(schema: "vip", tag: "NewVip", name: name, port: port, protocol: protocol, vip_target_type: "SERVER_FARM", vip_target_id: server_farm_id, reply_to_icmp: true, in_service: true)
|
121
|
+
post
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
module Opsource
|
2
|
+
class Client
|
3
|
+
include Opsource::Connection
|
4
|
+
include Opsource::Params
|
5
|
+
include Opsource::XML
|
6
|
+
|
7
|
+
attr_reader :api_base, :org_id, :username, :password
|
8
|
+
attr_reader :image, :directory, :network, :server, :account, :report
|
9
|
+
attr_reader :datacenter, :default_password
|
10
|
+
|
11
|
+
### FILTERS
|
12
|
+
# client.page_size = 10
|
13
|
+
# client.page_number = 1
|
14
|
+
# client.order_by = 'location,created.DESCENDING'
|
15
|
+
# client.filter_with = {location: %w(NA1 NA2), key: 'value'}
|
16
|
+
attr_accessor :silent, :colors # log setting
|
17
|
+
attr_accessor :page_size, :page_number, :order_by, :filter_with
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
def initialize(api_base, org_id, username, password, default_password="verysecurepassword", datacenter="EU1", colors = true, silent = false)
|
22
|
+
@api_base = api_base
|
23
|
+
@org_id = org_id
|
24
|
+
@username = username
|
25
|
+
@password = password
|
26
|
+
@datacenter = datacenter
|
27
|
+
@default_password = default_password
|
28
|
+
|
29
|
+
@colors = colors
|
30
|
+
@silent = silent
|
31
|
+
|
32
|
+
if @colors
|
33
|
+
require 'colorize'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def directory
|
38
|
+
Opsource::API::Directory.new(self)
|
39
|
+
end
|
40
|
+
|
41
|
+
def image
|
42
|
+
Opsource::API::Image.new(self)
|
43
|
+
end
|
44
|
+
|
45
|
+
def network
|
46
|
+
Opsource::API::Network.new(self)
|
47
|
+
end
|
48
|
+
|
49
|
+
def server
|
50
|
+
Opsource::API::Server.new(self)
|
51
|
+
end
|
52
|
+
|
53
|
+
def account
|
54
|
+
Opsource::API::Account.new(self)
|
55
|
+
end
|
56
|
+
|
57
|
+
def report
|
58
|
+
Opsource::API::Report.new(self)
|
59
|
+
end
|
60
|
+
|
61
|
+
def vip
|
62
|
+
Opsource::API::VIP.new(self)
|
63
|
+
end
|
64
|
+
|
65
|
+
def filter_params
|
66
|
+
params = {}
|
67
|
+
params[:page_size] = @page_size if @page_size.present?
|
68
|
+
params[:page_number] = @page_number if @page_number.present?
|
69
|
+
params[:order_by] = @order_by if @order_by.present?
|
70
|
+
|
71
|
+
if @filter_with.present?
|
72
|
+
@filter_with.each do |k, val|
|
73
|
+
params[k.to_sym] = val
|
74
|
+
end
|
75
|
+
end
|
76
|
+
params
|
77
|
+
end
|
78
|
+
|
79
|
+
# mode: bold, underscore, default
|
80
|
+
def log(message, color = nil, mode = nil)
|
81
|
+
return if @silent
|
82
|
+
if @colors
|
83
|
+
color = color.to_sym if color
|
84
|
+
mode = mode.to_sym if mode
|
85
|
+
puts message.colorize(:color => color, :mode => mode)
|
86
|
+
else
|
87
|
+
puts message
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Opsource
|
2
|
+
module Connection
|
3
|
+
def build_request(type, endpoint, query = nil, body = nil, xml=true)
|
4
|
+
# url = "https://cloudapi.nttamerica.com/oec/0.9" + "/server"
|
5
|
+
uri = api_base + endpoint
|
6
|
+
append_query(uri, query) if query
|
7
|
+
|
8
|
+
if xml
|
9
|
+
request = Typhoeus::Request.new(
|
10
|
+
uri,
|
11
|
+
method: type,
|
12
|
+
body: body,
|
13
|
+
userpwd: "#{@username}:#{@password}",
|
14
|
+
headers: { 'Content-Type' =>'text/xml', 'User-Agent' => 'ACP Ruby SDK' }
|
15
|
+
)
|
16
|
+
else
|
17
|
+
request = Typhoeus::Request.new(
|
18
|
+
uri,
|
19
|
+
method: type,
|
20
|
+
body: body,
|
21
|
+
userpwd: "#{@username}:#{@password}",
|
22
|
+
headers: { 'User-Agent' => 'ACP Ruby SDK' }
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def append_query(uri, query)
|
28
|
+
if uri.include?('?')
|
29
|
+
uri << '&'
|
30
|
+
else
|
31
|
+
uri << '?'
|
32
|
+
end
|
33
|
+
uri << query
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def perform_request(request)
|
38
|
+
log "\nrequesting #{request.url}...", :yellow
|
39
|
+
request.run
|
40
|
+
end
|
41
|
+
|
42
|
+
def log_response(request, response)
|
43
|
+
if response.success?
|
44
|
+
log "...........success!", :yellow
|
45
|
+
elsif response.timed_out?
|
46
|
+
log "ERROR\n-----", :red
|
47
|
+
log "got a time out"
|
48
|
+
elsif response.code == 0
|
49
|
+
# Could not get an http response, something's wrong.
|
50
|
+
log "ERROR\n-----", :red
|
51
|
+
log response.return_message
|
52
|
+
else
|
53
|
+
# Received a non-successful http response.
|
54
|
+
log "ERROR\n-----", :red
|
55
|
+
log "HTTP request failed: " + response.code.to_s, :red
|
56
|
+
log response.body, :yellow
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Opsource
|
2
|
+
module Exceptions
|
3
|
+
CODES = {
|
4
|
+
"REASON_10" => "Failure at network",
|
5
|
+
"REASON_20" => "Unrecoverable failure cause by a timeout.",
|
6
|
+
"REASON_250" => "Network does not exist for this organization.",
|
7
|
+
"REASON_320" => "Invalid Input Data - SourceIP must be a valid IPv4 address."
|
8
|
+
}
|
9
|
+
|
10
|
+
class ApiError < StandardError; end
|
11
|
+
class ConnectionError < StandardError; end
|
12
|
+
class RequestError < StandardError; end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Opsource
|
2
|
+
module Params
|
3
|
+
def url_query(params)
|
4
|
+
params = camelize_keys(params)
|
5
|
+
qitems = []
|
6
|
+
params.each do |k, vs|
|
7
|
+
vs = [vs].flatten.compact # remove nil values
|
8
|
+
vs.each {|v| qitems << "#{k}=#{v}"}
|
9
|
+
end
|
10
|
+
qitems.join('&')
|
11
|
+
end
|
12
|
+
|
13
|
+
def symbolize_keys(arg)
|
14
|
+
case arg
|
15
|
+
when Array
|
16
|
+
arg.map { |elem| symbolize_keys elem }
|
17
|
+
when Hash
|
18
|
+
Hash[
|
19
|
+
arg.map { |key, value|
|
20
|
+
k = key.is_a?(String) ? key.to_sym : key
|
21
|
+
v = symbolize_keys value
|
22
|
+
[k,v]
|
23
|
+
}]
|
24
|
+
else
|
25
|
+
arg
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def underscore_keys(arg)
|
30
|
+
case arg
|
31
|
+
when Array
|
32
|
+
arg.map { |elem| underscore_keys elem }
|
33
|
+
when Hash
|
34
|
+
Hash[
|
35
|
+
arg.map { |key, value|
|
36
|
+
k = key.is_a?(String) ? key.underscore : key
|
37
|
+
v = underscore_keys value
|
38
|
+
[k,v]
|
39
|
+
}]
|
40
|
+
else
|
41
|
+
arg
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def camelize_keys(arg)
|
46
|
+
case arg
|
47
|
+
when Array
|
48
|
+
arg.map { |elem| camelize_keys elem }
|
49
|
+
when Hash
|
50
|
+
Hash[
|
51
|
+
arg.map { |key, value|
|
52
|
+
k = key.is_a?(String) ? key.camelize(:lower) : key
|
53
|
+
k = key.is_a?(Symbol) ? key.to_s.camelize(:lower).to_sym : key
|
54
|
+
v = camelize_keys value
|
55
|
+
[k,v]
|
56
|
+
}]
|
57
|
+
else
|
58
|
+
arg
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Opsource
|
2
|
+
VERSION = "0.3.1"
|
3
|
+
|
4
|
+
{"xmlns:ns3"=>"http://oec.api.opsource.net/schemas/organization",
|
5
|
+
"xmlns:ns4"=>"http://oec.api.opsource.net/schemas/network",
|
6
|
+
"xmlns:ns2"=>"http://oec.api.opsource.net/schemas/directory",
|
7
|
+
"xmlns:ns8"=>"http://oec.api.opsource.net/schemas/general",
|
8
|
+
"xmlns:ns7"=>"http://oec.api.opsource.net/schemas/datacenter",
|
9
|
+
"xmlns:ns6"=>"http://oec.api.opsource.net/schemas/whitelabel",
|
10
|
+
"xmlns:ns5"=>"http://oec.api.opsource.net/schemas/vip",
|
11
|
+
"xmlns:ns9"=>"http://oec.api.opsource.net/schemas/admin",
|
12
|
+
"natIp"=>["207.20.54.2"],
|
13
|
+
"xmlns"=>"http://oec.api.opsource.net/schemas/server",
|
14
|
+
"sourceIp"=>["10.166.152.201"],
|
15
|
+
"id"=>["ac371318-f755-4dc1-bbc3-51a1522ca2fe"],
|
16
|
+
"name"=>["10.166.152.201"],
|
17
|
+
"xmlns:ns11"=>"http://oec.api.opsource.net/schemas/reset",
|
18
|
+
"xmlns:ns10"=>"http://oec.api.opsource.net/schemas/multigeo",
|
19
|
+
"xmlns:ns13"=>"http://oec.api.opsource.net/schemas/storage",
|
20
|
+
"xmlns:ns12"=>"http://oec.api.opsource.net/schemas/support",
|
21
|
+
"xmlns:ns14"=>"http://oec.api.opsource.net/schemas/manualimport"}
|
22
|
+
end
|
data/lib/opsource/xml.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
module Opsource
|
2
|
+
module XML
|
3
|
+
def xml_header
|
4
|
+
'<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' "\n"
|
5
|
+
end
|
6
|
+
|
7
|
+
def parse_response_xml_body(body)
|
8
|
+
# we'll not use 'KeyToSymbol' because it doesn't symbolize the keys for node attributes
|
9
|
+
opts = { 'ForceArray' => false, 'ForceContent' => false }
|
10
|
+
hash = XmlSimple.xml_in(body, opts)
|
11
|
+
hash.delete_if {|k, v| k =~ /(xmlns|xmlns:ns)/ } # removing the namespaces from response
|
12
|
+
Hashie::Mash.new(underscore_keys(hash))
|
13
|
+
rescue Exception => e
|
14
|
+
log "Impossible to convert XML to hash. Error: #{e.message}", :red
|
15
|
+
raise e
|
16
|
+
end
|
17
|
+
|
18
|
+
def build_request_simple_body(params)
|
19
|
+
params = camelize_keys(params)
|
20
|
+
#simple construction of post body...
|
21
|
+
body = params.map { |k, v| "#{k}=#{v}&" }
|
22
|
+
body.join
|
23
|
+
end
|
24
|
+
|
25
|
+
def build_request_xml_body(schema, tag, params)
|
26
|
+
params = camelize_keys(params)
|
27
|
+
schema_url = "http://oec.api.opsource.net/schemas/#{schema}"
|
28
|
+
|
29
|
+
xml = xml_header
|
30
|
+
xml += "<#{tag} xmlns=\"#{schema_url}\">\n"
|
31
|
+
params.each do |k, value|
|
32
|
+
|
33
|
+
xml += build_xml_helper(k, value)
|
34
|
+
xml += "\n"
|
35
|
+
end
|
36
|
+
xml += "</#{tag}>\n"
|
37
|
+
end
|
38
|
+
|
39
|
+
def build_xml_helper(key, value)
|
40
|
+
result = "<#{key}>"
|
41
|
+
if value.is_a?(Hash)
|
42
|
+
value.each do |k, v|
|
43
|
+
result += build_xml_helper(k,v)
|
44
|
+
end
|
45
|
+
else
|
46
|
+
result += "#{value}"
|
47
|
+
end
|
48
|
+
result += "</#{key}>"
|
49
|
+
result
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
data/lib/opsource.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'active_support/core_ext/object'
|
2
|
+
require 'active_support/core_ext/string'
|
3
|
+
require 'typhoeus'
|
4
|
+
require 'xmlsimple'
|
5
|
+
require 'hashie'
|
6
|
+
|
7
|
+
require './opsource/version.rb'
|
8
|
+
require './opsource/exceptions.rb'
|
9
|
+
|
10
|
+
require './opsource/connection.rb'
|
11
|
+
require './opsource/params.rb'
|
12
|
+
require './opsource/xml.rb'
|
13
|
+
require './opsource/client.rb'
|
14
|
+
|
15
|
+
require './opsource/api/core.rb'
|
16
|
+
require './opsource/api/directory.rb'
|
17
|
+
require './opsource/api/image.rb'
|
18
|
+
require './opsource/api/network.rb'
|
19
|
+
require './opsource/api/server.rb'
|
20
|
+
require './opsource/api/vip.rb'
|
21
|
+
require './opsource/api/account.rb'
|
22
|
+
require './opsource/api/report.rb'
|
data/opsource.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "opsource/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "didata_cloud_sdk"
|
7
|
+
s.version = Opsource::VERSION
|
8
|
+
s.authors = ["Juozas Gaigalas", "Tim Wade", "Stijn Muylle"]
|
9
|
+
s.email = ["juozasgaigalas@gmail.com", "pimpingeezer@gmail.com", "stijnmuylle@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Dimension Data REST API client gem}
|
12
|
+
s.description = %q{SDK to access Dimension Data Cloud api'}
|
13
|
+
|
14
|
+
s.rubyforge_project = "opsource"
|
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_dependency 'i18n'
|
22
|
+
s.add_dependency 'activesupport'
|
23
|
+
s.add_dependency 'typhoeus'
|
24
|
+
s.add_dependency 'xml-simple'
|
25
|
+
s.add_dependency 'hashie'
|
26
|
+
s.add_dependency 'colorize'
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: didata_cloud_sdk
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Juozas Gaigalas
|
8
|
+
- Tim Wade
|
9
|
+
- Stijn Muylle
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2014-12-03 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: i18n
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - '>='
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '0'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: activesupport
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - '>='
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: typhoeus
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: xml-simple
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
type: :runtime
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: hashie
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
type: :runtime
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: colorize
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - '>='
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
type: :runtime
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
description: SDK to access Dimension Data Cloud api'
|
100
|
+
email:
|
101
|
+
- juozasgaigalas@gmail.com
|
102
|
+
- pimpingeezer@gmail.com
|
103
|
+
- stijnmuylle@gmail.com
|
104
|
+
executables: []
|
105
|
+
extensions: []
|
106
|
+
extra_rdoc_files: []
|
107
|
+
files:
|
108
|
+
- .gitignore
|
109
|
+
- Gemfile
|
110
|
+
- README.md
|
111
|
+
- doc/Cloud-REST-API-v09-121313.pdf
|
112
|
+
- doc/deprecated_sections.txt
|
113
|
+
- doc/doc.txt
|
114
|
+
- doc/pagination-and-filtering.txt
|
115
|
+
- doc/schemas.txt
|
116
|
+
- doc/sections.txt
|
117
|
+
- doc/urls.txt
|
118
|
+
- lib/opsource.rb
|
119
|
+
- lib/opsource/api/account.rb
|
120
|
+
- lib/opsource/api/core.rb
|
121
|
+
- lib/opsource/api/directory.rb
|
122
|
+
- lib/opsource/api/image.rb
|
123
|
+
- lib/opsource/api/network.rb
|
124
|
+
- lib/opsource/api/report.rb
|
125
|
+
- lib/opsource/api/server.rb
|
126
|
+
- lib/opsource/api/vip.rb
|
127
|
+
- lib/opsource/client.rb
|
128
|
+
- lib/opsource/connection.rb
|
129
|
+
- lib/opsource/exceptions.rb
|
130
|
+
- lib/opsource/params.rb
|
131
|
+
- lib/opsource/version.rb
|
132
|
+
- lib/opsource/xml.rb
|
133
|
+
- opsource.gemspec
|
134
|
+
homepage: ''
|
135
|
+
licenses: []
|
136
|
+
metadata: {}
|
137
|
+
post_install_message:
|
138
|
+
rdoc_options: []
|
139
|
+
require_paths:
|
140
|
+
- lib
|
141
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - '>='
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '0'
|
151
|
+
requirements: []
|
152
|
+
rubyforge_project: opsource
|
153
|
+
rubygems_version: 2.4.5
|
154
|
+
signing_key:
|
155
|
+
specification_version: 4
|
156
|
+
summary: Dimension Data REST API client gem
|
157
|
+
test_files: []
|