class Idcf::Cli::Controller::Base

Controller Base

Attributes

cmd[R]
code_conf[R]
config[R]
m_classes[R]

Public Class Methods

init(argv) click to toggle source
# File lib/idcf/cli/controller/base.rb, line 56
def init(argv)
  o       = Thor::Options.new(class_options).parse(argv)
  region  = get_region(o)
  version = service_version(o)
  Idcf::Cli::Lib::Document.init(region: region, version: version)

  register_schema_method(o)

  make_module_classes.each do |cn, c|
    register_module_method!(cn, c)
  end
end
register_schema_method(o) click to toggle source
# File lib/idcf/cli/controller/base.rb, line 69
def register_schema_method(o)
  path = make_schema_path(o)

  unless File.exist?(path)
    raise Idcf::Cli::Error::CliError, 'Run the command `update`' if self_call?
    return nil
  end

  analyst = Idcf::JsonHyperSchema::Analyst.new
  @links  = analyst.load(path).links
  @links.each do |link|
    register_schema_method_by_link!(link)
  end
end
self_call?() click to toggle source
# File lib/idcf/cli/controller/base.rb, line 84
def self_call?
  ARGV.include?(name.underscore.split('/').pop)
end
service_name() click to toggle source

service name

@return String

# File lib/idcf/cli/controller/base.rb, line 91
def service_name
  name.underscore.split('/').last
end
service_versions(region) click to toggle source

service version list

@return [Array]

# File lib/idcf/cli/controller/base.rb, line 98
def service_versions(region)
  [].tap do |result|
    sn = service_name
    Idcf::Cli::Lib::Configure.get_code_conf(sn).each do |k, v|
      v['region'].each_key do |reg|
        next unless region == reg
        result << k
        break
      end
    end
  end
end

Public Instance Methods

versions() click to toggle source
# File lib/idcf/cli/controller/base.rb, line 114
def versions
  list = self.class.service_versions(self.class.get_region(options))
  puts make_result_str(make_result_data(list, options), options)
end

Protected Instance Methods

api_result(val) click to toggle source
# File lib/idcf/cli/controller/base.rb, line 192
def api_result(val)
  val
end
async_id(resource) click to toggle source
# File lib/idcf/cli/controller/base.rb, line 196
def async_id(resource)
  return resource['resource_id'] if !resource.nil? && resource.class == Hash
  nil
end
data_filter(data, o, table_flag) click to toggle source
# File lib/idcf/cli/controller/base.rb, line 236
def data_filter(data, o, table_flag)
  helper = Idcf::Cli::Lib::Convert::Helper.new
  data   = make_field_data(data) if helper.only_filter_fields?(o)
  [Hash, Array].include?(data.class) ? helper.filter(data, o, table_flag) : data
end
do_api(cmd, api, o, arg) click to toggle source

do api

@param cmd [String] @param api [Idcf::Cli::Lib::Api] @param arg [Array] @param o [Hash] @return Mixed @raise

# File lib/idcf/cli/controller/base.rb, line 181
def do_api(cmd, api, o, arg)
  result      = api_result(api.do(cmd, *arg))
  link        = api.find_link(cmd)
  resource    = link.async? ? do_async(api, result, o, link) : nil
  sync_result = api.result_api(cmd, arg, result, async_id(resource))
  return sync_result if sync_result
  link.async? ? resource : result
rescue Idcf::Cli::Error::ApiError => e
  raise e, raise_api_error_msg(e)
end
do_async(_api, _api_result, _o, _executed_link) click to toggle source

do_async

@param _api [Idcf::Cli::Lib::Api] @param _api_result [Mixed] @param _o [Hash] @param _executed_link [Idcf::JsonHyperSchema::Expands::LinkInfoBase] @result Mixed

# File lib/idcf/cli/controller/base.rb, line 208
def do_async(_api, _api_result, _o, _executed_link)
  nil
end
do_command(cmd, *args, o) click to toggle source

do command

@param cmd [String] @param *args [Array] @param o [Hash] @return Mixed @raise

# File lib/idcf/cli/controller/base.rb, line 146
def do_command(cmd, *args, o)
  self_class = self.class
  s_class    = self_class.search_module_class(cmd)

  arg    = convert_arg_json(*args)
  client = make_client(o, self_class.get_region(o))
  api    = Idcf::Cli::Lib::Api.new(links: self_class.links, client: client)
  return do_service(s_class, api, o, arg) unless s_class.nil?
  do_api(cmd, api, o, arg)
end
do_service(service_class, api, o, arg) click to toggle source

do service

@param service_class [Idcf::Cli::Service::Base] @param api [Idcf::Cli::Lib::Api] @param arg [Array] @param o [Hash] @return Mixed @raise

# File lib/idcf/cli/controller/base.rb, line 165
def do_service(service_class, api, o, arg)
  obj = service_class.new
  obj.between_param?(arg.size)
  result = obj.do(api, o, *arg)
  return result if obj.last_command.empty?
  do_api(obj.last_command, api, o, obj.last_command_args)
end
execute(cmd, *args) click to toggle source
# File lib/idcf/cli/controller/base.rb, line 121
def execute(cmd, *args)
  data = run(cmd, args, options)
  puts make_result_str(data, options)
  Idcf::Cli::Lib::Util::CliLogger.delete
  Idcf::Cli::Lib::Util::CliLogger.cleaning(options)
rescue StandardError => e
  self.class.error_exit(e)
end
make_field_data(data) click to toggle source
# File lib/idcf/cli/controller/base.rb, line 249
def make_field_data(data)
  data
end
make_result_data(data, o) click to toggle source
# File lib/idcf/cli/controller/base.rb, line 222
def make_result_data(data, o)
  format     = output_format(o, '')
  table_flag = %w[csv table].include?(format)
  helper     = Idcf::Cli::Lib::Convert::Helper.new

  return data_filter(data, o, table_flag) if helper.filter_target?(o)
  if table_flag
    return data.class == Hash ? make_table_data(data) : data
  end
  result        = make_base_response
  result[:data] = data
  result
end
make_table_data(data) click to toggle source

table data @param data [Hash] @return Hash

# File lib/idcf/cli/controller/base.rb, line 245
def make_table_data(data)
  data
end
raise_api_error_msg(res) click to toggle source

raise api error msg

@param res [Faraday::Responce] @return [String]

# File lib/idcf/cli/controller/base.rb, line 216
def raise_api_error_msg(res)
  "HTTP status code: #{res.status}, " \
    "Error message: #{res.body['message']}, " \
    "Reference: #{res.body['reference']}"
end
run(cmd, args, o) click to toggle source
# File lib/idcf/cli/controller/base.rb, line 130
def run(cmd, args, o)
  @cmd = cmd
  data = do_validate(o)
  raise Idcf::Cli::Error::CliError, data[:message].flatten if data

  data = make_result_data(do_command(cmd, *args, o), o)
  data
end