Class: Facter::Util::Resolution
- Inherits:
-
Object
- Object
- Facter::Util::Resolution
- Extended by:
- Core::Execution
- Defined in:
- lib/custom_facts/util/resolution.rb
Instance Attribute Summary collapse
- #code ⇒ Object private
- #fact ⇒ LegacyFacter::Util::Fact readonly private
-
#name ⇒ String
The name of this resolution.
- #value ⇒ Object writeonly
Attributes included from LegacyFacter::Core::Resolvable
Instance Method Summary collapse
-
#evaluate(&block) ⇒ void
Evaluate the given block in the context of this resolution.
-
#initialize(name, fact) ⇒ void
constructor
private
Create a new resolution mechanism.
- #options(options) ⇒ Object
- #resolution_type ⇒ Object
-
#setcode(string = nil, &block) ⇒ void
Sets the code block or external program that will be evaluated to get the value of the fact.
Methods included from Core::Execution
absolute_path?, exec, execute, expand_command, impl, search_paths, which, with_env
Methods included from LegacyFacter::Core::Suitable
#confine, #has_weight, #suitable?, #weight
Methods included from LegacyFacter::Core::Resolvable
#flush, #limit, #on_flush, #value
Constructor Details
#initialize(name, fact) ⇒ 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.
Create a new resolution mechanism.
51 52 53 54 55 56 57 58 |
# File 'lib/custom_facts/util/resolution.rb', line 51 def initialize(name, fact) @name = name @fact = fact @confines = [] @value = nil @timeout = 0 @weight = nil end |
Instance Attribute Details
#code ⇒ 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.
16 17 18 |
# File 'lib/custom_facts/util/resolution.rb', line 16 def code @code end |
#fact ⇒ LegacyFacter::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.
43 44 45 |
# File 'lib/custom_facts/util/resolution.rb', line 43 def fact @fact end |
#name ⇒ String
The name of this resolution. The resolution name should be unique with respect to the given fact.
38 39 40 |
# File 'lib/custom_facts/util/resolution.rb', line 38 def name @name end |
#value=(value) ⇒ Object (writeonly)
17 18 19 |
# File 'lib/custom_facts/util/resolution.rb', line 17 def value=(value) @value = value end |
Instance Method Details
#evaluate(&block) ⇒ void
This method returns an undefined value.
Evaluate the given block in the context of this resolution. If a block has already been evaluated emit a warning to that effect.
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/custom_facts/util/resolution.rb', line 68 def evaluate(&block) if @last_evaluated msg = "Already evaluated #{@name}" msg << " at #{@last_evaluated}" if msg.is_a? String msg << ', reevaluating anyways' LegacyFacter.warn msg end instance_eval(&block) # Ruby 1.9+ provides the source location of procs which can provide useful # debugging information if a resolution is being evaluated twice. Since 1.8 # doesn't support this we opportunistically provide this information. @last_evaluated = if block.respond_to? :source_location block.source_location.join(':') else true end end |
#options(options) ⇒ Object
88 89 90 91 92 93 94 95 96 |
# File 'lib/custom_facts/util/resolution.rb', line 88 def () = %i[name value timeout weight fact_type] .each do |option_name| instance_variable_set("@#{option_name}", .delete(option_name)) if .key?(option_name) end raise ArgumentError, "Invalid resolution options #{.keys.inspect}" unless .keys.empty? end |
#resolution_type ⇒ Object
60 61 62 |
# File 'lib/custom_facts/util/resolution.rb', line 60 def resolution_type :simple end |
#setcode(string) ⇒ void #setcode(&block) ⇒ void
This method returns an undefined value.
Sets the code block or external program that will be evaluated to get the value of the fact.
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/custom_facts/util/resolution.rb', line 115 def setcode(string = nil, &block) if string @code = proc do output = LegacyFacter::Core::Execution.execute(string, on_fail: nil) if output.nil? || output.empty? nil else output end end elsif block_given? @code = block else raise ArgumentError, 'You must pass either code or a block' end end |