Sha256: 1cd07ed5cbfd2a7816daa8d351b3ed874c27440b8a0b6ba60cf71c3c301f197e

Contents?: true

Size: 1.82 KB

Versions: 3

Compression:

Stored size: 1.82 KB

Contents

require 'singleton'

module Traquitana
  class Config
    include Singleton
    attr_accessor :filename, :target

    def initialize
      @configs  = {}
      @filename = 'config/traq.yml'
      @target   = nil
      load
    end

    def default
      "#{File.dirname(File.expand_path(__FILE__))}/../config/default.yml"
    end

    def load(file = nil)
      check_configs(file)
      check_target
      check_default_target
    end

    def method_missing(meth)
      @configs[meth.to_s] || ''
    end

    def setup
      STDOUT.puts 'Running setup'

      if File.exist?(self.filename)
        STDERR.puts "The configuration file #{self.filename} already exists."
        return false
      end

      dir = File.dirname(filename)
      Dir.mkdir(dir) if !File.exist?(dir)

      STDOUT.puts "Writing #{filename}"
      File.open(filename, "w") do |file|
        file << File.read(self.default)
      end

      STDOUT.puts "Setup completed!"
      STDOUT.puts "You MUST check the configurations on #{self.filename} before deploying!"
      true
    end

    private

    def check_configs(file)
      begin
        @configs = YAML.load(File.read(file || self.filename), aliases: true)
      rescue => e
        @configs = YAML.load(File.read(file || self.filename)) rescue nil
      end

      STDERR.puts "Configs not found (tried '#{file}' and '#{self.filename}')" if !@configs
      @configs
    end

    def check_target
      return if !@target || !@configs

      if !@configs[@target]
        STDERR.puts "Target #{@target} not found." 
        exit(1)
      end

      @configs = @configs[@target] 
      STDOUT.puts "Loaded #{@target} target."
    end

    def check_default_target
      if !@target && @configs && @configs["default"]
        STDOUT.puts "Loading default target ..."
        @configs = @configs["default"]
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
traquitana-2.0.6 lib/config.rb
traquitana-2.0.5 lib/config.rb
traquitana-2.0.4 lib/config.rb