class HammerCLIForeman::DependentSearchablesOptionBuilder
Attributes
resource[R]
Public Class Methods
new(resource, searchables, options = {})
click to toggle source
# File lib/hammer_cli_foreman/option_builders.rb, line 206 def initialize(resource, searchables, options = {}) @resource = resource @searchables = searchables @context = options[:context] || {} end
Public Instance Methods
build(builder_params={})
click to toggle source
# File lib/hammer_cli_foreman/option_builders.rb, line 214 def build(builder_params={}) resource_name_map = builder_params[:resource_mapping] || {} dependent_options(@resource, resource_name_map) end
Protected Instance Methods
aliased(name, resource_name_map)
click to toggle source
# File lib/hammer_cli_foreman/option_builders.rb, line 271 def aliased(name, resource_name_map) resource_name_map[name.to_s] || resource_name_map[name.to_sym] || name end
dependent_options(resource, resource_name_map)
click to toggle source
# File lib/hammer_cli_foreman/option_builders.rb, line 221 def dependent_options(resource, resource_name_map) options = [] searchables = @searchables.for(resource) resource_name = resource.singular_name aliased_name = aliased(resource_name, resource_name_map) types = searchables.map(&:name).push('id').map(&:capitalize).join('/') associated_resource = aliased_name.to_s.tr('_', ' ') family = HammerCLI::Options::OptionFamily.new( referenced_resource: resource_name, aliased_resource: aliased_name, description: _('%{types} of associated %{resource}') % { types: types, resource: associated_resource } ) unless searchables.empty? first = searchables[0] remaining = searchables[1..-1] || [] # First option is named by the resource # Eg. --organization with accessor option_organization_name options << family.child( optionamize("--#{aliased_name}"), "#{aliased_name}_#{first.name}".upcase, first.description || " ", attribute_name: HammerCLI.option_accessor_name("#{resource_name}_#{first.name}") ) # Other options are named by the resource plus the searchable name # Eg. --organization-label with accessor option_organization_label remaining.each do |s| options << family.send(s.parent? ? :parent : :child, optionamize("--#{aliased_name}-#{s.name}"), "#{aliased_name}_#{s.name}".upcase, s.description || " ", attribute_name: HammerCLI.option_accessor_name("#{resource_name}_#{s.name}"), format: s.format ) end end unless options.any? { |o| o.handles?(optionamize("--#{aliased_name}-id")) } options << family.parent( optionamize("--#{aliased_name}-id"), "#{aliased_name}_id".upcase, description("#{aliased_name}_id", @context[:action]), attribute_name: HammerCLI.option_accessor_name("#{resource_name}_id"), format: HammerCLI::Options::Normalizers::Number.new ) end options end
description(param_name, action)
click to toggle source
Calls superclass method
HammerCLIForeman::SearchablesAbstractOptionBuilder#description
# File lib/hammer_cli_foreman/option_builders.rb, line 275 def description(param_name, action) return super('id', :show) if action.nil? param = ParamsNameFilter.new(param_name).for_action(action).first return ' ' if param.nil? param.description end