Sha256: 73494f4e5bc7eac37f3080b707b0c40fb68e921ce9ea4b97c45902fe2f490265

Contents?: true

Size: 1.74 KB

Versions: 4

Compression:

Stored size: 1.74 KB

Contents

require "chamber"

module PushyDaemon
  class ConfigMissingParameter    < StandardError; end
  class ConfigParseError          < StandardError; end

  class Conf
    extend Chamber

    class << self
      attr_reader :name
      attr_reader :spec
      attr_reader :files
      attr_reader :version
      attr_reader :env
    end

    def self.prepare args = {}
      # Context parameters
      fail PushyDaemon::ConfigMissingParameter, "missing root" unless (@root = args[:root])
      fail PushyDaemon::ConfigMissingParameter, "missing env"  unless (@env = args[:env])

      # Gemspec parameter
      gemspec_path = "#{args[:root]}/#{args[:gemspec]}.gemspec"
      fail PushyDaemon::ConfigMissingParameter, "missing gemspec" unless args[:gemspec]
      fail PushyDaemon::ConfigMissingParameter, "gemspec file not found: #{gemspec_path}" unless File.exist?(gemspec_path)

      # Load Gemspec
      @spec     = Gem::Specification::load gemspec_path
      @name     = @spec.name
      @version  = @spec.version
      fail PushyDaemon::ConfigMissingParameter, "missing name" unless @name

      # Init Chamber (defaults, etc, cmdline)
      @files = ["#{args[:root]}/defaults.yml"]
      @files << File.expand_path("/etc/#{@name}.yml")
      @files << args[:config].to_s if args[:config]

      # Load configuration files
      load files: @files, namespaces: { environment: @env }

      # Try to access any key to force parsing of the files
      self[:dummy]

      # Override some values
      self[:log] = args[:log].to_s if args[:log]

    rescue Psych::SyntaxError => e
      fail PushyDaemon::ConfigParseError, e.message

    rescue Exception => e
      fail PushyDaemon::ConfigParseError, e.message

    end

    def self.dump
      self.to_hash.to_yaml
    end

  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
pushyd-0.3.4 lib/pushyd/conf.rb
pushyd-0.3.3 lib/pushyd/conf.rb
pushyd-0.3.2 lib/pushyd/conf.rb
pushyd-0.3.1 lib/pushyd/conf.rb