|
|
|
@ -19,30 +19,24 @@ class DsAdmin::Storage::Config |
|
|
|
|
|
|
|
## |
|
|
|
# replace special patterns within config strings with data |
|
|
|
# given by the data hash param. These patterns also allow to send |
|
|
|
# a message to the actual substituted data to do any kind of |
|
|
|
# conversion to it. |
|
|
|
# given by the data hash param. These patterns also allow to |
|
|
|
# substitute part of the data giving the argument for a |
|
|
|
# String#sub call after a | to it. |
|
|
|
# |
|
|
|
# actually this is used within the handling of the ldap specific |
|
|
|
# :dnPat config parameter to generate the dn entry for a given model |
|
|
|
# Data (create or replace) |
|
|
|
# |
|
|
|
# TODO: I would like to get rid of the eval statements but i don't know |
|
|
|
# a better way to build the correct objects from the config strings |
|
|
|
# |
|
|
|
def eval_pattern(pattern, data = {}) |
|
|
|
scan_exp = /([^#]*)(#\{(:[^}|]+)(\|([^}]*))?\})?/ |
|
|
|
|
|
|
|
result = String.new |
|
|
|
pattern.scan(scan_exp) do |m| |
|
|
|
key = (eval m[2]) if m[2] |
|
|
|
val = data[key] if data[key] |
|
|
|
key = eval m[2] if m[2] |
|
|
|
msg = eval '[:sub, ' + m[4] + ']' if m[4] |
|
|
|
|
|
|
|
args = m[4].split(',').map do |arg| |
|
|
|
eval arg.strip |
|
|
|
end if m[4] |
|
|
|
|
|
|
|
val = val.send *args if args |
|
|
|
val = data[key] if data[key] |
|
|
|
val = val.send *msg if msg |
|
|
|
|
|
|
|
result += m[0] + (val || "") |
|
|
|
end |
|
|
|
|