Sha256: abab40ae065ccd9f59e6322258e82e56f5a02aa099b532d975f7da92a03663cb
Contents?: true
Size: 1.86 KB
Versions: 1
Compression:
Stored size: 1.86 KB
Contents
require 'singleton' class Setting class SettingNotFound < RuntimeError; end class SettingFileError < RuntimeError; end include Singleton def self.reload params = {} @available_settings = {} self.load params end def self.available_settings self.instance ? @available_settings : {} end # get a setting value by [] notation def self.[](name) self.check_value(name.to_s) self.value_for(name.to_s) end def self.method_missing(method, *args, &block) # see if this method is defined above us in the hierarchy super(method, *args) rescue name = method.to_s if name[-1, 1] == "?" name.chomp!('?') self[name]['default'].to_i > 0 else self[name] end end def initialize @available_settings ||= {} end class << self def has_key?(key) @available_settings.has_key?(key) end def value_for(value) v = @available_settings[value] if v.is_a?(Hash) && v.size > 1 v elsif v.is_a?(Hash) && v.has_key?("default") v['default'].nil? ? "" : v['default'] else v end end end def self.load(params) files = [] path = params[:path] params[:files].each do |file| files << File.join(path, file) end if params[:local] files << Dir.glob(File.join(path, 'local', '*.yml')) end @available_settings ||= {} files.flatten.each do |file| begin @available_settings.merge!(YAML::load(File.open(file)) || {}) if File.exists?(file) rescue Exception => e raise SettingNotFound.new("Error parsing file #{file}, with: #{e.message}") end end @available_settings end private def self.check_value(name) raise RuntimeError.new("settings are not yet initialized") unless self.instance raise SettingNotFound.new("#{name} not found") unless self.has_key?(name) end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mc-settings-0.0.1 | lib/setting.rb |