class Bonfig::BlankConfig

Public Class Methods

new(&block) click to toggle source
# File lib/bonfig.rb, line 3
def initialize(&block)
  @_data = ::Hash.new
  instance_eval(&block)
end

Public Instance Methods

[](key) click to toggle source
# File lib/bonfig.rb, line 21
def [](key)
  @_data[key]
end
config(name, options = {}, &block) click to toggle source
# File lib/bonfig.rb, line 8
def config(name, options = {}, &block)
  name = name.to_sym
  if block
    _nested(name, &block)
  else
    @_data[name] = options[:default]
    define_method("#{name}=") { |value| @_data[name] = value }
    define_method(name) { @_data[name] }
  end

  define_method("#{name}?") { @_data.key?(name) }
end
instance_of?(klass) click to toggle source
# File lib/bonfig.rb, line 32
def instance_of?(klass)
  klass == BlankConfig
end
to_hash() click to toggle source
# File lib/bonfig.rb, line 25
def to_hash
  @_data.reduce({}) do |accum, (k, val)|
    accum[k] = val.instance_of?(BlankConfig) ? val.to_hash : val
    accum
  end
end

Protected Instance Methods

_nested(name, &block) click to toggle source
# File lib/bonfig.rb, line 42
def _nested(name, &block)
  nested = @_data[name] = BlankConfig.new(&block)

  define_method(name) do |&b|
    if b
      b.call(nested)
    else
      @_data[name]
    end
  end

  define_method("#{name}=") do |val|
    if val.is_a?(::Hash)
      nested._update(val)
    else
      fail 'Can\'t assign value to nested config.'
    end
  end
end
_update(data) click to toggle source
# File lib/bonfig.rb, line 38
def _update(data)
  @_data.update(data)
end
define_method(name, &block) click to toggle source
# File lib/bonfig.rb, line 62
def define_method(name, &block)
  name = name.to_sym
  (class << self; self; end).class_eval do
    define_method(name, &block)
  end
end