Sha256: d3de7fceb41f685614c2d943c66680bc0cf23baaa4911fc7747fa2990fb9a1bb

Contents?: true

Size: 1.64 KB

Versions: 7

Compression:

Stored size: 1.64 KB

Contents

require 'singleton'
require 'logger'

class Configatron
  include Singleton

  alias_method :send!, :send
  
  class << self
    
    def log
      unless @logger
        if defined?(::Rails)
          @logger = ::Rails.logger
        end
        @logger = ::Logger.new(STDOUT) if @logger.nil?
      end
      return @logger
    end
    
  end

  def initialize # :nodoc:
    @_namespace = [:default]
    reset!
  end
  
  # Forwards the method call onto the 'namespaced' Configatron::Store
  def method_missing(sym, *args, &block)
    @_store[@_namespace.last].send(sym, *args, &block)
  end

  # respond_to to respond_to
  def respond_to?(method)
    !@_store[@_namespace.last].send(method).nil? || super
  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 @_store[@_namespace.last]
    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

  begin
    undef :inspect # :nodoc:
    undef :nil? # :nodoc:
    undef :test # :nodoc:
  rescue Exception => e
  end


end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
configatron-2.11.0 lib/configatron/configatron.rb
configatron-2.10.0 lib/configatron/configatron.rb
configatron-2.9.1 lib/configatron/configatron.rb
configatron-2.9.0 lib/configatron/configatron.rb
configatron-2.8.4 lib/configatron/configatron.rb
configatron-2.8.3 lib/configatron/configatron.rb
configatron-2.8.2 lib/configatron/configatron.rb