Class: ForemanRemoteExecution::Renderer::Scope::Input

Inherits:
Foreman::Renderer::Scope::Template
  • Object
show all
Includes:
Foreman::Renderer::Scope::Macros::HostTemplate
Defined in:
app/lib/foreman_remote_execution/renderer/scope/input.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#current_userObject (readonly)

Returns the value of attribute current_user.



7
8
9
# File 'app/lib/foreman_remote_execution/renderer/scope/input.rb', line 7

def current_user
  @current_user
end

#hostObject (readonly)

Returns the value of attribute host.



7
8
9
# File 'app/lib/foreman_remote_execution/renderer/scope/input.rb', line 7

def host
  @host
end

#input_template_instanceObject (readonly)

Returns the value of attribute input_template_instance.



7
8
9
# File 'app/lib/foreman_remote_execution/renderer/scope/input.rb', line 7

def input_template_instance
  @input_template_instance
end

#invocationObject (readonly)

Returns the value of attribute invocation.



7
8
9
# File 'app/lib/foreman_remote_execution/renderer/scope/input.rb', line 7

def invocation
  @invocation
end

#templateObject (readonly)

Returns the value of attribute template.



7
8
9
# File 'app/lib/foreman_remote_execution/renderer/scope/input.rb', line 7

def template
  @template
end

Instance Method Details

#allowed_helpersObject



73
74
75
# File 'app/lib/foreman_remote_execution/renderer/scope/input.rb', line 73

def allowed_helpers
  super + [:input, :render_template, :preview?, :render_error, :current_user]
end

#cached(key, &block) ⇒ Object



18
19
20
21
22
23
24
# File 'app/lib/foreman_remote_execution/renderer/scope/input.rb', line 18

def cached(key, &block)
  return yield if preview?

  cache_key = "#{JobInvocation::CACHE_PREFIX}_#{invocation.job_invocation_id}_#{key}"
  Rails.logger.debug "cache hit for #{cache_key}" if Rails.cache.exist?(cache_key)
  Rails.cache.fetch(cache_key, &block)
end

#foreign_input_set_values(target_template, overrides = {}) ⇒ Object



51
52
53
54
55
56
57
58
59
60
# File 'app/lib/foreman_remote_execution/renderer/scope/input.rb', line 51

def foreign_input_set_values(target_template, overrides = {})
  input_set = @template.foreign_input_sets.find_by(:target_template_id => target_template)
  return overrides if input_set.nil?

  inputs_to_generate = input_set.inputs.map { |i| i.name.to_s } - overrides.keys.map(&:to_s)
  input_values = inputs_to_generate.inject(HashWithIndifferentAccess.new) do |hash, input_name|
    hash.merge(input_name.to_s => input(input_name))
  end
  input_values.merge(overrides).with_indifferent_access
end

#input(name) ⇒ Object



62
63
64
65
66
67
68
69
70
71
# File 'app/lib/foreman_remote_execution/renderer/scope/input.rb', line 62

def input(name)
  return template_input_values[name.to_s] if template_input_values.key?(name.to_s)
  input = find_by_name(template.template_inputs_with_foreign, name) # rubocop:disable Rails/DynamicFindBy
  if input
    @preview ? input.preview(self) : input.value(self)
  else
    error_message = _('input macro with name \'%s\' used, but no input with such name defined for this template') % name
    raise UndefinedInput, "Rendering failed, no input with name #{name} for input macro found"
  end
end

#preview?Boolean

Returns:

  • (Boolean)


14
15
16
# File 'app/lib/foreman_remote_execution/renderer/scope/input.rb', line 14

def preview?
  !!@preview
end

#render_error(message) ⇒ Object



10
11
12
# File 'app/lib/foreman_remote_execution/renderer/scope/input.rb', line 10

def render_error(message)
  raise ::InputTemplateRenderer::RenderError.new(message)
end

#render_template(template_name, input_values = {}, options = {}) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/lib/foreman_remote_execution/renderer/scope/input.rb', line 26

def render_template(template_name, input_values = {}, options = {})
  options.assert_valid_keys(:with_foreign_input_set)
  with_foreign_input_set = options.fetch(:with_foreign_input_set, true)
  template = @template.class.authorized("view_#{@template.class.to_s.underscore.pluralize}").find_by(name: template_name)
  unless template
    self.error_message = _('included template \'%s\' not found') % template_name
    raise error_message
  end

  default_values = template.default_input_values(input_values.keys)
  if with_foreign_input_set
    input_values = foreign_input_set_values(template, input_values)
  end
  input_values = default_values.merge(input_values).with_indifferent_access

  included_renderer = InputTemplateRenderer.new(template, host, invocation, input_values, @preview, @templates_stack)
  out = included_renderer.render
  if included_renderer.error_message
    @input_template_instance.error_message = included_renderer.error_message
    raise error_message
  else
    out
  end
end