Class: HammerCLIForeman::ForemanOptionBuilder

Inherits:
HammerCLI::OptionBuilderContainer
  • Object
show all
Defined in:
lib/hammer_cli_foreman/option_builders.rb

Instance Method Summary collapse

Constructor Details

#initialize(searchables, action = nil) ⇒ ForemanOptionBuilder

Returns a new instance of ForemanOptionBuilder.



98
99
100
101
# File 'lib/hammer_cli_foreman/option_builders.rb', line 98

def initialize(searchables, action = nil)
  @searchables = searchables
  @action = action
end

Instance Method Details

#build(builder_params = {}) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/hammer_cli_foreman/option_builders.rb', line 103

def build(builder_params={})
  expansion_options = builder_params[:expand] || {}

  except_default = @action&.params&.select { |p| !p.show? }&.map { |p| HammerCLIForeman.param_to_resource(p.name).name } || []
  allowed_resources = expansion_options[:only] || default_dependent_resources
  allowed_resources -= expansion_options[:except] || except_default
  allowed_resources += expansion_options[:including] || []
  allowed_resources.uniq!

  primary_resource = expansion_options[:primary]

  to_remove = default_dependent_resources - allowed_resources
  to_add = allowed_resources - default_dependent_resources

  builders.reject! do |b|
    b.class <= DependentSearchablesOptionBuilder && to_remove.include?(b.resource.name)
  end
  to_add.each do |resource_name|
    builders << DependentSearchablesOptionBuilder.new(HammerCLIForeman.foreman_resource(resource_name), @searchables)
  end

  if !primary_resource.nil?
    builders.reject! do |b|
      b.class <= SearchablesOptionBuilder
    end
    builders << SearchablesOptionBuilder.new(HammerCLIForeman.foreman_resource(primary_resource), @searchables) if primary_resource != false
  end

  super
end

#default_dependent_resourcesObject



134
135
136
# File 'lib/hammer_cli_foreman/option_builders.rb', line 134

def default_dependent_resources
  dependent_searchable_builders.map(&:resource).map(&:name)
end

#dependent_searchable_buildersObject



138
139
140
# File 'lib/hammer_cli_foreman/option_builders.rb', line 138

def dependent_searchable_builders
  self.builders.select{|b| b.class <= DependentSearchablesOptionBuilder }
end