Sha256: a92f2de9c11c91c05c1bf62ed87abd2056ad36a07455f0d2b880fc10667aaf4d

Contents?: true

Size: 1.21 KB

Versions: 5

Compression:

Stored size: 1.21 KB

Contents

require 'singleton'

class Configatron
  include Singleton
  
  alias_method :send!, :send
  
  def initialize # :nodoc:
    @_namespace = [:default]
    reset!
  end
  
  # Forwards the method call onto the 'namespaced' Configatron::Store
  def method_missing(sym, *args)
    @_store[@_namespace.last].send(sym, *args)
  end
  
  # Removes ALL configuration parameters
  def reset!
    @_store = {:default => Configatron::Store.new}
  end
  
  # Allows for the temporary overriding of parameters in a block.
  # Takes an optional Hash of parameters that will be applied before
  # the block gets called. At the end of the block, the temporary
  # settings are deleted and the original settings are reinstated.
  def temp(options = nil)
    begin
      temp_start(options)
      yield
    rescue Exception => e
      raise e
    ensure
      temp_end
    end
  end
  
  def temp_start(options = nil)
    n_space = rand
    @_store[n_space] = @_store[@_namespace.last].deep_clone
    @_namespace << n_space
    if options
      self.method_missing(:configure_from_hash, options)
    end
  end
  
  def temp_end
    @_store.delete(@_namespace.pop)
  end
  
  undef :inspect # :nodoc:
  undef :nil? # :nodoc:
  undef :test # :nodoc:
  
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
markbates-configatron-2.3.2.20090731133933 lib/configatron/configatron.rb
markbates-configatron-2.3.2.20090731134515 lib/configatron/configatron.rb
configatron-2.3.1 lib/configatron/configatron.rb
configatron-2.3.2 lib/configatron/configatron.rb
configatron-2.3.0 lib/configatron/configatron.rb