Class: PythonConfig::ConfigSection
- Defined in:
- lib/amp/dependencies/python_config.rb
Overview
ConfigSection
This is a simple section in a config document - treat it exactly like a hash, whose keys are the keys in the config, and whose value are the values in the config.
This is a separate class entirely because it has to handle the magical interpolation that allows this ini file:
[Awards]
output: Congratulations for winning %(prize)!
prize: the lottery
To result in:
config.sections["Awards"]["output"] == "Congratulations for winning the lottery!"
Instance Attribute Summary collapse
-
#source_hash ⇒ Object
readonly
Returns the value of attribute source_hash.
Instance Method Summary collapse
-
#[](*args) ⇒ Object
:nodoc:.
-
#initialize(source) ⇒ ConfigSection
constructor
A new instance of ConfigSection.
-
#interpolate(str, cur_depth = 0) ⇒ Object
:nodoc:.
-
#to_s ⇒ Object
:nodoc:.
Methods inherited from Hash
Constructor Details
#initialize(source) ⇒ ConfigSection
Returns a new instance of ConfigSection.
162 163 164 165 |
# File 'lib/amp/dependencies/python_config.rb', line 162 def initialize(source) @source_hash = source super(@source_hash) end |
Instance Attribute Details
#source_hash ⇒ Object (readonly)
Returns the value of attribute source_hash.
161 162 163 |
# File 'lib/amp/dependencies/python_config.rb', line 161 def source_hash @source_hash end |
Instance Method Details
#[](*args) ⇒ Object
:nodoc:
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/amp/dependencies/python_config.rb', line 167 def [](*args) #:nodoc: raise ArgumentError.new("Must provide either 1 or 2 args") unless (1..3).include? args.size key = args[0] str = @source_hash[key] str = interpolate str if args.size == 3 && str.nil? || str == "" return args[2] end return str if args.size == 1 type = args[1] # really? this needs to be a case-when statement... right after # thanksgiving break if type == Integer || type == Fixnum || type == Bignum result = str.to_i elsif type == Boolean result = str && (str.downcase == "true") elsif type == Float result = str.to_f elsif type == Array result = str.split(",").map {|s| s.strip} elsif type == String result = str elsif type == Symbol result = str.to_s end return result if args.size == 2 (str.nil? || str.strip == "") ? args[2] : result end |
#interpolate(str, cur_depth = 0) ⇒ Object
:nodoc:
200 201 202 203 204 205 206 |
# File 'lib/amp/dependencies/python_config.rb', line 200 def interpolate(str, cur_depth=0) #:nodoc: raise InterpolationTooDeepError.new("Interpolation too deep!") if cur_depth > PythonConfig::MAX_INTERPOLATION_DEPTH nextval = str nextval = str.gsub(/\%\((.*)\)/,@source_hash[$1]) if str =~ /%\((.*)\)/ nextval = interpolate(nextval,cur_depth+1) if nextval =~ /%\((.*)\)/ nextval end |
#to_s ⇒ Object
:nodoc:
208 209 210 211 212 213 214 |
# File 'lib/amp/dependencies/python_config.rb', line 208 def to_s #:nodoc: output = "" @source_hash.each do |k,v| output << "#{k} = #{v.to_s.gsub(/\n/,"\n ")}" << "\n" end output end |