Class: Puppet::Pops::Lookup::Invocation

Inherits:
Object
  • Object
show all
Defined in:
lib/puppet/pops/lookup/invocation.rb

Overview

API:

  • public

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(scope, override_values = {}, default_values = {}, explainer = nil) ⇒ Invocation

Creates a context object for a lookup invocation. The object contains the current scope, overrides, and default values and may optionally contain an ExplanationAcceptor instance that will receive book-keeping information about the progress of the lookup.

If the explain argument is a boolean, then false means that no explanation is needed and true means that the default explanation acceptor should be used. The explain argument may also be an instance of the ExplanationAcceptor class.

Parameters:

  • The scope to use for the lookup

  • (defaults to: {})

    A map to use as override. Values found here are returned immediately (no merge)

  • (defaults to: {})

    A map to use as the last resort (but before default)

  • (defaults to: nil)

    An boolean true to use the default explanation acceptor or an explainer instance that will receive information about the lookup

API:

  • public



18
19
20
21
22
23
24
25
26
27
# File 'lib/puppet/pops/lookup/invocation.rb', line 18

def initialize(scope, override_values = {}, default_values = {}, explainer = nil)
  @name_stack = []
  @scope = scope
  @override_values = override_values
  @default_values = default_values
  unless explainer.is_a?(Explainer)
    explainer = explainer == true ? Explainer.new : nil
  end
  @explainer = explainer
end

Instance Attribute Details

#default_valuesObject (readonly)

API:

  • public



3
4
5
# File 'lib/puppet/pops/lookup/invocation.rb', line 3

def default_values
  @default_values
end

#explainerObject (readonly)

API:

  • public



3
4
5
# File 'lib/puppet/pops/lookup/invocation.rb', line 3

def explainer
  @explainer
end

#module_nameObject

API:

  • public



4
5
6
# File 'lib/puppet/pops/lookup/invocation.rb', line 4

def module_name
  @module_name
end

#override_valuesObject (readonly)

API:

  • public



3
4
5
# File 'lib/puppet/pops/lookup/invocation.rb', line 3

def override_values
  @override_values
end

#scopeObject (readonly)

API:

  • public



3
4
5
# File 'lib/puppet/pops/lookup/invocation.rb', line 3

def scope
  @scope
end

#top_keyObject

API:

  • public



4
5
6
# File 'lib/puppet/pops/lookup/invocation.rb', line 4

def top_key
  @top_key
end

Instance Method Details

#check(name) ⇒ Object

API:

  • public



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/puppet/pops/lookup/invocation.rb', line 29

def check(name)
  if @name_stack.include?(name)
    raise Puppet::DataBinding::RecursiveLookupError, "Recursive lookup detected in [#{@name_stack.join(', ')}]"
  end
  return unless block_given?

  @name_stack.push(name)
  begin
    yield
  rescue Puppet::DataBinding::LookupError
    raise
  rescue Puppet::Error => detail
    raise Puppet::DataBinding::LookupError.new(detail.message, detail)
  ensure
    @name_stack.pop
  end
end

#explain_options?Boolean

Returns:

API:

  • public



75
76
77
# File 'lib/puppet/pops/lookup/invocation.rb', line 75

def explain_options?
  @explainer.nil? ? false : @explainer.explain_options?
end

#only_explain_options?Boolean

Returns:

API:

  • public



71
72
73
# File 'lib/puppet/pops/lookup/invocation.rb', line 71

def only_explain_options?
  @explainer.nil? ? false : @explainer.only_explain_options?
end

#report_found(key, value) ⇒ Object

API:

  • public



89
90
91
92
# File 'lib/puppet/pops/lookup/invocation.rb', line 89

def report_found(key, value)
  @explainer.accept_found(key, value) unless @explainer.nil?
  value
end

#report_found_in_defaults(key, value) ⇒ Object

API:

  • public



84
85
86
87
# File 'lib/puppet/pops/lookup/invocation.rb', line 84

def report_found_in_defaults(key, value)
  @explainer.accept_found_in_defaults(key, value) unless @explainer.nil?
  value
end

#report_found_in_overrides(key, value) ⇒ Object

API:

  • public



79
80
81
82
# File 'lib/puppet/pops/lookup/invocation.rb', line 79

def report_found_in_overrides(key, value)
  @explainer.accept_found_in_overrides(key, value) unless @explainer.nil?
  value
end

#report_merge_source(merge_source) ⇒ Object

API:

  • public



94
95
96
# File 'lib/puppet/pops/lookup/invocation.rb', line 94

def report_merge_source(merge_source)
  @explainer.accept_merge_source(merge_source) unless @explainer.nil?
end

#report_module_not_foundObject

API:

  • public



114
115
116
# File 'lib/puppet/pops/lookup/invocation.rb', line 114

def report_module_not_found
  @explainer.accept_module_not_found unless @explainer.nil?
end

#report_not_found(key) ⇒ Object

API:

  • public



106
107
108
# File 'lib/puppet/pops/lookup/invocation.rb', line 106

def report_not_found(key)
  @explainer.accept_not_found(key) unless @explainer.nil?
end

#report_path_not_foundObject

API:

  • public



110
111
112
# File 'lib/puppet/pops/lookup/invocation.rb', line 110

def report_path_not_found
  @explainer.accept_path_not_found unless @explainer.nil?
end

#report_result(value) ⇒ Object

Report the result of a merge or fully resolved interpolated string

Parameters:

  • The result to report

Returns:

  • the given value

API:

  • public



101
102
103
104
# File 'lib/puppet/pops/lookup/invocation.rb', line 101

def report_result(value)
  @explainer.accept_result(value) unless @explainer.nil?
  value
end

#with(qualifier_type, qualifier) ⇒ Object

The qualifier_type can be one of: :global - qualifier is the data binding terminus name :data_provider - qualifier a DataProvider instance :path - qualifier is a ResolvedPath instance :merge - qualifier is a MergeStrategy instance :module - qualifier is the name of a module :interpolation - qualifier is the unresolved interpolation expression :meta - qualifier is the module name :data - qualifier is the key

Parameters:

  • A branch, a provider, or a path

API:

  • public



58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/puppet/pops/lookup/invocation.rb', line 58

def with(qualifier_type, qualifier)
  if @explainer.nil?
    yield
  else
    @explainer.push(qualifier_type, qualifier)
    begin
      yield
    ensure
      @explainer.pop
    end
  end
end