Sha256: 6f328b46ceb9790466373b12d021fd682acd6560d0ab600cc1ebd576b0f9e8a3

Contents?: true

Size: 1.34 KB

Versions: 6

Compression:

Stored size: 1.34 KB

Contents

require 'yaml'
require 'singleton'
require 'active_support/core_ext/hash/indifferent_access'
require 'digest/sha1'

module Waistband
  class Configuration

    include Singleton

    attr_accessor :config_dir
    attr_reader   :env

    def initialize
      @yml_config = {}
      @indexes    = {}
    end

    def setup
      raise "Please define a valid `config_dir` configuration variable!"  unless config_dir
      raise "Couldn't find configuration directory #{config_dir}"         unless File.exist?(config_dir)

      @env        ||= ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
      @yml_config   = YAML.load_file("#{config_dir}/waistband.yml")[@env].with_indifferent_access
    end

    def index(name)
      @indexes[name] ||= YAML.load_file("#{config_dir}/waistband_#{name}.yml")[@env].with_indifferent_access
    end

    def method_missing(method_name, *args, &block)
      return current_server[method_name]  if current_server[method_name]
      return @yml_config[method_name]     if @yml_config[method_name]
      super
    end

    def servers
      @servers ||= @yml_config['servers'].map do |server_name, config|
        config.merge({
          '_id' => Digest::SHA1.hexdigest("#{config['host']}:#{config['port']}")
        })
      end
    end

    private

      def current_server
        servers.sample
      end

    # /private

  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
waistband-0.8.5 lib/waistband/configuration.rb
waistband-0.8.4 lib/waistband/configuration.rb
waistband-0.8.3 lib/waistband/configuration.rb
waistband-0.8.2 lib/waistband/configuration.rb
waistband-0.8.1 lib/waistband/configuration.rb
waistband-0.8.0 lib/waistband/configuration.rb