class HammerCLIForeman::BuilderConfigurator

Public Class Methods

new(searchables, dependency_resolver) click to toggle source
# File lib/hammer_cli_foreman/option_builders.rb, line 62
def initialize(searchables, dependency_resolver)
  @searchables = searchables
  @dependency_resolver = dependency_resolver
end

Public Instance Methods

builders_for(resource, action) click to toggle source
# File lib/hammer_cli_foreman/option_builders.rb, line 67
def builders_for(resource, action)
  builders = []

  dependent_resources = []

  if action.params.find{ |p| p.name == "id" }
    builders << SearchablesOptionBuilder.new(resource, @searchables)
    dependent_resources += @dependency_resolver.resource_dependencies(resource, :only_required => true, :recursive => true)
  end

  dependent_resources += @dependency_resolver.action_dependencies(action, :only_required => false, :recursive => false)
  dependent_resources += @dependency_resolver.action_dependencies(action, :only_required => true, :recursive => true)

  unique(dependent_resources).each do |dep_resource|
    builders << DependentSearchablesOptionBuilder.new(dep_resource, @searchables)
  end

  IdArrayParamsFilter.new(:only_required => false).for_action(action).each do |p|
    resource = HammerCLIForeman.param_to_resource(p.name)
    builders << DependentSearchablesArrayOptionBuilder.new(resource, @searchables) unless resource.nil?
  end

  builders
end

Protected Instance Methods

unique(resources) click to toggle source
# File lib/hammer_cli_foreman/option_builders.rb, line 94
def unique(resources)
  # ruby 1.8 hack - it does not support passing blocks to Array#uniq
  resources.inject({}) do |h, r|
    h.update(r.name => r)
  end.values
end