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