2018-10-06 23:10:08 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-09-14 20:32:11 +00:00
|
|
|
module ExpandVariables
|
|
|
|
class << self
|
2016-09-14 21:00:15 +00:00
|
|
|
def expand(value, variables)
|
2019-08-13 15:03:52 +00:00
|
|
|
variables_hash = nil
|
|
|
|
|
|
|
|
value.gsub(/\$([a-zA-Z_][a-zA-Z0-9_]*)|\${\g<1>}|%\g<1>%/) do
|
|
|
|
variables_hash ||= transform_variables(variables)
|
2020-09-03 09:08:20 +00:00
|
|
|
variables_hash[Regexp.last_match(1) || Regexp.last_match(2)]
|
2019-08-13 15:03:52 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def transform_variables(variables)
|
|
|
|
# Lazily initialise variables
|
|
|
|
variables = variables.call if variables.is_a?(Proc)
|
|
|
|
|
2016-09-14 20:32:11 +00:00
|
|
|
# Convert hash array to variables
|
|
|
|
if variables.is_a?(Array)
|
|
|
|
variables = variables.reduce({}) do |hash, variable|
|
|
|
|
hash[variable[:key]] = variable[:value]
|
|
|
|
hash
|
|
|
|
end
|
2016-09-13 12:14:55 +00:00
|
|
|
end
|
|
|
|
|
2019-08-13 15:03:52 +00:00
|
|
|
variables
|
2016-09-13 12:14:55 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|