Sha256: 4d279d55382466f440080b5a766460fd1678e89c614dee4e2a3eee93df6f932e

Contents?: true

Size: 1.18 KB

Versions: 7

Compression:

Stored size: 1.18 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:
  
end

Version data entries

7 entries across 7 versions & 4 rubygems

Version Path
runcoderun-configatron-2.2.1.1 lib/configatron/configatron.rb
runcoderun-configatron-2.2.1.2 lib/configatron/configatron.rb
sevenwire-configatron-2.2.2 lib/configatron/configatron.rb
configatron-2.2.1 lib/configatron/configatron.rb
configatron-2.2.2 lib/configatron/configatron.rb
mack-0.8.3 lib/gems/configatron-2.2.2/lib/configatron/configatron.rb
mack-0.8.3.1 lib/gems/configatron-2.2.2/lib/configatron/configatron.rb