mappum

Mappum is the tree to tree (object, bean etc.) mapping DSL. The example of usage is provided below. More documentation will follow.

Mappum.catalogue_add “CRM-ERP” do

map ERP::Person, CRM::Client do |p, c|

  #simple mapping
  map p.title <=> c.title

  #map with simple function call
  map p.person_id << c.key.downcase
  map p.person_id.upcase >> c.key

  #dictionary use
  map p.sex <=> c.sex_id, :dict => {"F" => "1", "M" => "2"}

  #submaps
  map p.address(ERP::Address) <=> c.address(CRM::Address) do |a, b|
    map a.street <=> b.street
    #etc.
  end

  #subobject to fields
  map p.main_phone(ERP::Phone) <=> c.self do |a, b|
    map a.number <=> b.main_phone
    map a.type <=> b.main_phone_type
  end

  #compilcated function call
  map p.name >> c.surname do |name|
    name + "ski"
  end
  map p.name << c.surname do |name|
    if name =~ /ski/
      name[0..-4]
    else
      name
    end
  end
  #field to array and array to field
  map p.email1 <=> c.emails[0]
  map p.email2 <=> c.emails[1]
  map p.email3 <=> c.emails[2]

  map p.phones(ERP::Phone)[] <=> c.phones[] do |a, b|
    map a.number <=> b.self
  end

end

end