Class: Puppet::Pops::Evaluator::Collectors::AbstractCollector

Inherits:
Object
  • Object
show all
Defined in:
lib/puppet/pops/evaluator/collectors/abstract_collector.rb

Overview

API:

  • public

Constant Summary collapse

EMPTY_RESOURCES =

An empty array which will be returned by the unresolved_resources method unless we have a FixSetCollector

API:

  • public

[].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(scope, overrides = nil) ⇒ AbstractCollector

Initialized the instance variables needed by the base collector class to perform evaluation

Parameters:

  • (defaults to: nil)

    a hash of optional overrides

API:

  • public



25
26
27
28
29
30
31
32
33
34
# File 'lib/puppet/pops/evaluator/collectors/abstract_collector.rb', line 25

def initialize(scope, overrides = nil)
  @collected = {}
  @scope = scope

  if !(overrides.nil? || overrides[:parameters])
    raise ArgumentError, _("Exported resource try to override without parameters")
  end

  @overrides = overrides
end

Instance Attribute Details

#collectedObject (readonly)

The set of collected resources

API:

  • public



8
9
10
# File 'lib/puppet/pops/evaluator/collectors/abstract_collector.rb', line 8

def collected
  @collected
end

#overridesObject (readonly)

The collector's hash of overrides => params

API:

  • public



5
6
7
# File 'lib/puppet/pops/evaluator/collectors/abstract_collector.rb', line 5

def overrides
  @overrides
end

#scopeObject (readonly)

API:

  • public



2
3
4
# File 'lib/puppet/pops/evaluator/collectors/abstract_collector.rb', line 2

def scope
  @scope
end

Instance Method Details

#collectArray

Collect the specified resources. The way this is done depends on which type of collector we are dealing with. This method is implemented differently in each of the three child classes

Returns:

  • the collected resources

Raises:

API:

  • public



83
84
85
# File 'lib/puppet/pops/evaluator/collectors/abstract_collector.rb', line 83

def collect
  raise NotImplementedError, "This method must be implemented by the child class"
end

#evaluateArray

Collects resources and marks collected objects as non-virtual. Also handles overrides.

Returns:

  • the resources we have collected

API:

  • public



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/puppet/pops/evaluator/collectors/abstract_collector.rb', line 40

def evaluate
  objects = collect.each do |obj|
    obj.virtual = false
  end

  return false if objects.empty?

  if @overrides and !objects.empty?
    overrides[:source].override = true

    objects.each do |res|
      unless @collected.include?(res.ref)
        t = res.type
        t = Puppet::Pops::Evaluator::Runtime3ResourceSupport.find_resource_type(scope, t)
        newres = Puppet::Parser::Resource.new(t, res.title, @overrides)
        scope.compiler.add_override(newres)
      end
    end
  end

  objects.reject! { |o| @collected.include?(o.ref) }

  return false if objects.empty?

  objects.reduce(@collected) { |c,o| c[o.ref]=o; c }

  objects
end

#unresolved_resourcesArray

This should only return an empty array unless we have an FixedSetCollector, in which case it will return the resources that have not yet been realized

Returns:

  • the resources that have not been resolved

API:

  • public



74
75
76
# File 'lib/puppet/pops/evaluator/collectors/abstract_collector.rb', line 74

def unresolved_resources
  EMPTY_RESOURCES
end