class Benry::BaseConfig
Configuration class.
ex:
#----- config/common.rb ----- require 'benry/config' class CommonConfig < Benry::BaseConfig add :db_user , "user1" add :db_pass , ABSTRACT add :session_cooie , "SESS" add :session_secret , SECRET end #----- config/development.rb ----- require 'config/common' class Config < TestCommonConfig set :db_pass , "pass1" end #----- config/development.private ----- class Config set :session_secret , "abc123" end #----- main.rb ----- rack_env = ENV['RACK_ENV'] or raise "$RACK_ENV required." require "./config/#{rack_env}.rb" load "./config/#{rack_env}.private" # $config = Config.new.freeze p $config.db_user #=> "user1" p $config.db_pass #=> "pass1" p $config.session_cookie #=> "SESS" p $config.session_secret #=> "abc123" # p $config.get_all(:db_) #=> {:user=>"user1", :pass=>"pass1"} p $config.get_all(:session_) #=> {:cookie=>"SESS", :secret=>"abc123"}
Constants
- ABSTRACT
- SECRET
Public Class Methods
add(key, value, desc=nil)
click to toggle source
Add new config. Raises ConfigError
when already defined.
# File lib/benry/config.rb, line 80 def self.add(key, value, desc=nil) #; [!m7w96] raises ConfigError when already added. ! self.method_defined?(key) or raise ConfigError.new("add #{key.inspect} : already defined (use set() instead).") #; [!s620t] adds new key and value. (@__dict ||= {})[key] = value #; [!o0ts4] defines getter method. attr_reader key value end
new()
click to toggle source
# File lib/benry/config.rb, line 63 def initialize #; [!7rdq4] traverses parent class and gathers config values. pr = proc {|cls| pr.call(cls.superclass) if cls.superclass d = cls.instance_variable_get('@__dict') d.each {|k, v| instance_variable_set("@#{k}", v) } if d } pr.call(self.class) #; [!z9mno] raises ConfigError when ABSTRACT or SECRET is not overriden. instance_variables().each do |ivar| val = instance_variable_get(ivar) ! val.is_a?(AbstractValue) or raise ConfigError.new("config ':#{ivar.to_s[1..-1]}' should be set, but not.") end end
put(key, value, desc=nil)
click to toggle source
Add or set config. Raises nothing whether defined or not.
# File lib/benry/config.rb, line 102 def self.put(key, value, desc=nil) #; [!abd3f] raises nothing whener defined or not. #; [!gu2f0] sets key and value. (@__dict ||= {})[key] = value #; [!84kbr] defines getter method. attr_reader key value end
set(key, value, desc=nil)
click to toggle source
Set existing config. Raises ConfigError
when key not defined.
# File lib/benry/config.rb, line 92 def self.set(key, value, desc=nil) #; [!fxc4h] raises ConfigError when not defined yet. self.method_defined?(key) or raise ConfigError.new("set #{key.inspect} : not defined (use add() instead).") #; [!cv8iz] overrides existing value. (@__dict ||= {})[key] = value value end
Public Instance Methods
[](key)
click to toggle source
Return config value.
# File lib/benry/config.rb, line 112 def [](key) #; [!z9r30] returns config value. return self.__send__(key) end
get_all(prefix_key)
click to toggle source
Gathers related configs starting with prefix specified.
# File lib/benry/config.rb, line 118 def get_all(prefix_key) #; [!85z23] gathers configs which name starts with specified prefix. prefix = "@#{prefix_key}" symbol_p = prefix_key.is_a?(Symbol) range = prefix.length..-1 d = {} self.instance_variables.each do |ivar| if ivar.to_s.start_with?(prefix) val = self.instance_variable_get(ivar) key = ivar[range] #; [!b72fr] if prefix is a string, then keys returend will also be string. key = key.intern if symbol_p d[key] = val end end return d end