class HammerCLIForeman::UpdateDependentSearchablesOptionBuilder

Protected Instance Methods

dependent_options(resource, resource_name_map, command) click to toggle source
# File lib/hammer_cli_foreman/option_builders.rb, line 301
def dependent_options(resource, resource_name_map, command)
  options = []
  searchables = @searchables.for(resource)
  resource_name = resource.singular_name
  aliased_name = aliased(resource_name, resource_name_map)
  # Those options are not coming from API docs, thus create a new family only
  family = HammerCLI::Options::OptionFamily.new(
    prefix: 'new-',
    aliased_resource: aliased_name,
    referenced_resource: resource_name,
    creator: command
  )

  options << family.parent(
    optionamize("--new-#{aliased_name}-id"),
    "new_#{aliased_name}_id".upcase,
    _('Use to update associated %s') % aliased_name,
    attribute_name: HammerCLI.option_accessor_name("new_#{resource_name}_id"),
    format: HammerCLI::Options::Normalizers::Number.new
  )
  unless searchables.empty?
    first = searchables[0]
    remaining = searchables[1..-1] || []

    # First option is named by the resource
    # Eg. --new-organization with accessor option_new_organization_name
    options << family.child(
      optionamize("--new-#{aliased_name}"),
      "new_#{aliased_name}_#{first.name}".upcase,
      _('Use to update associated %s') % aliased_name,
      attribute_name: HammerCLI.option_accessor_name("new_#{resource_name}_#{first.name}")
    )
    # Other options are named by the resource plus the searchable name
    # Eg. --new-organization-label with accessor option_new_organization_label
    remaining.each do |s|
      options << family.child(
        optionamize("--new-#{aliased_name}-#{s.name}"),
        "new_#{aliased_name}_#{s.name}".upcase,
        _('Use to update associated %s') % aliased_name,
        attribute_name: HammerCLI.option_accessor_name("new_#{resource_name}_#{s.name}")
      )
    end
  end

  options
end