Class: ERPC::CloudCatalogClient

Inherits:
Object
  • Object
show all
Defined in:
lib/erpc_sdk/rest.rb

Constant Summary collapse

RESOURCE_KINDS =
%w[bare-metal solana-grpc solana-shredstream vps].freeze
RESOURCE_MODES =
%w[dedicated direct shared].freeze

Instance Method Summary collapse

Constructor Details

#initialize(transport) ⇒ CloudCatalogClient

Returns a new instance of CloudCatalogClient.



244
245
246
# File 'lib/erpc_sdk/rest.rb', line 244

def initialize(transport)
  @transport = transport
end

Instance Method Details

#listObject



248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
# File 'lib/erpc_sdk/rest.rb', line 248

def list
  envelope = Validation.mapping(@transport.get("/v4/cloud/catalog"))
  message = Validation.mapping(envelope["message"])
  offerings = message["offerings"]
  raise InvalidResponseError unless envelope["success"] == true && offerings.is_a?(Array)

  offerings.each do |raw|
    item = Validation.mapping(raw)
    %w[id name description].each { |field| Validation.string(item[field]) }
    raise InvalidResponseError unless RESOURCE_KINDS.include?(item["kind"])
    raise InvalidResponseError if item["mode"] && !RESOURCE_MODES.include?(item["mode"])
    %w[regions capabilities].each do |field|
      array = item[field]
      raise InvalidResponseError unless array.is_a?(Array) && array.all? { |entry| entry.is_a?(String) }
    end
  end
  offerings
rescue InvalidResponseError
  raise InvalidResponseError, "ERPC returned an invalid Cloud catalog"
end