Object
# 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
# 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
# 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
# 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
# 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
# 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
# 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
Generated with the Darkfish Rdoc Generator 2.