Sha256: 7599bb5b9bb304d6f99109b8aa161a4473d015c9cb6978aaadb7bb8dbd4094e3

Contents?: true

Size: 1.32 KB

Versions: 10

Compression:

Stored size: 1.32 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

    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

10 entries across 10 versions & 1 rubygems

Version Path
waistband-0.7.4 lib/waistband/configuration.rb
waistband-0.7.3 lib/waistband/configuration.rb
waistband-0.7.1 lib/waistband/configuration.rb
waistband-0.7.0 lib/waistband/configuration.rb
waistband-0.4.2 lib/waistband/configuration.rb
waistband-0.4.1 lib/waistband/configuration.rb
waistband-0.4.0 lib/waistband/configuration.rb
waistband-0.3.2 lib/waistband/configuration.rb
waistband-0.3.1 lib/waistband/configuration.rb
waistband-0.3.0 lib/waistband/configuration.rb