class Declarative::Variables

Implements the pattern of maintaining a hash of key/values (usually “defaults”) that are mutated several times by user and library code (override defaults).

The Variables instance then represents the configuration data to be processed by the using library (e.g. Representable or Trailblazer).

Public Class Methods

Append(appended_array) click to toggle source
# File lib/declarative/variables.rb, line 32
def self.Append(appended_array)
  Variables::Proc.new do |original|
    (original || []) + appended_array
  end
end
Merge(merged_hash) click to toggle source
# File lib/declarative/variables.rb, line 26
def self.Merge(merged_hash)
  Variables::Proc.new do |original|
    (original || {}).merge( merged_hash )
  end
end
merge(defaults, overrides) click to toggle source

@return Hash hash where `overrides` is merged onto `defaults` respecting Merge, Append etc.

# File lib/declarative/variables.rb, line 12
def self.merge(defaults, overrides)
  defaults = defaults.merge({}) # todo: use our DeepDup. # TODO: or how could we provide immutability?

  overrides.each do |k, v|
    if v.is_a?(Variables::Proc)
      defaults[k] = v.( defaults[k] )
    else
      defaults[k] = v
    end
  end

  defaults
end