class Idcf::Cli::Controller::Base
Attributes
links[RW]
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
@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