class Statistrano::Config
Attributes
options[R]
tasks[R]
validators[R]
Public Class Methods
new(options: nil, tasks: nil, validators: nil)
click to toggle source
initalize with the potential for seed options this is required so that when config'd classes are extended we can pass that configuration along
# File lib/statistrano/config.rb, line 15 def initialize options: nil, tasks: nil, validators: nil @options = options.nil? ? {} : options.clone @tasks = tasks.nil? ? {} : tasks.clone @validators = validators.nil? ? {} : validators.clone @options.each do |key,val| define_option_accessor key.to_sym end @validators.each do |key,val| define_validator key.to_sym end end
Private Instance Methods
define_option_accessor(name)
click to toggle source
# File lib/statistrano/config.rb, line 44 def define_option_accessor name define_singleton_method(name) do |*args, &block| if block if args.first == :call @options[name] = { call: block } else @options[name] = block end return end if args.length == 1 val = args[0] if @validators.has_key?(name) val = val.call if val.respond_to?(:call) send "validate_#{name}", val end @options[name] = val elsif args.empty? if @options[name].respond_to? :fetch opt = @options[name].fetch( :call, -> { @options[name] } ).call else opt = @options[name] end opt else raise ArgumentError, "wrong number of arguments (#{args.length} for 0..1)" end end define_singleton_method("#{name}=") { |arg| @options[name] = arg } end
define_validator(name)
click to toggle source
# File lib/statistrano/config.rb, line 31 def define_validator name define_singleton_method(:"validator_for_#{name}") do |proc, message| @validators[name] = { validator: proc, message: message } end define_singleton_method(:"validate_#{name}") do |arg| if @validators.has_key?(name) && !@validators[name][:validator].call(arg) raise ValidationError, (@validators[name][:message] || "configuration option for '#{name}' failed it's validation") end end end