Sha256: 2d76e570fd8eaafb48e3d28a0e07180a4dda854bf0e4f6893388ac0e4d61bac6

Contents?: true

Size: 2 KB

Versions: 27

Compression:

Stored size: 2 KB

Contents

module HammerCLIForeman
  module OptionSources
    class ReferencedResourceIdParams < HammerCLIForeman::OptionSources::IdParams
      def param_updatable?(resource, api_param)
        resource && @command.respond_to?(HammerCLI.option_accessor_name(api_param.name))
      end

      def get_options(defined_options, result)
        return result if @command.action.nil?

        available_id_params.each do |api_param|
          attr_name = HammerCLI.option_accessor_name(api_param.name.gsub('_id', '_name'))
          option = @command.class.find_options(attribute_name: attr_name).first
          next unless option

          resource = HammerCLIForeman.foreman_resource(option.referenced_resource, singular: true)
          if result[HammerCLI.option_accessor_name(api_param.name)].nil? && param_updatable?(resource, api_param)
            scope = { HammerCLI.option_accessor_name("#{resource.singular_name}_name") => result[attr_name] }
            resource_id = @command.get_resource_id(
              resource, scoped: true, required: api_param.required?,
              all_options: result.merge(scope))
            result[HammerCLI.option_accessor_name(api_param.name)] = resource_id if resource_id
          end
        end
        result
      rescue HammerCLIForeman::MissingSearchOptions => e
        switches = @command.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
    end
  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
hammer_cli_foreman-3.14.0 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-3.13.0 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-3.12.0 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-3.10.0 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-3.9.0 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-3.8.0 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-3.7.0 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-3.5.1 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-3.6.0 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-3.5.0 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-3.4.0 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-3.3.0 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-3.2.0 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-2.5.2 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-3.1.0 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-3.0.0 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-2.5.1 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-2.5.0 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-2.3.2 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb
hammer_cli_foreman-2.4.0 lib/hammer_cli_foreman/option_sources/referenced_resource_id_params.rb