class Bricolage::Parameters::IntermediateValues
Unified intermediate param values representation. This class is used for both of *.job file and options.
Attributes
decls[R]
values[R]
variables[R]
Public Class Methods
empty(decls)
click to toggle source
# File lib/bricolage/parameters.rb, line 143 def IntermediateValues.empty(decls) new(decls, {}, Variables.new) end
new(decls, values, vars)
click to toggle source
# File lib/bricolage/parameters.rb, line 147 def initialize(decls, values, vars) @decls = decls # Declarations @values = values # {name => a} @variables = vars # Variables end
union(decls, *vals_list)
click to toggle source
# File lib/bricolage/parameters.rb, line 135 def IntermediateValues.union(decls, *vals_list) result = empty(decls) vals_list.each do |vals| result.update vals end result end
Public Instance Methods
[](name)
click to toggle source
# File lib/bricolage/parameters.rb, line 157 def [](name) @values[name] end
[]=(name, value)
click to toggle source
# File lib/bricolage/parameters.rb, line 161 def []=(name, value) @values[name] = value end
keys()
click to toggle source
# File lib/bricolage/parameters.rb, line 165 def keys @values.keys end
resolve(ctx, vars)
click to toggle source
# File lib/bricolage/parameters.rb, line 177 def resolve(ctx, vars) materialized = materialize(ctx, vars) resolved = resolved_variables(materialized, vars) Parameters.new(@decls, materialized, resolved, ctx) end
update(other)
click to toggle source
# File lib/bricolage/parameters.rb, line 169 def update(other) unless @decls == other.decls raise "[BUG] merging IntermediateValues with different paramdecl: #{self.inspect} - #{other.inspect}" end @values.update other.values @variables.update other.variables end
Private Instance Methods
materialize(ctx, vars)
click to toggle source
# File lib/bricolage/parameters.rb, line 185 def materialize(ctx, vars) h = {} @decls.each do |decl| value = @values[decl.name] # value==nil means "no parameter given" or "no option given". # Note that false is a *valid* value, "falthy" check is not sufficient here. if value.nil? raise ParameterError, "parameter not given: #{decl.name}" if decl.required? h[decl.name] = decl.default_value(ctx, vars) else h[decl.name] = decl.materialize(value, ctx, vars) end end h end
resolved_variables(materialized, base_vars)
click to toggle source
# File lib/bricolage/parameters.rb, line 201 def resolved_variables(materialized, base_vars) Variables.define {|vars| materialized.each do |name, value| decl = @decls[name] next unless decl.publish? next if value.nil? decl.variables(value).each do |var| vars.add var end end vars.update @variables }.resolve_with(base_vars) end