Browse Source

another aproach to call a method given by a string....maybe less optimal

master
Georg Hopp 15 years ago
committed by Georg Hopp
parent
commit
14471a2f35
  1. 6
      app/config/storage.yml
  2. 19
      app/storage/config.rb
  3. 5
      app/tester.rb

6
app/config/storage.yml

@ -58,7 +58,7 @@
- 'organizationalRole'
- 'MailAlias'
:dnPat: "cn=#{:user},o=#{:mail|sub(/.*@/, '')}"
:dnPat: "cn=#{:user},o=#{:mail|:sub, /.*@/, ''}"
:map:
:cn: :user
@ -72,7 +72,7 @@
- 'person'
- 'MailAlias'
:dnPat: "mail=#{:mail},o=#{:mail|sub(/.*@/, '')}"
:dnPat: "mail=#{:mail},o=#{:mail|:sub, /.*@/, ''}"
:map:
:sn: :surname
@ -87,7 +87,7 @@
- 'person'
- 'MailAccount'
:dnPat: "mail=#{:mail},o=#{:mail|sub(/.*@/, '')}"
:dnPat: "mail=#{:mail},o=#{:mail|:sub, /.*@/, ''}"
:map:
:homedirectory: :home

19
app/storage/config.rb

@ -20,16 +20,29 @@ 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 replaces data e.g. for some kind of subtitution.
# a message to the actual substituted data to do any kind of
# conversion 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 = m[2][1..m[2].length].to_sym if m[2]
key = (eval m[2]) if m[2]
val = data[key] if data[key]
val = eval('"' + val + '".send ' + m[4]) if val && m[4]
args = m[4].split(',').map do |arg|
eval arg.strip
end if m[4]
val = val.send *args if args
result += m[0] + (val || "")
end

5
app/tester.rb

@ -148,5 +148,10 @@ user.name = 'brad'
puts 'returns: ' + user.save
puts 'base: ' + user.inspect
puts
alias_person.mail = 'noop@steffers.org'
puts 'returns: ' + alias_person.save
puts 'base: ' + alias_person.inspect
puts
puts 'Memory useage: ' + `ps -o rss= -p #{Process.pid}`
Loading…
Cancel
Save