lib/sc4ry/config.rb in sc4ry-0.1.8 vs lib/sc4ry/config.rb in sc4ry-0.2.0
- old
+ new
@@ -1,53 +1,79 @@
+# Sc4ry module
+# @note namespace
module Sc4ry
+ # Sc4ry::Config module
+ # @note namespace
module Config
+ # Configuration validator for Sc4ry default and circuits configuration
+ # @private
class Validator
- attr_reader :definition
- attr_reader :default
+
+ # accessor on Circuit definition given for validation
+ attr_reader :input
+ # accessor on circuit initial definition from default config or given in construction by from keyword
+ # @note altered by reference to final result mapping with {#validate!}
+ attr_reader :config
def result
- @default
+ @config
end
include Sc4ry::Constants
include Sc4ry::Exceptions
-
+ # Validator constructor
+ # @param [Hash] definition the config hash to merge and validate
+ # @param [Hash] from config hash merged on origin (default : the Sc4ry base config from Constants )
+ # @return [Validator] a new instance of Validator
def initialize(definition: , from: DEFAULT_CONFIG)
- @default = from
- @definition = definition
+ @config = from
+ @input = definition
end
+ # Validation method, alter by reference the config attribut
+ # @raise ConfigError if un unknown key is given in definition to merge.
def validate!
- unknown_keys = @definition.keys.difference @default.keys
+ unknown_keys = @input.keys.difference @config.keys
raise ConfigError::new("Unknown keys in config set : #{unknown_keys.to_s}") unless unknown_keys.empty?
validate_formats
- @default.merge! @definition
+ @config.merge! @input
format_exceptions
end
private
+ # Validation private sub method
+ # @raise ConfigError if proposed values haven't the good format and deeply in array
def validate_formats
- definition.each do |spec,value|
+ @input.each do |spec,value|
raise ConfigError::new("#{spec} value #{DEFAULT_CONFIG_FORMATS[spec][:desc]}") unless DEFAULT_CONFIG_FORMATS[spec][:proc].call(value)
if DEFAULT_CONFIG_FORMATS[spec].include? :list then
value.each do |item|
raise ConfigError::new("#{spec} value must be in #{DEFAULT_CONFIG_FORMATS[spec][:list]}") unless DEFAULT_CONFIG_FORMATS[spec][:list].include? item
end
end
end
end
+ # adapter for exception key in config String to Constant Class Name if need
+ # @note by reference
def format_exceptions
- @default[:exceptions].map! {|item| item = (item.class == String)? Object.const_get(item) : item }
+ @config[:exceptions].map! {|item| item = (item.class == String)? Object.const_get(item) : item }
end
end
+ # Config Data mapper for block yielding methods for configuration
+ # @note work for/with {Sc4ry::Circuits.configure} and {Sc4ry::Circuits.register} when block given
class ConfigMapper
include Sc4ry::Constants
+
+ # config from given definition passed in constructor
attr_reader :config
+ # the mapping constructor from a given definition or the default From Sc4ry config (Constant)
+ # @param [Hash] definition a config hash
+ # @note creating dynamically accessors on config record given in definition
def initialize(definition: DEFAULT_CONFIG)
@config = definition
@config.each do |key,value|
self.define_singleton_method "#{key.to_s}=".to_sym do |val|
key = __method__.to_s.chop.to_sym
\ No newline at end of file