class FigFig::ConfigurationContainer

The class that encapsulates the current configuration definition and parameter values

Attributes

after_validation_callbacks[RW]
configuring[RW]
parameters[RW]
readied[RW]
validated[RW]
validating[RW]

Public Class Methods

new() click to toggle source
# File lib/fig_fig.rb, line 50
def initialize
  @configuring = false
  @validating = false
end

Public Instance Methods

after_validation(&blk) click to toggle source
# File lib/fig_fig.rb, line 89
def after_validation(&blk)
  @after_validation_callbacks ||= []
  @after_validation_callbacks << blk
end
locked?(parameter) click to toggle source
# File lib/fig_fig.rb, line 108
def locked?(parameter)
  lock_option = parameter[:options].fetch(:lock, nil)
  case lock_option
  when nil
    false
  when :on_set
    parameter[:set]
  when :on_validation
    validated
  when :on_ready
    readied
  else
    raise InvalidLockOptionError
  end
end
method_missing(method_name, *args, &blk) click to toggle source
Calls superclass method
# File lib/fig_fig.rb, line 94
def method_missing(method_name, *args, &blk)
  method_name_str = method_name.to_s
  return super unless _dynamically_exposed_methods.include? method_name_str
  if _dynamically_exposed_readers.include? method_name_str
    _ghost_reader method_name_str, *args, &blk
  elsif _dynamically_exposed_writers.include? method_name_str
    _ghost_writer method_name_str, *args, &blk
  end
end
parameter(name, options = {}) click to toggle source
# File lib/fig_fig.rb, line 55
def parameter(name, options = {})
  @parameters ||= []
  raise DuplicateParameterDefinitionError if parameters.any? { |p| p.keys.first == name }
  parameters << { name: name.to_s, options: options, value: nil, set: false }
end
ready() click to toggle source
# File lib/fig_fig.rb, line 80
def ready
  valid?
  @readied = true
end
respond_to_missing?(method_name, _include_private = false) click to toggle source
Calls superclass method
# File lib/fig_fig.rb, line 104
def respond_to_missing?(method_name, _include_private = false)
  _dynamically_exposed_methods.include?(method_name.to_s) || super
end
valid?() click to toggle source
# File lib/fig_fig.rb, line 61
def valid?
  @validating = true
  _missing_configuration if _invalid_parameters.any?
  # Set validated to true to block changes to parameters with on_validation locks
  # including those in after_validation callbacks
  @validated = true
  Array(@after_validation_callbacks).each do |callback|
    callback.call self
  end
  # Below line is the final_validation lifecycle event
  _missing_configuration if _invalid_parameters.any?
  @validating = false
  @validated
end

Private Instance Methods

_dynamically_exposed_methods() click to toggle source
# File lib/fig_fig.rb, line 143
def _dynamically_exposed_methods
  _dynamically_exposed_readers | _dynamically_exposed_writers
end
_dynamically_exposed_readers() click to toggle source
# File lib/fig_fig.rb, line 147
def _dynamically_exposed_readers
  (readied || configuring || validating) ? parameters.map { |p| p[:name] } : []
end
_dynamically_exposed_writers() click to toggle source
# File lib/fig_fig.rb, line 151
def _dynamically_exposed_writers
  parameters.map { |p| "#{p[:name]}=" }
end
_ghost_reader(method_name_str, *_args) click to toggle source
# File lib/fig_fig.rb, line 126
def _ghost_reader(method_name_str, *_args)
  parameters.detect { |p| p[:name] == method_name_str }[:value]
end
_ghost_writer(method_name_str, *args) click to toggle source
# File lib/fig_fig.rb, line 130
def _ghost_writer(method_name_str, *args)
  parameter = parameters.detect { |p| "#{p[:name]}=" == method_name_str }
  raise CannotModifyLockedParameterError if locked? parameter
  parameter[:value] = args.first
  parameter[:set] = true
  parameter[:value]
end
_invalid_parameter_names() click to toggle source
# File lib/fig_fig.rb, line 161
def _invalid_parameter_names
  _invalid_parameters.map { |p| p[:name] }.join(",")
end
_invalid_parameters() click to toggle source
# File lib/fig_fig.rb, line 155
def _invalid_parameters
  parameters.
    select { |p| p[:options].fetch(:required, false) }.
    select { |p| send(p[:name]).nil? }
end
_missing_configuration() click to toggle source
# File lib/fig_fig.rb, line 138
def _missing_configuration
  raise MissingConfigurationError,
        "All required configurations have not been set. Missing configurations: #{_invalid_parameter_names}"
end