megam_api 1.6.8 → 1.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/megam/api.rb +108 -99
- data/lib/megam/api/version.rb +1 -1
- data/lib/megam/core/json_compat.rb +6 -7
- data/megam_api.gemspec +7 -7
- metadata +43 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 18bbd9e96c718b62b88f6db3596e5271ac932332
|
4
|
+
data.tar.gz: 2a98f3d72705ce5617b4a25bab75ba6284f1af91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 323ea0ed3d5e70e205687c71da0eb67957071e3722f3ecb9b557831572a0bcb30ea3c9dd9ba36fab1cb14486a24de52be213b6cf1ea48bd19219bad948eee6d8
|
7
|
+
data.tar.gz: 25c694febd7b2c4470dfbd6f81e299d16c5caec5edc3d7a5cc0d2471969d0987d4d1ee8b3deb923b0b73ec625d8ba693881a1558c7339600c1220ac8abc6e3ae
|
data/README.md
CHANGED
data/lib/megam/api.rb
CHANGED
@@ -93,66 +93,54 @@ require 'megam/core/promos'
|
|
93
93
|
|
94
94
|
module Megam
|
95
95
|
class API
|
96
|
-
|
97
|
-
# text is used to print stuff in the terminal (message, log, info, warn etc.)
|
98
96
|
attr_accessor :text
|
97
|
+
attr_accessor :email, :api_key, :password_hash, :org_id
|
98
|
+
attr_accessor :api_url, :api_version
|
99
|
+
attr_reader :last_response
|
100
|
+
|
101
|
+
API_VERSION2 = '/v2'.freeze
|
99
102
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
X_Megam_OTTAI = 'X-Megam-OTTAI'.freeze
|
105
|
-
X_Megam_ORG = 'X-Megam-ORG'.freeze
|
103
|
+
X_Megam_DATE = 'X-Megam-DATE'.freeze
|
104
|
+
X_Megam_HMAC = 'X-Megam-HMAC'.freeze
|
105
|
+
X_Megam_OTTAI = 'X-Megam-OTTAI'.freeze
|
106
|
+
X_Megam_ORG = 'X-Megam-ORG'.freeze
|
106
107
|
X_Megam_PUTTUSAVI = 'X-Megam-PUTTUSAVI'.freeze
|
107
108
|
|
108
109
|
HEADERS = {
|
109
|
-
'Accept'
|
110
|
+
'Accept' => 'application/json',
|
110
111
|
'Accept-Encoding' => 'gzip',
|
111
|
-
'User-Agent'
|
112
|
-
'X-Ruby-Version'
|
112
|
+
'User-Agent' => "megam-api/#{Megam::API::VERSION}",
|
113
|
+
'X-Ruby-Version' => RUBY_VERSION,
|
113
114
|
'X-Ruby-Platform' => RUBY_PLATFORM
|
114
115
|
}
|
115
116
|
|
116
117
|
OPTIONS = {
|
117
118
|
headers: {},
|
118
|
-
|
119
|
-
nonblock: false,
|
120
|
-
scheme: 'http'
|
119
|
+
nonblock: false
|
121
120
|
}
|
122
121
|
|
123
|
-
def text
|
124
|
-
@text ||= Megam::Text.new(STDOUT, STDERR, STDIN, {})
|
125
|
-
end
|
126
|
-
|
127
|
-
attr_reader :last_response
|
128
|
-
|
129
|
-
# It is assumed that every API call will use an API_KEY/email. This ensures validity of the person
|
130
|
-
# really the same guy on who he claims.
|
131
|
-
# 3 levels of options exits
|
132
|
-
# 1. The global OPTIONS as available inside the API (OPTIONS)
|
133
|
-
# 2. The options as passed via the instantiation of API will override global options. The ones that are passed are :email and :api_key and will
|
134
|
-
# be merged into a class variable @options
|
135
|
-
# 3. Upon merge of the options, the api_key, email as available in the @options is deleted.
|
136
122
|
def initialize(options = {})
|
137
123
|
@options = OPTIONS.merge(options)
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
124
|
+
|
125
|
+
assign_credentials
|
126
|
+
|
127
|
+
ensure_host_is_flattened
|
128
|
+
|
129
|
+
ensure_authkeys unless is_passthru?
|
130
|
+
|
131
|
+
turn_off_ssl_verify
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
def text
|
136
|
+
@text ||= Megam::Text.new(STDOUT, STDERR, STDIN, {})
|
145
137
|
end
|
146
138
|
|
147
139
|
def request(params, &block)
|
148
|
-
|
149
140
|
just_color_debug("#{@options[:path]}")
|
150
141
|
start = Time.now
|
151
142
|
Megam::Log.debug('START')
|
152
|
-
|
153
|
-
Megam::Log.debug("> #{pkey}: #{pvalue}")
|
154
|
-
end
|
155
|
-
|
143
|
+
|
156
144
|
begin
|
157
145
|
response = connection.request(params, &block)
|
158
146
|
rescue Excon::Errors::HTTPStatusError => error
|
@@ -169,110 +157,131 @@ module Megam
|
|
169
157
|
end
|
170
158
|
reerror = klass.new(error.message, error.response)
|
171
159
|
reerror.set_backtrace(error.backtrace)
|
172
|
-
Megam::Log.debug("#{reerror.response.body}")
|
173
160
|
reerror.response.body = Megam::JSONCompat.from_json(reerror.response.body.chomp)
|
174
|
-
Megam::Log.debug('RESPONSE ERR: Ruby Object')
|
175
|
-
Megam::Log.debug("#{reerror.response.body}")
|
176
161
|
raise(reerror)
|
177
162
|
end
|
178
163
|
|
179
164
|
@last_response = response
|
180
|
-
|
181
|
-
Megam::Log.debug("> HTTP #{response.remote_ip} #{response.status}")
|
182
|
-
|
183
|
-
response.headers.each do |header, value|
|
184
|
-
Megam::Log.debug("> #{header}: #{value}")
|
185
|
-
end
|
186
|
-
Megam::Log.debug('End HTTP Status/Header Data.')
|
187
|
-
|
165
|
+
|
188
166
|
if response.body && !response.body.empty?
|
189
167
|
if response.headers['Content-Encoding'] == 'gzip'
|
190
|
-
Megam::Log.debug('RESPONSE: Content-Encoding is gzip')
|
191
168
|
response.body = Zlib::GzipReader.new(StringIO.new(response.body)).read
|
192
169
|
end
|
193
|
-
Megam::Log.debug('RESPONSE: HTTP Body(JSON)')
|
194
|
-
Megam::Log.debug("#{response.body}")
|
195
170
|
|
196
171
|
begin
|
197
172
|
unless response.headers[X_Megam_OTTAI]
|
198
173
|
response.body = Megam::JSONCompat.from_json(response.body.chomp)
|
199
|
-
Megam::Log.debug('RESPONSE: Ruby Object')
|
200
174
|
else
|
201
175
|
response.body = Megam::KoniPai.new.koni(response.body.chomp)
|
202
|
-
Megam::Log.debug('RESPONSE: KoniPai Object ')
|
203
176
|
end
|
204
|
-
Megam::Log.debug("#{response.body}")
|
205
177
|
rescue Exception => jsonerr
|
206
|
-
Megam::Log.error(jsonerr)
|
207
178
|
raise(jsonerr)
|
208
179
|
end
|
209
180
|
end
|
181
|
+
|
210
182
|
Megam::Log.debug("END(#{(Time.now - start)}s)")
|
211
|
-
|
183
|
+
|
212
184
|
@connection.reset
|
213
185
|
response
|
214
186
|
end
|
215
187
|
|
216
188
|
private
|
189
|
+
|
190
|
+
def assign_credentials
|
191
|
+
@api_key = @options.delete(:api_key) || ENV['MEGAM_API_KEY']
|
192
|
+
@email = @options.delete(:email)
|
193
|
+
@password_hash = @options.delete(:password_hash)
|
194
|
+
@org_id = @options.delete(:org_id)
|
195
|
+
end
|
196
|
+
|
197
|
+
def ensure_host_is_flattened
|
198
|
+
uri = URI(@options.delete(:host)) if @options.has_key?(:host)
|
199
|
+
|
200
|
+
scheme = (uri && uri.scheme) ? uri.scheme : 'http'
|
201
|
+
|
202
|
+
host = (uri && uri.host) ? uri.host : '127.0.0.1'
|
203
|
+
|
204
|
+
port = (uri && uri.port) ? uri.port.to_s : '9000'
|
205
|
+
|
206
|
+
@api_version = (uri && uri.path) ? uri.path : API_VERSION2
|
207
|
+
|
208
|
+
@api_url = scheme + "://" + host + ":" + port + @api_version
|
209
|
+
end
|
210
|
+
|
211
|
+
def is_passthru?
|
212
|
+
@options[:passthru]
|
213
|
+
end
|
214
|
+
|
215
|
+
def ensure_authkeys
|
216
|
+
if api_combo_missing? && pw_combo_missing?
|
217
|
+
fail Megam::API::Errors::AuthKeysMissing
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
def api_combo_missing?
|
222
|
+
(!@email.nil? && !@api_key.nil?)
|
223
|
+
end
|
224
|
+
|
225
|
+
|
226
|
+
|
227
|
+
def pw_combo_missing?
|
228
|
+
(!@email.nil? && !@password_hash.nil?)
|
229
|
+
end
|
230
|
+
|
231
|
+
def turn_off_ssl_verify
|
232
|
+
Excon.defaults[:ssl_verify_peer] = false unless @api_url.include?("https")
|
233
|
+
|
234
|
+
end
|
217
235
|
|
218
236
|
def just_color_debug(path)
|
219
|
-
text.msg "--> #{text.color("(#{path})", :cyan, :bold)}"
|
237
|
+
text.msg "--> #{text.color("(#{path})", :cyan, :bold)}"
|
220
238
|
end
|
221
239
|
|
222
|
-
# Make a lazy connection.
|
223
240
|
def connection
|
224
|
-
@options[:path] =
|
225
|
-
|
226
|
-
|
227
|
-
X_Megam_DATE => encoded_api_header[:date], X_Megam_ORG => "#{@org_id}").merge(@options[:headers])
|
228
|
-
if (@api_key == "" || @api_key.nil?)
|
229
|
-
Megam::Log.debug("> PWH #{@password_hash}")
|
230
|
-
@options[:headers] = @options[:headers].merge(X_Megam_PUTTUSAVI => "true") unless (@password_hash == "" || @password_hash.nil?)
|
231
|
-
end
|
241
|
+
@options[:path] = @api_version + @options[:path]
|
242
|
+
|
243
|
+
build_headers
|
232
244
|
|
233
|
-
|
234
|
-
Megam::Log.debug("> HTTP #{@options[:scheme]}://#{@options[:host]}")
|
235
|
-
@options.each do |key, value|
|
236
|
-
Megam::Log.debug("> #{key}: #{value}")
|
237
|
-
end
|
238
|
-
Megam::Log.debug('End HTTP Request Data.')
|
239
|
-
if @options[:scheme] == 'https'
|
240
|
-
@connection = Excon.new("#{@options[:scheme]}://#{@options[:host]}", @options)
|
241
|
-
else
|
242
|
-
Excon.defaults[:ssl_verify_peer] = false
|
243
|
-
@connection = Excon.new("#{@options[:scheme]}://#{@options[:host]}:9000", @options)
|
244
|
-
end
|
245
|
-
@connection
|
245
|
+
@connection = Excon.new(@api_url, @options)
|
246
246
|
end
|
247
|
+
|
248
|
+
|
249
|
+
def build_headers
|
250
|
+
encoded = encode_header
|
251
|
+
|
252
|
+
@options[:headers] = HEADERS.merge(X_Megam_HMAC => encoded[:hmac],
|
253
|
+
X_Megam_DATE => encoded[:date],
|
254
|
+
X_Megam_ORG => @org_id).merge(@options[:headers])
|
255
|
+
|
256
|
+
|
257
|
+
build_header_puttusavi
|
258
|
+
end
|
247
259
|
|
248
|
-
|
249
|
-
|
250
|
-
# :api_key, :email, :body, :path
|
251
|
-
# The output will have
|
252
|
-
# :hmac
|
253
|
-
# :date
|
254
|
-
def encode_header(cmd_parms)
|
255
|
-
header_params = {}
|
256
|
-
body_digest = OpenSSL::Digest::MD5.digest(cmd_parms[:body])
|
257
|
-
body_base64 = Base64.urlsafe_encode64(body_digest)
|
260
|
+
def encode_header
|
261
|
+
body_base64 = Base64.urlsafe_encode64(OpenSSL::Digest::MD5.digest(@options[:body]))
|
258
262
|
|
259
263
|
current_date = Time.now.strftime('%Y-%m-%d %H:%M')
|
260
264
|
|
261
|
-
|
265
|
+
movingFactor = "#{current_date}" + "\n" + "#{@options[:path]}" + "\n" + "#{body_base64}"
|
262
266
|
|
263
|
-
digest = OpenSSL::Digest.new('
|
267
|
+
digest = OpenSSL::Digest.new('sha256')
|
264
268
|
|
265
|
-
|
266
|
-
|
267
|
-
if !(@password_hash.nil?) && @api_key.nil?
|
269
|
+
if pw_combo_missing?
|
268
270
|
hash = OpenSSL::HMAC.hexdigest(digest, Base64.strict_decode64(@password_hash), movingFactor)
|
269
|
-
elsif
|
271
|
+
elsif api_combo_missing?
|
270
272
|
hash = OpenSSL::HMAC.hexdigest(digest, @api_key, movingFactor)
|
271
273
|
else
|
272
274
|
hash = OpenSSL::HMAC.hexdigest(digest, "", movingFactor)
|
273
275
|
end
|
274
|
-
|
275
|
-
|
276
|
+
|
277
|
+
{ hmac: (@email + ':' + hash), date: current_date }
|
278
|
+
end
|
279
|
+
|
280
|
+
def build_header_puttusavi
|
281
|
+
if pw_combo_missing?
|
282
|
+
@options[:headers] = @options[:headers].merge(X_Megam_PUTTUSAVI => "true")
|
283
|
+
end
|
276
284
|
end
|
285
|
+
|
277
286
|
end
|
278
287
|
end
|
data/lib/megam/api/version.rb
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
|
2
2
|
# Wrapper class for interacting with JSON.
|
3
|
-
|
4
3
|
require "ffi_yajl"
|
5
4
|
# We're requiring this to prevent breaking consumers using Hash.to_json
|
6
5
|
require "json"
|
7
6
|
|
8
7
|
module Megam
|
9
8
|
class JSONCompat
|
9
|
+
|
10
10
|
JSON_MAX_NESTING = 1000
|
11
11
|
|
12
|
-
|
13
12
|
JSON_CLAZ = 'json_claz'.freeze
|
14
13
|
|
15
14
|
MEGAM_ACCOUNT = 'Megam::Account'.freeze
|
@@ -50,13 +49,13 @@ module Megam
|
|
50
49
|
MEGAM_EVENTSBILLINGCOLLECTION = 'Megam::EventsBillingCollection'.freeze
|
51
50
|
MEGAM_EVENTSSTORAGE = 'Megam::EventsStorage'.freeze
|
52
51
|
MEGAM_EVENTSSTORAGECOLLECTION = 'Megam::EventsStorageCollection'.freeze
|
53
|
-
MEGAM_SUBSCRIPTIONS
|
54
|
-
MEGAM_SUBSCRIPTIONSCOLLECTION
|
55
|
-
MEGAM_ADDONS
|
56
|
-
MEGAM_ADDONSCOLLECTION
|
52
|
+
MEGAM_SUBSCRIPTIONS = 'Megam::Subscriptions'.freeze
|
53
|
+
MEGAM_SUBSCRIPTIONSCOLLECTION = 'Megam::SubscriptionsCollection'.freeze
|
54
|
+
MEGAM_ADDONS = 'Megam::Addons'.freeze
|
55
|
+
MEGAM_ADDONSCOLLECTION = 'Megam::AddonsCollection'.freeze
|
57
56
|
MEGAM_PROMOS = 'Megam::Promos'.freeze
|
58
57
|
|
59
|
-
class <<self
|
58
|
+
class << self
|
60
59
|
# API to use to avoid create_addtions
|
61
60
|
def parse(source, opts = {})
|
62
61
|
begin
|
data/megam_api.gemspec
CHANGED
@@ -5,20 +5,20 @@ require "megam/api/version"
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "megam_api"
|
7
7
|
s.version = Megam::API::VERSION
|
8
|
-
s.authors = ["Rajthilak, Kishorekumar Neelamegam, Ranjitha R, Rajesh Rajagopalan, Thomas Alrin, Yeshwanth Kumar, Subash Sethurajan, Arunkumar sekar"]
|
9
|
-
s.email = ["rajthilak@megam.io","nkishore@megam.io","ranjithar@megam.io","
|
8
|
+
s.authors = ["Rajthilak, Kishorekumar Neelamegam, Ranjitha R, Vinodhini V, Rathish VBR, Rajesh Rajagopalan, Thomas Alrin, Yeshwanth Kumar, Subash Sethurajan, Arunkumar sekar"]
|
9
|
+
s.email = ["rajthilak@megam.io","nkishore@megam.io","ranjithar@megam.io","vino.v@megam.io","rathishvbr@megam.io","rajeshr@megam.io","thomasalrin@gmail.com","morpheyesh@gmail.com","subash.avc@gmail.com","arunkumar.sekar@megam.io"]
|
10
10
|
s.homepage = "http://github.com/megamsys/megam_api"
|
11
|
-
s.license = "
|
11
|
+
s.license = "MIT"
|
12
12
|
s.extra_rdoc_files = ["README.md", "LICENSE" ]
|
13
|
-
s.summary = %q{Ruby Client for the Megam}
|
14
|
-
s.description = %q{Ruby Client for the Megam vertice
|
13
|
+
s.summary = %q{Ruby Client for the Megam Vertice}
|
14
|
+
s.description = %q{Ruby Client for the Megam vertice. Performs REST calls to Vertice Gateway - http://github.com/megamsys/vertice_gateway.git}
|
15
15
|
s.files = `git ls-files`.split("\n")
|
16
16
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
18
|
s.require_paths = ["lib"]
|
19
|
-
s.add_runtime_dependency 'excon', '~> 0.
|
19
|
+
s.add_runtime_dependency 'excon', '~> 0.52.0'
|
20
20
|
s.add_runtime_dependency 'highline', '~> 1.7'
|
21
|
-
s.add_runtime_dependency 'ffi-yajl', '~> 2.
|
21
|
+
s.add_runtime_dependency 'ffi-yajl', '~> 2.3'
|
22
22
|
s.add_runtime_dependency 'mixlib-config', '~> 2.2'
|
23
23
|
s.add_runtime_dependency 'mixlib-log', '~> 1.6'
|
24
24
|
s.add_development_dependency 'minitest', '~> 5.9'
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: megam_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Rajthilak, Kishorekumar Neelamegam, Ranjitha R,
|
8
|
-
Yeshwanth Kumar, Subash Sethurajan, Arunkumar sekar
|
7
|
+
- Rajthilak, Kishorekumar Neelamegam, Ranjitha R, Vinodhini V, Rathish VBR, Rajesh
|
8
|
+
Rajagopalan, Thomas Alrin, Yeshwanth Kumar, Subash Sethurajan, Arunkumar sekar
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-09-
|
12
|
+
date: 2016-09-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: excon
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 0.
|
20
|
+
version: 0.52.0
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: 0.
|
27
|
+
version: 0.52.0
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: highline
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -45,14 +45,14 @@ dependencies:
|
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '2.
|
48
|
+
version: '2.3'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: '2.
|
55
|
+
version: '2.3'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: mixlib-config
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,15 +109,17 @@ dependencies:
|
|
109
109
|
- - "~>"
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '11.2'
|
112
|
-
description: Ruby Client for the Megam vertice
|
113
|
-
|
112
|
+
description: Ruby Client for the Megam vertice. Performs REST calls to Vertice Gateway
|
113
|
+
- http://github.com/megamsys/vertice_gateway.git
|
114
114
|
email:
|
115
115
|
- rajthilak@megam.io
|
116
116
|
- nkishore@megam.io
|
117
117
|
- ranjithar@megam.io
|
118
|
+
- vino.v@megam.io
|
119
|
+
- rathishvbr@megam.io
|
118
120
|
- rajeshr@megam.io
|
119
|
-
- thomasalrin@
|
120
|
-
-
|
121
|
+
- thomasalrin@gmail.com
|
122
|
+
- morpheyesh@gmail.com
|
121
123
|
- subash.avc@gmail.com
|
122
124
|
- arunkumar.sekar@megam.io
|
123
125
|
executables: []
|
@@ -247,7 +249,7 @@ files:
|
|
247
249
|
- test/test_subscriptions.rb
|
248
250
|
homepage: http://github.com/megamsys/megam_api
|
249
251
|
licenses:
|
250
|
-
-
|
252
|
+
- MIT
|
251
253
|
metadata: {}
|
252
254
|
post_install_message:
|
253
255
|
rdoc_options: []
|
@@ -268,5 +270,31 @@ rubyforge_project:
|
|
268
270
|
rubygems_version: 2.5.1
|
269
271
|
signing_key:
|
270
272
|
specification_version: 4
|
271
|
-
summary: Ruby Client for the Megam
|
272
|
-
test_files:
|
273
|
+
summary: Ruby Client for the Megam Vertice
|
274
|
+
test_files:
|
275
|
+
- test/mixins/test_assemblies.rb
|
276
|
+
- test/mixins/test_assembly.rb
|
277
|
+
- test/mixins/test_component.rb
|
278
|
+
- test/test_accounts.rb
|
279
|
+
- test/test_addons.rb
|
280
|
+
- test/test_assemblies.rb
|
281
|
+
- test/test_assembly.rb
|
282
|
+
- test/test_balances.rb
|
283
|
+
- test/test_billedhistories.rb
|
284
|
+
- test/test_billingtranscations.rb
|
285
|
+
- test/test_components.rb
|
286
|
+
- test/test_disks.rb
|
287
|
+
- test/test_domains.rb
|
288
|
+
- test/test_eventsbilling.rb
|
289
|
+
- test/test_eventscontainer.rb
|
290
|
+
- test/test_eventsstorage.rb
|
291
|
+
- test/test_eventsvm.rb
|
292
|
+
- test/test_helper.rb
|
293
|
+
- test/test_marketplaces.rb
|
294
|
+
- test/test_organizations.rb
|
295
|
+
- test/test_promos.rb
|
296
|
+
- test/test_requests.rb
|
297
|
+
- test/test_sensors.rb
|
298
|
+
- test/test_snapshots.rb
|
299
|
+
- test/test_sshkeys.rb
|
300
|
+
- test/test_subscriptions.rb
|