Sha256: 4119e57f2a8f6109b33be1f860e4a34a9fb4967212958e806e00170bb401b31c

Contents?: true

Size: 1.36 KB

Versions: 22

Compression:

Stored size: 1.36 KB

Contents

require 'erb'
require 'yaml'

module RestCore; end
module RestCore::Config
  extend self
  DefaultModuleName = 'DefaultAttributes'

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

    default_attributes_module(klass).module_eval(
      data.inject(["extend self\n"]){ |r, (k, v)|
        # quote strings, leave others free (e.g. false, numbers, etc)
        r << <<-RUBY
          def default_#{k}
            #{v.inspect}
          end
        RUBY
      }.join, __FILE__, __LINE__)
  end

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

    singleton_class = if klass.respond_to?(:singleton_class)
                        klass.singleton_class
                      else
                        class << klass; self; end
                      end

    klass.send(:extend, mod) unless singleton_class < mod
    mod
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
rest-core-3.6.0 lib/rest-core/util/config.rb
rest-core-3.5.92 lib/rest-core/util/config.rb
rest-core-3.5.91 lib/rest-core/util/config.rb
rest-core-3.5.9 lib/rest-core/util/config.rb
rest-core-3.5.8 lib/rest-core/util/config.rb
rest-core-3.5.7 lib/rest-core/util/config.rb
rest-core-3.5.6 lib/rest-core/util/config.rb
rest-core-3.5.5 lib/rest-core/util/config.rb
rest-core-3.5.4 lib/rest-core/util/config.rb
rest-core-3.5.3 lib/rest-core/util/config.rb
rest-core-3.5.2 lib/rest-core/util/config.rb
rest-core-3.5.1 lib/rest-core/util/config.rb
rest-core-3.5.0 lib/rest-core/util/config.rb
rest-core-3.4.1 lib/rest-core/util/config.rb
rest-core-3.4.0 lib/rest-core/util/config.rb
rest-core-3.3.3 lib/rest-core/util/config.rb
rest-core-3.3.2 lib/rest-core/util/config.rb
rest-core-3.3.1 lib/rest-core/util/config.rb
rest-core-3.3.0 lib/rest-core/util/config.rb
rest-core-3.2.0 lib/rest-core/util/config.rb