Sha256: abdd6cbb7f747e093d6e737b413acf9befdc03a5ffdbbc685377c2d6cd3ce351

Contents?: true

Size: 1.41 KB

Versions: 2

Compression:

Stored size: 1.41 KB

Contents

require 'core_ext/hash'

module Fozzie

  # Fozzie configuration allows assignment of global properties
  # that will be used within the Fozzie codebase.
  class Configuration

    attr_accessor :env, :config_path, :host, :port, :appname

    def initialize(args = {})
      merge_and_assign_config(args)

      self
    end
    
    def data_prefix
      s = "%s." % env
      s = appname << ".#{s}" unless appname.nil? || appname.empty?
      s
    end

    private

    # Handle the merging of the given configuaration, and the default config.
    # @return [Hash]
    def merge_and_assign_config(args = {})
      arg = self.class.default_configuration.merge(args.symbolize_keys)
      arg.delete_if {|key, val| !self.respond_to?(key.to_sym) }
      arg.merge!(config_from_yaml(arg))
      arg.each {|a,v| self.send("#{a}=", v) }

      arg
    end

    # Default configuration settings
    # @return [Hash]
    def self.default_configuration
      { 
        :host        => '127.0.0.1', 
        :port        => 8125, 
        :config_path => '', 
        :env         => (ENV['RAILS_ENV'] || 'development'),
        :appname     => ''
      }.dup
    end

    def full_config_path(path)
      File.expand_path('config/fozzie.yml', path)
    end

    def config_from_yaml(args)
      fp = full_config_path(args[:config_path])
      return {} unless File.exists?(fp)
      YAML.load(File.open(fp))[args[:env]].symbolize_keys
    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
fozzie-0.0.2 lib/fozzie/configuration.rb
fozzie-0.0.1 lib/fozzie/configuration.rb