module Magellan::Gcs::Proxy::ExpandVariable
Public Instance Methods
dig_variable(tmp, v, variable_ref)
click to toggle source
# File lib/magellan/gcs/proxy/expand_variable.rb, line 19 def dig_variable(tmp, v, variable_ref) case v when String if tmp.respond_to?(:[]) && tmp.respond_to?(:include?) return tmp[v] if tmp.include?(v) end when Integer case tmp when Array return tmp[v] if tmp.size > v end end raise InvalidReferenceError, variable_ref end
dig_variables(variable_ref, data)
click to toggle source
# File lib/magellan/gcs/proxy/expand_variable.rb, line 12 def dig_variables(variable_ref, data) vars = variable_ref.split('.').map { |i| /\A\d+\z/ =~ i ? i.to_i : i } vars.inject(data) do |tmp, v| dig_variable(tmp, v, variable_ref) end end
expand_variables(str, data, quote_string: false)
click to toggle source
# File lib/magellan/gcs/proxy/expand_variable.rb, line 34 def expand_variables(str, data, quote_string: false) data ||= {} str.gsub(/\%\{\s*([\w.]+)\s*\}/) do |_m| var = Regexp.last_match(1) value = begin dig_variables(var, data) rescue InvalidReferenceError '' end case value when String then quote_string ? value.to_s : value when Array, Hash then flatten(value).join(' ') else value.to_s end end end
flatten(obj)
click to toggle source
# File lib/magellan/gcs/proxy/expand_variable.rb, line 53 def flatten(obj) case obj when Array then obj.map { |i| flatten(i) } when Hash then flatten(obj.values) else obj end end