Sha256: f814b2ff65e7c3d6d564752bbfce8a6efeb8d4664aaac152bea42a52170474b9

Contents?: true

Size: 1.97 KB

Versions: 1

Compression:

Stored size: 1.97 KB

Contents

module AppConfig
  extend AppConfig::Processor

  FORMATS = ['string', 'array', 'hash', 'boolean']
  @@options = {}
  @@records = {}
  
  # Configure app config
  def self.configure(opts={})
    @@options[:model]   = opts[:model]  || Setting
    @@options[:key]     = opts[:key]    || 'keyname'
    @@options[:value]   = opts[:value]  || 'value'
    @@options[:format]  = opts[:format] || 'value_format'
  end
  
  # Load and process application settings
  def self.load
    @@records = fetch
  end
  
  # Delete all settings
  def self.flush
    @@records.clear
  end
  
  # Safe method to reload new settings
  def self.reload
    records = fetch rescue nil
    @@records = records || {}
  end
  
  # Manually set (or add) a key
  def self.set_key(keyname, value, format='string')
    raise InvalidKeyName, "Invalid key name: #{keyname}" if self.respond_to?(keyname)
    @@records[keyname] = process(value, format)
  end
  
  # Returns all configuration keys
  def self.keys
    @@records.keys
  end
  
  # Returns true if there are no settings available
  def self.empty?
    @@records.empty?
  end
  
  # Get configuration option
  def self.[](key)
    @@records[key.to_s]
  end
  
  # Get configuration option by attribute
  def self.method_missing(method, *args)
    @@records[method.to_s]
  end
  
  # Returns true if configuration key exists
  def self.exist?(key)
    @@records.key?(key)
  end
  
  protected
  
  # Fetch data from model
  def self.fetch
    raise InvalidSource, 'Model is not defined!' if @@options[:model].nil?
    raise InvalidSource, 'Model was not found!' unless @@options[:model].superclass == ActiveRecord::Base
    
    records = {}
    
    begin
      @@options[:model].send(:all).map do |c|
        records[c.send(@@options[:key].to_sym)] = process(
          c.send(@@options[:value].to_sym),
          c.send(@@options[:format].to_sym)
        )
      end
      records
    rescue ActiveRecord::StatementInvalid => ex
      raise InvalidSource, ex.message
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
app-config-0.1.0 lib/app-config/app-config.rb