Class: Benry::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/benry/config.rb

Defined Under Namespace

Classes: AbstractValue, SecretValue

Constant Summary collapse

ABSTRACT =

represents ‘should be set in subclass’

AbstractValue.new
SECRET =

represents ‘should be set in private config file’

SecretValue.new

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfig

Returns a new instance of Config.



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/benry/config.rb', line 41

def initialize
  #; [!7rdq4] traverses parent class and gathers config values.
  _traverse(self.class) {|k, v| instance_variable_set("@#{k}", v) }
  instance_variables().each do |ivar|
    val = instance_variable_get(ivar)
    next unless val.is_a?(AbstractValue)
    #; [!v9f3k] when envvar name not specified...
    if val.envvar == nil
      #; [!z9mno] raises ConfigError if ABSTRACT or SECRET is not overriden.
      raise ConfigError.new("config ':#{ivar.to_s[1..-1]}' should be set, but not.")
    #; [!ida3r] when envvar name specified...
    else
      #; [!txl88] raises ConfigError when envvar not set.
      envvar = val.envvar
      begin
        val = ENV.fetch(envvar.to_s)
      rescue KeyError
        raise ConfigError.new("environment variable '$#{envvar}' should be set for config item ':#{ivar.to_s[1..-1]}'.")
      end
      #; [!y47ul] sets envvar value as config value if envvar provided.
      instance_variable_set(ivar, val)
    end
  end
end

Class Method Details

.add(key, value, desc = nil) ⇒ Object

Add new config. Raises ConfigError when already defined.



74
75
76
77
78
79
80
81
82
83
# File 'lib/benry/config.rb', line 74

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

.put(key, value, desc = nil) ⇒ Object

Add or set config. Raises nothing whether defined or not.



96
97
98
99
100
101
102
103
# File 'lib/benry/config.rb', line 96

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) ⇒ Object

Set existing config. Raises ConfigError when key not defined.



86
87
88
89
90
91
92
93
# File 'lib/benry/config.rb', line 86

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

Instance Method Details

#[](key) ⇒ Object

Return config value.



106
107
108
109
# File 'lib/benry/config.rb', line 106

def [](key)
  #; [!z9r30] returns config value.
  return self.__send__(key)
end

#defined?(key) ⇒ Boolean

Returns:

  • (Boolean)


130
131
132
133
134
# File 'lib/benry/config.rb', line 130

def defined?(key)
  #; [!y1fsh] returns true if config key defined.
  #; [!k1b5q] returns false if config key not defined.
  return instance_variable_defined?("@#{key}")
end

#each(sort = false, &b) ⇒ Object



136
137
138
139
140
141
142
143
144
# File 'lib/benry/config.rb', line 136

def each(sort=false, &b)
  #; [!f4ljv] returns Enumerator object if block not given.
  return to_enum(:each, sort) unless block_given?()
  #; [!4wqpu] yields each key and val with hiding secret values.
  #; [!a9glw] sorts keys if 'true' specified as the first argument.
  _each(sort, true, &b)
  #; [!wggik] returns self if block given.
  return self
end

#each!(sort = false, &b) ⇒ Object



146
147
148
149
150
151
152
153
154
# File 'lib/benry/config.rb', line 146

def each!(sort=false, &b)
  #; [!zd9lk] returns Enumerator object if block not given.
  return to_enum(:each!, sort) unless block_given?()
  #; [!7i5p2] yields each key and val without hiding secret values.
  #; [!aib7c] sorts keys if 'true' specified as the first argument.
  _each(sort, false, &b)
  #; [!2abgb] returns self if block given.
  return self
end

#get_all(prefix_key) ⇒ Object

Gathers related configs starting with prefix specified.



112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/benry/config.rb', line 112

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