Class: RFacter::Core::Aggregate Private
- Inherits:
-
Object
- Object
- RFacter::Core::Aggregate
- Extended by:
- Forwardable
- Includes:
- Resolvable, Suitable
- Defined in:
- lib/rfacter/core/aggregate.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Aggregates provide a mechanism for facts to be resolved in multiple steps.
Aggregates are evaluated in two parts: generating individual chunks and then aggregating all chunks together. Each chunk is a block of code that generates a value, and may depend on other chunks when it runs. After all chunks have been evaluated they are passed to the aggregate block as ‘Hash<name, result>`. The aggregate block converts the individual chunks into a single value that is returned as the final value of the aggregate.
Defined Under Namespace
Classes: DependencyError
Instance Attribute Summary collapse
- #confines ⇒ Object readonly private
- #deps ⇒ Object readonly private
- #fact ⇒ RFacter::Util::Fact readonly private
- #name ⇒ Object readonly private
Attributes included from Resolvable
Attributes included from Suitable
Instance Method Summary collapse
-
#aggregate {|Hash<Symbol, Object>| ... } ⇒ void
private
Define how all chunks should be combined.
-
#chunk(name, opts = {}) {|*Object| ... } ⇒ void
private
Define a new chunk for the given aggregate.
- #evaluate(&block) ⇒ Object private
-
#initialize(name, fact, config: RFacter::Config.config, **options) ⇒ Aggregate
constructor
private
A new instance of Aggregate.
- #resolution_type ⇒ Object private
- #set_options(options) ⇒ Object private
Methods included from Resolvable
#flush, #limit, #on_flush, #value
Methods included from Suitable
#confine, #has_weight, #suitable?
Constructor Details
#initialize(name, fact, config: RFacter::Config.config, **options) ⇒ Aggregate
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of Aggregate.
48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/rfacter/core/aggregate.rb', line 48 def initialize(name, fact, config: RFacter::Config.config, **) @name = name @fact = fact @config = config @confines = [] @chunks = {} @aggregate = nil @deps = RFacter::Core::DirectedGraph.new end |
Instance Attribute Details
#confines ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
42 43 44 |
# File 'lib/rfacter/core/aggregate.rb', line 42 def confines @confines end |
#deps ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
36 37 38 |
# File 'lib/rfacter/core/aggregate.rb', line 36 def deps @deps end |
#fact ⇒ RFacter::Util::Fact (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
46 47 48 |
# File 'lib/rfacter/core/aggregate.rb', line 46 def fact @fact end |
#name ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
32 33 34 |
# File 'lib/rfacter/core/aggregate.rb', line 32 def name @name end |
Instance Method Details
#aggregate {|Hash<Symbol, Object>| ... } ⇒ void
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method returns an undefined value.
Define how all chunks should be combined
141 142 143 144 145 146 147 |
# File 'lib/rfacter/core/aggregate.rb', line 141 def aggregate(&block) if block_given? @aggregate = block else raise ArgumentError, "#{self.class.name}#aggregate requires a block" end end |
#chunk(name, opts = {}) {|*Object| ... } ⇒ void
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method returns an undefined value.
Define a new chunk for the given aggregate
102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/rfacter/core/aggregate.rb', line 102 def chunk(name, opts = {}, &block) if not block_given? raise ArgumentError, "#{self.class.name}#chunk requires a block" end deps = Array(opts.delete(:require)) if not opts.empty? raise ArgumentError, "Unexpected options passed to #{self.class.name}#chunk: #{opts.keys.inspect}" end @deps[name] = deps @chunks[name] = block end |
#evaluate(&block) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
78 79 80 |
# File 'lib/rfacter/core/aggregate.rb', line 78 def evaluate(&block) instance_eval(&block) end |
#resolution_type ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
149 150 151 |
# File 'lib/rfacter/core/aggregate.rb', line 149 def resolution_type :aggregate end |
#set_options(options) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/rfacter/core/aggregate.rb', line 60 def () if [:name] @name = .delete(:name) end if .has_key?(:timeout) @timeout = .delete(:timeout) end if .has_key?(:weight) @weight = .delete(:weight) end if not .keys.empty? raise ArgumentError, "Invalid aggregate options #{.keys.inspect}" end end |