module MineSetting

Files:

config/settings/base.yml
config/settings/secrets.yml
config/settings/other_config.yml

File Content:

development:
  foo: bar
test:
  xxx: yyy

Code:

class MySettings
  extend MineSetting

  load_dir Rails.root.join('config/settings'), 'development'
end

MySettings.base # {foo: bar} MySettings.secrets MySettings.other_config

Constants

VERSION

Public Class Methods

included(cls) click to toggle source
# File lib/mine_setting.rb, line 31
def self.included(cls)
  raise "Cannot include SimpleSettings, please use extend"
end

Public Instance Methods

load_dir(dir_path, env) click to toggle source
# File lib/mine_setting.rb, line 35
def load_dir(dir_path, env)
  Dir[File.join(dir_path, '*')].each do |filepath|
    filename = File.basename filepath
    next unless filename =~ /^\w+\.ya?ml$/
    puts "Load config '#{filename}'"

    setting_name = filename.gsub(/\.ya?ml/, '')
    eval(%Q{
      def self.#{setting_name}
        @#{setting_name} ||= load_setting('#{filepath}', '#{env}')
      end
    })
  end
end

Protected Instance Methods

load_setting(filepath, env) click to toggle source
# File lib/mine_setting.rb, line 53
def load_setting(filepath, env)
  str = File.read(filepath)
  YAML.load(ERB.new(str).result)[env]
end