Sha256: 2a364cc100e107743ad9769ddb9b123ee4701ef7fafbf2b7869f08a633de1818

Contents?: true

Size: 1.16 KB

Versions: 1

Compression:

Stored size: 1.16 KB

Contents

require "objectify_config/version"
require "yaml"

module ObjectifyConfig

  class << self
    def configuration_files(*files)
      @configurations = files
    end

    def run
      @configurations.flatten.each do |config_file|
        config_klass_name = klass_name_for(config_file)

        temp_class = Class.new do

          singleton_class.class_eval do
            Object.const_set("CONFIG_FILE", config_file)

            def method_missing(key)
              configuration_keys[key.to_sym]
            end

            def configuration_keys
              file_contents = YAML.load_file(CONFIG_FILE)

              file_contents.each_with_object({}) do |(h,k), result| 
                result[h.to_sym] = k 
              end
            end
          end
        end

        Object.const_set(config_klass_name, temp_class)
      end
    end

    def klass_name_for(config_file)
      "#{Pathname.new(config_file).basename.to_s.split('.')[0].camelize}Config"
    end
  end
end

class String 
  def camelize
    self.split('_').map {|w| w.capitalize}.join
  end
end

class Hash
  def method_missing(sym, *)
    fetch(sym) do 
      fetch(sym.to_s){super}
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
objectify_config-0.1.0 lib/objectify_config.rb