megam_api 1.6.8 → 1.7.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.
- 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
|