class HammerCLIForeman::Command
Public Class Methods
build_options(builder_params={}) { |builder_params| ... }
click to toggle source
Calls superclass method
# File lib/hammer_cli_foreman/commands.rb, line 110 def self.build_options(builder_params={}) builder_params[:resource_mapping] ||= resource_name_mapping builder_params = HammerCLIForeman::BuildParams.new(builder_params) yield(builder_params) if block_given? super(builder_params.to_hash, &nil) end
connection_name(resource_class)
click to toggle source
# File lib/hammer_cli_foreman/commands.rb, line 68 def self.connection_name(resource_class) CONNECTION_NAME end
create_option_builder()
click to toggle source
Calls superclass method
# File lib/hammer_cli_foreman/commands.rb, line 96 def self.create_option_builder configurator = BuilderConfigurator.new(searchables, dependency_resolver) builder = ForemanOptionBuilder.new(searchables) builder.builders = [] builder.builders += configurator.builders_for(resource, resource.action(action)) if resource_defined? builder.builders += super.builders builder end
dependency_resolver()
click to toggle source
# File lib/hammer_cli_foreman/commands.rb, line 156 def self.dependency_resolver HammerCLIForeman::DependencyResolver.new end
resolver()
click to toggle source
# File lib/hammer_cli_foreman/commands.rb, line 151 def self.resolver api = HammerCLI.context[:api_connection].get("foreman") HammerCLIForeman::IdResolver.new(api, HammerCLIForeman::Searchables.new) end
resource_config()
click to toggle source
Calls superclass method
# File lib/hammer_cli_foreman/commands.rb, line 72 def self.resource_config super.merge(HammerCLIForeman.resource_config) end
resource_name_mapping()
click to toggle source
# File lib/hammer_cli_foreman/commands.rb, line 106 def self.resource_name_mapping HammerCLIForeman::RESOURCE_NAME_MAPPING end
searchables()
click to toggle source
# File lib/hammer_cli_foreman/commands.rb, line 160 def self.searchables @searchables ||= HammerCLIForeman::Searchables.new @searchables end
Public Instance Methods
customized_options()
click to toggle source
# File lib/hammer_cli_foreman/commands.rb, line 192 def customized_options params = options # resolve all '<resource_name>_id' parameters if they are defined as options # (they can be skipped using .without or .expand.except) IdParamsFilter.new(:only_required => false).for_action(resource.action(action)).each do |api_param| param_resource = HammerCLIForeman.param_to_resource(api_param.name) if param_resource && respond_to?(HammerCLI.option_accessor_name("#{param_resource.singular_name}_id")) resource_id = get_resource_id(param_resource, :scoped => true, :required => api_param.required?) params[HammerCLI.option_accessor_name(api_param.name)] = resource_id if resource_id end end # resolve all '<resource_name>_ids' parameters if they are defined as options IdArrayParamsFilter.new(:only_required => false).for_action(resource.action(action)).each do |api_param| param_resource = HammerCLIForeman.param_to_resource(api_param.name) if param_resource && respond_to?(HammerCLI.option_accessor_name("#{param_resource.singular_name}_ids")) resource_ids = get_resource_ids(param_resource, :scoped => true, :required => api_param.required?) params[HammerCLI.option_accessor_name(api_param.name)] = resource_ids if resource_ids end end # resolve 'id' parameter if it's defined as an option id_option_name = HammerCLI.option_accessor_name('id') params[id_option_name] ||= get_identifier if respond_to?(id_option_name) params end
dependency_resolver()
click to toggle source
# File lib/hammer_cli_foreman/commands.rb, line 80 def dependency_resolver self.class.dependency_resolver end
exception_handler_class()
click to toggle source
# File lib/hammer_cli_foreman/commands.rb, line 88 def exception_handler_class #search for exception handler class in parent modules/classes HammerCLI.constant_path(self.class.name.to_s).reverse.each do |mod| return mod.exception_handler_class if mod.respond_to? :exception_handler_class end HammerCLIForeman::ExceptionHandler end
get_identifier()
click to toggle source
# File lib/hammer_cli_foreman/commands.rb, line 118 def get_identifier @identifier ||= get_resource_id(resource) @identifier end
get_resource_id(resource, options={})
click to toggle source
# File lib/hammer_cli_foreman/commands.rb, line 123 def get_resource_id(resource, options={}) if options[:scoped] opts = resolver.scoped_options(resource.singular_name, all_options) else opts = all_options end begin resolver.send("#{resource.singular_name}_id", opts) rescue HammerCLIForeman::MissingSearchOptions => e if (options[:required] == true || resource_search_requested(resource, opts)) logger.info "Error occured while searching for #{resource.singular_name}" raise e end end end
get_resource_ids(resource, options={})
click to toggle source
# File lib/hammer_cli_foreman/commands.rb, line 139 def get_resource_ids(resource, options={}) opts = resolver.scoped_options(resource.singular_name, all_options) begin resolver.send("#{resource.singular_name}_ids", opts) rescue HammerCLIForeman::MissingSearchOptions => e if (options[:required] == true || resource_search_requested(resource, opts, true)) logger.info "Error occured while searching for #{resource.name}" raise e end end end
request_params()
click to toggle source
# File lib/hammer_cli_foreman/commands.rb, line 219 def request_params params = customized_options params_pruned = method_options(params) # Options defined manualy in commands are removed in method_options. # Manual ids are common so its handling is covered here id_option_name = HammerCLI.option_accessor_name('id') params_pruned['id'] = params[id_option_name] if params[id_option_name] params_pruned end
resolver()
click to toggle source
# File lib/hammer_cli_foreman/commands.rb, line 76 def resolver self.class.resolver end
searchables()
click to toggle source
# File lib/hammer_cli_foreman/commands.rb, line 84 def searchables self.class.searchables end
send_request()
click to toggle source
Calls superclass method
# File lib/hammer_cli_foreman/commands.rb, line 165 def send_request transform_format(super) rescue HammerCLIForeman::MissingSearchOptions => e switches = self.class.find_options(:referenced_resource => e.resource.singular_name).map(&:long_switch) if switches.empty? error_message = _("Could not find %{resource}. Some search options were missing, please see --help.") elsif switches.length == 1 error_message = _("Could not find %{resource}, please set option %{switches}.") else error_message = _("Could not find %{resource}, please set one of options %{switches}.") end raise MissingSearchOptions.new( error_message % { :resource => e.resource.singular_name, :switches => switches.join(", ") }, e.resource ) end
transform_format(data)
click to toggle source
# File lib/hammer_cli_foreman/commands.rb, line 188 def transform_format(data) HammerCLIForeman.record_to_common_format(data) end
Private Instance Methods
resource_search_requested(resource, options, plural=false)
click to toggle source
# File lib/hammer_cli_foreman/commands.rb, line 232 def resource_search_requested(resource, options, plural=false) # check if any searchable for given resource is set filed_options = Hash[options.select { |opt, value| !value.nil? }].keys searchable_options = searchables.for(resource).map do |o| HammerCLI.option_accessor_name(plural ? o.plural_name : o.name) end !(filed_options & searchable_options).empty? end