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