Parent

Class/Module Index [+]

Quicksearch

HammerCLIForeman::IdResolver

Attributes

api[R]

Public Class Methods

new(api, searchables) click to toggle source
# File lib/hammer_cli_foreman/id_resolver.rb, line 71
def initialize(api, searchables)
  @api = api
  @searchables = searchables
  define_id_finders
end

Public Instance Methods

scoped_options(scope, options) click to toggle source
# File lib/hammer_cli_foreman/id_resolver.rb, line 77
def scoped_options(scope, options)
  scoped_options = options.dup

  resource = HammerCLIForeman.param_to_resource(scope)
  return scoped_options unless resource

  option_names = searchables(resource).map { |s| s.name }
  option_names << "id"

  option_names.each do |name|
    option = HammerCLI.option_accessor_name(name)
    scoped_option = HammerCLI.option_accessor_name("#{scope}_#{name}")
    # remove the scope
    # e.g. option_architecture_id -> option_id
    if scoped_options[scoped_option]
      scoped_options[option] = scoped_options.delete(scoped_option)
    else
      scoped_options.delete(option)
    end
  end
  scoped_options
end

Protected Instance Methods

create_search_options(options, resource) click to toggle source
# File lib/hammer_cli_foreman/id_resolver.rb, line 160
def create_search_options(options, resource)
  searchables(resource).each do |s|
    value = options[HammerCLI.option_accessor_name(s.name.to_s)]
    if value
      return {:search => "#{s.name} = \"#{value}\""}
    end
  end
  {}
end
define_id_finders() click to toggle source
# File lib/hammer_cli_foreman/id_resolver.rb, line 103
def define_id_finders
  @api.resources.each do |resource|
    method_name = "#{resource.singular_name}_id"

    self.class.send(:define_method, method_name) do |options|
      get_id(resource.name, options)
    end unless respond_to?(method_name)
  end
end
find_resource(resource_name, options) click to toggle source
# File lib/hammer_cli_foreman/id_resolver.rb, line 117
def find_resource(resource_name, options)
  resource = @api.resource(resource_name)

  search_options = search_options(options, resource)
  IdParamsFilter.new(:only_required => true).for_action(resource.action(:index)).each do |param|
    search_options[param.name] ||= send(param.name, scoped_options(param.name.gsub(/_id$/, ""), options))
  end
  resource.action(:index).routes.each do |route|
    route.params_in_path.each do |param|
      key = HammerCLI.option_accessor_name(param.to_s)
      if options[key]
        search_options[param] ||= options[key]
      end
    end
  end

  results = resource.call(:index, search_options)
  results = HammerCLIForeman.collection_to_common_format(results)

  pick_result(results, resource)
end
get_id(resource_name, options) click to toggle source
# File lib/hammer_cli_foreman/id_resolver.rb, line 113
def get_id(resource_name, options)
  options[HammerCLI.option_accessor_name("id")] || find_resource(resource_name, options)['id']
end
pick_result(results, resource) click to toggle source
# File lib/hammer_cli_foreman/id_resolver.rb, line 139
def pick_result(results, resource)
  raise ResolverError.new(_("%s not found") % resource.singular_name) if results.empty?
  raise ResolverError.new(_("%s found more than once") % resource.singular_name) if results.count > 1
  results[0]
end
search_options(options, resource) click to toggle source
# File lib/hammer_cli_foreman/id_resolver.rb, line 145
def search_options(options, resource)
  method = "create_#{resource.name}_search_options"
  search_options = if respond_to?(method)
                     send(method, options)
                   else
                     create_search_options(options, resource)
                   end
  raise MissingSeachOptions.new(_("Missing options to search %s") % resource.singular_name) if search_options.empty?
  search_options
end
searchables(resource) click to toggle source
# File lib/hammer_cli_foreman/id_resolver.rb, line 156
def searchables(resource)
  @searchables.for(resource)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.