Sha256: f9ef381ce2963d15d0265a88d8ae6cde638185f7cd7b7911fe478310fe4ce464

Contents?: true

Size: 1.3 KB

Versions: 4

Compression:

Stored size: 1.3 KB

Contents

require 'erb'
require 'yaml'

require 'rest-core'

module RestCore::Config
  extend self

  DefaultModuleName = 'DefaultAttributes'

  def load_for_rails klass, app=Rails
    root = File.expand_path(app.root)
    path = ["#{root}/config/rest-core.yaml", # YAML should use .yaml
            "#{root}/config/rest-core.yml" ].find{|p| File.exist?(p)}
    RestCore::Config.load(klass, path, app.env)
  end

  def load klass, path, env
    return false if klass.const_defined?(DefaultModuleName)
    RestCore::Config.load!(klass, path, env)
  end

  def load! klass, path, env
    config   = YAML.load(ERB.new(File.read(path)).result(binding))
    defaults = config[env]
    return false unless defaults
    raise ArgumentError.new("#{defaults} is not a hash") unless
      defaults.kind_of?(Hash)

    mod = if klass.const_defined?(DefaultModuleName)
            klass.const_get(DefaultModuleName)
          else
            m = Module.new
            klass.send(:extend, m)
            klass.send(:const_set, DefaultModuleName, m)
            m
          end

    mod.module_eval(defaults.inject([]){ |r, (k, v)|
      # quote strings, leave others free (e.g. false, numbers, etc)
      r << <<-RUBY
        def default_#{k}
          #{v.kind_of?(String) ? "'#{v}'" : v}
        end
      RUBY
    }.join, __FILE__, __LINE__)
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
rest-core-0.2.3 lib/rest-core/util/config.rb
rest-core-0.2.2 lib/rest-core/util/config.rb
rest-core-0.2.1 lib/rest-core/util/config.rb
rest-core-0.2.0 lib/rest-core/util/config.rb