Wrong Savon interpretation of my code

33 views
Skip to first unread message

Caterpillar

unread,
Feb 3, 2015, 8:39:54 AM2/3/15
to sav...@googlegroups.com
Hi,

I've got a bad interpretation of my code or I don't understand how
let it works.

Basically I've got this request: 


def create_request
return {} unless !@person.nil?

req = {
ProfileIDVersion: {
ID: ENV['GBGROUP_PROFILE_ID'],
Version: ENV['GBGROUP_PROFILE_VERSION']
},
CustomerReference: reference,
InputData: {
Personal: {
PersonalDetails: {
Title: @person.title,
Forename: @person.first_name,
MiddleName: @person.middle_name,
Surname: @person.last_name,
Gender: @person.gender,
DOBDay: @person.dob.nil? ? '' : @person.dob.day,
DOBMonth: @person.dob.nil? ? '' : @person.dob.month,
DOBYear: @person.dob.nil? ? '' : @person.dob.year
}
},
Addresses: []
}
}
address_count = 0
@person.addresses.each do |address|
Rails.logger.debug 'Adding address'
if address_count == 0
Rails.logger.debug 'Adding current address'
req[:InputData][:Addresses] << {
CurrentAddress: {
Country: address.country,
ZipPostcode: address.postcode,
AddressLine1: address.line1,
AddressLine2: address.line2,
AddressLine3: address.town_city,
FirstYearOfResidence: address.from_year,
LastYearOfResidence: address.to_year
}
}
else
Rails.logger.debug 'Adding previous address'
req[:InputData][:Addresses] << {
"PreviousAddress#{address_count}" => {
Country: address.country,
ZipPostcode: address.postcode,
AddressLine1: address.line1,
AddressLine2: address.line2,
AddressLine3: address.town_city,
FirstYearOfResidence: address.from_year,
LastYearOfResidence: address.to_year
}
}
end
address_count += 1
end
end

where I'm expecting to have in output: 

<ns:Addresses>
<ns:CurrentAddress>
<ns:Country>United Kingdom</ns:Country>
<ns:ZipPostcode>SP9 7EW</ns:ZipPostcode>
<ns:AddressLine1>3 Bayeux Mews</ns:AddressLine1>
<ns:AddressLine2>St Georges Road</ns:AddressLine2>
<ns:AddressLine3>Tidworth</ns:AddressLine3>
<ns:FirstYearOfResidence>2015</ns:FirstYearOfResidence>
<ns:LastYearOfResidence>2015</ns:LastYearOfResidence>
</ns:CurrentAddress>
<ns:PreviousAddress1>
<ns:Country>United Kingdom</ns:Country>
<ns:ZipPostcode>SP9 7EW</ns:ZipPostcode>
<ns:AddressLine1>3 Bayeux Mews</ns:AddressLine1>
<ns:AddressLine2>St Georges Road</ns:AddressLine2>
<ns:AddressLine3>Tidworth</ns:AddressLine3>
<ns:FirstYearOfResidence>2012</ns:FirstYearOfResidence>
<ns:LastYearOfResidence>2015</ns:LastYearOfResidence>
</ns:PreviousAddress1>
</ns:Addresses>

instead I've got that:

<ns:Addresses>
<ns:CurrentAddress>
<ns:Country>United Kingdom</ns:Country>
<ns:ZipPostcode>SP9 7EW</ns:ZipPostcode>
<ns:AddressLine1>3 Bayeux Mews</ns:AddressLine1>
<ns:AddressLine2>St Georges Road</ns:AddressLine2>
<ns:AddressLine3>Tidworth</ns:AddressLine3>
<ns:FirstYearOfResidence>2015</ns:FirstYearOfResidence>
<ns:LastYearOfResidence>2015</ns:LastYearOfResidence>
</ns:CurrentAddress>
</ns:Addresses>
<ns:Addresses>
<ns:PreviousAddress1>
<ns:Country>United Kingdom</ns:Country>
<ns:ZipPostcode>SP9 7EW</ns:ZipPostcode>
<ns:AddressLine1>3 Bayeux Mews</ns:AddressLine1>
<ns:AddressLine2>St Georges Road</ns:AddressLine2>
<ns:AddressLine3>Tidworth</ns:AddressLine3>
<ns:FirstYearOfResidence>2012</ns:FirstYearOfResidence>
<ns:LastYearOfResidence>2015</ns:LastYearOfResidence>
</ns:PreviousAddress1>
</ns:Addresses>

As you can see I've got two Addresses block, one with current address and the other with
previous address, but need just one address block.

The guess the problem might be calling multiple time:

req[:InputData][:Addresses] <<

but I don't actually know how to solve it in order to have all the addresses in one block.


This is what I've got from my Spec test:

it 'should only generate one Addresses block' do
person = create(:investor_individual_aml_check)

uk_person = UKPerson.new(person)

req = uk_person.send(:create_request)

puts JSON.pretty_generate(req)

expect(req[:InputData][:Addresses].size).to eq(1)
end

Output:

    "Addresses": [
      {
        "CurrentAddress": {
          "Country": "United Kingdom",
          "ZipPostcode": "OX4 2QX",
          "AddressLine1": "36 Brasenose Driftway",
          "AddressLine2": "Oxford",
          "AddressLine3": null,
          "FirstYearOfResidence": 2002,
          "LastYearOfResidence": 2014
        }
      },
      {
        "PreviousAddress1": {
          "Country": "United Kingdom",
          "ZipPostcode": "AB1 1AA",
          "AddressLine1": "21 A Street",
          "AddressLine2": "Aberdeen",
          "AddressLine3": null,
          "FirstYearOfResidence": 1998,
          "LastYearOfResidence": 2002
        }
      }
    ]


Thanks to anyone will spend a minute to reply,
Caterpillar.
Reply all
Reply to author
Forward
0 new messages