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