class Gemer::Configurator
Public Class Methods
new(target)
click to toggle source
# File lib/gemer/configurator.rb, line 3 def initialize(target) @target = target end
Public Instance Methods
attr(name, default = nil, **opts)
click to toggle source
# File lib/gemer/configurator.rb, line 13 def attr(name, default = nil, **opts) define_reader name define_writer name set_default name, default set_options name, opts end
define_configuration_error()
click to toggle source
# File lib/gemer/configurator.rb, line 7 def define_configuration_error @target.class_eval <<-DEF, __FILE__, __LINE__ + 1 class ConfigError < StandardError; end DEF end
define_reader(name)
click to toggle source
# File lib/gemer/configurator.rb, line 63 def define_reader(name) @target.class_eval <<-DEF, __FILE__, __LINE__ + 1 class << self attr_reader :#{name} end DEF end
define_writer(name)
click to toggle source
# File lib/gemer/configurator.rb, line 71 def define_writer(name) @target.class_eval <<-DEF, __FILE__, __LINE__ + 1 class << self attr_writer :#{name} end DEF end
interpolated_value(value)
click to toggle source
# File lib/gemer/configurator.rb, line 52 def interpolated_value(value) case value.class.name when 'NilClass' 'nil' when 'String' "'#{value}'" else value end end
read_only(name, value)
click to toggle source
# File lib/gemer/configurator.rb, line 20 def read_only(name, value) define_reader name @target.class_eval do instance_variable_set("@#{name}".to_sym, value) end end
set_default(name, value)
click to toggle source
# File lib/gemer/configurator.rb, line 42 def set_default(name, value) @target.class_eval <<-DEF, __FILE__, __LINE__ + 1 class << self def #{name} @#{name} ||= #{interpolated_value(value)} end end DEF end
set_in(name, values)
click to toggle source
# File lib/gemer/configurator.rb, line 31 def set_in(name, values) @target.class_eval <<-DEF, __FILE__, __LINE__ + 1 class << self def #{name}=(obj) raise 'value for #{@target.name}.#{name} is invalid, must be one of #{values}' unless #{values}.include?(obj) @#{name} = obj end end DEF end
set_options(name, opts = {})
click to toggle source
# File lib/gemer/configurator.rb, line 27 def set_options(name, opts = {}) set_in(name, opts[:in]) if opts[:in] end