Sha256: 761c5f992eb715fe62d2da2357e570756bfc78797904d26687fb7b62f1e3dd0e

Contents?: true

Size: 1.97 KB

Versions: 2

Compression:

Stored size: 1.97 KB

Contents

require 'yaml'

module SlackMessaging

  module PrivateAttrAccessor
    def private_attr_accessor(*names)
      private
      attr_accessor *names
    end
  end

  class DefaultPaths
    class << self
      def config
        File.join(self.home,'.slack_messaging.yml')
      end

      def home
        ENV['HOME'] ? ENV['HOME'] : "."
      end
    end
  end

  class Config

    CONFIG_DEFAULTS = {}

    class << self
      extend PrivateAttrAccessor
      private_attr_accessor :config_data

      def config
        CONFIG_DEFAULTS.merge data
      end

      def load(path)
        load_config(path)
        config
      end

      def set_config_options(opts = {})
        data.merge! opts
        config
      end

      def data
        self.config_data ||= {}
      end
      private :data

      def default_value(key)
        CONFIG_DEFAULTS[key.to_sym]
      end
      private :default_value

      def method_missing(method, args=false)
        return data[method] if data[method]
        return default_value(method) if default_value(method)
        nil
      end
      private :method_missing

      def load_config(file)
        raise MissingConfig, "Missing configuration file: #{file}" unless File.exist?(file)
        self.config_data = symbolize_keys(YAML.load_file(file)) rescue {}
      end
      private :load_config

      # We want all ouf our YAML loaded keys to be symbols
      # taken from http://devblog.avdi.org/2009/07/14/recursively-symbolize-keys/
      def symbolize_keys(hash)
        hash.inject({}){|result, (key, value)|
          new_key = case key
                      when String then key.to_sym
                      else key
                    end
          new_value = case value
                        when Hash then symbolize_keys(value)
                        else value
                      end
          result[new_key] = new_value
          result
        }
      end
      private :symbolize_keys

    end

    MissingConfig = Class.new(StandardError)
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
slack_messaging-1.0.1 lib/slack_messaging/config.rb
slack_messaging-1.0.0 lib/slack_messaging/config.rb