config.rb 1.26 KB
class DsAdmin::Storage::Config
  attr_accessor :model

  def initialize(conf_data)
    @config = conf_data
  end

  def con(storage)
    @config[storage.config_key][:con]
  end

  def query(storage)
    @config[storage.config_key][@model.config_key][:query]
  end

  def map(storage)
    @config[storage.config_key][@model.config_key][:map]
  end

  ##
  # 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.
  #
  # 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]

      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
    result
  end
end