Class: PagSeguro::Transaction::Serializer

Inherits:
Object
  • Object
show all
Defined in:
lib/pagseguro/transaction/serializer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(xml) ⇒ Serializer

Returns a new instance of Serializer.



6
7
8
# File 'lib/pagseguro/transaction/serializer.rb', line 6

def initialize(xml)
  @xml = xml
end

Instance Attribute Details

#xmlObject (readonly)

Returns the value of attribute xml.



4
5
6
# File 'lib/pagseguro/transaction/serializer.rb', line 4

def xml
  @xml
end

Instance Method Details

#address_nodeObject



145
146
147
# File 'lib/pagseguro/transaction/serializer.rb', line 145

def address_node
  @address_node ||= xml.css("shipping > address")
end

#serializeObject



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/pagseguro/transaction/serializer.rb', line 10

def serialize
  {}.tap do |data|
    serialize_general(data)
    serialize_amounts(data)
    serialize_dates(data)
    serialize_creditor(data)
    serialize_payments(data)
    serialize_items(data)
    serialize_sender(data)
    serialize_shipping(data) if xml.css("shipping").any?
  end
end

#serialize_address(data) ⇒ Object



132
133
134
135
136
137
138
139
140
141
142
143
# File 'lib/pagseguro/transaction/serializer.rb', line 132

def serialize_address(data)
  data[:address] = {
    street: address_node.css("> street").text,
    number: address_node.css("> number").text,
    complement: address_node.css("> complement").text,
    district: address_node.css("> district").text,
    city: address_node.css("> city").text,
    state: address_node.css("> state").text,
    country: address_node.css("> country").text,
    postal_code: address_node.css("> postalCode").text,
  }
end

#serialize_amounts(data) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/pagseguro/transaction/serializer.rb', line 49

def serialize_amounts(data)
  data[:gross_amount] = BigDecimal(xml.css("grossAmount").text)
  data[:discount_amount] = BigDecimal(xml.css("discountAmount").text)
  data[:net_amount] = BigDecimal(xml.css("netAmount").text)
  data[:extra_amount] = BigDecimal(xml.css("extraAmount").text)
  data[:installments] = xml.css("installmentCount").text.to_i
end

#serialize_creditor(data) ⇒ Object



57
58
59
60
61
62
63
64
65
66
# File 'lib/pagseguro/transaction/serializer.rb', line 57

def serialize_creditor(data)
  data[:creditor_fees] = {
    intermediation_rate_amount: BigDecimal(xml.css("creditorFees > intermediationRateAmount").text),
    intermediation_fee_amount: BigDecimal(xml.css("creditorFees > intermediationFeeAmount").text),
    installment_fee_amount: BigDecimal(xml.css("creditorFees > installmentFeeAmount").text),
    operational_fee_amount: BigDecimal(xml.css("creditorFees > operationalFeeAmount").text),
    commission_fee_amount: BigDecimal(xml.css("creditorFees > commissionFeeAmount").text),
    efrete: BigDecimal(xml.css("creditorFees > efrete").text)
  }
end

#serialize_dates(data) ⇒ Object



39
40
41
42
43
44
45
46
47
# File 'lib/pagseguro/transaction/serializer.rb', line 39

def serialize_dates(data)
  data[:created_at] = Time.parse(xml.css("date").text)

  updated_at = xml.css("lastEventDate").text
  data[:updated_at] = Time.parse(updated_at) unless updated_at.empty?

  escrow_end_date = xml.css("escrowEndDate")
  data[:escrow_end_date] = Time.parse(escrow_end_date.text) if escrow_end_date.any?
end

#serialize_document(data) ⇒ Object



108
109
110
111
112
113
# File 'lib/pagseguro/transaction/serializer.rb', line 108

def serialize_document(data)
  data[:document] = {
    type: xml.css("sender > documents > document > type").text,
    value: xml.css("sender > documents > document > value").text
  }
end

#serialize_general(data) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/pagseguro/transaction/serializer.rb', line 23

def serialize_general(data)
  data[:code] = xml.css("> code").text
  data[:reference] = xml.css("reference").text
  data[:type_id] = xml.css("> type").text
  data[:payment_link] = xml.css("paymentLink").text
  data[:status] = xml.css("> status").text

  cancellation_source = xml.css("cancellationSource")
  data[:cancellation_source] = cancellation_source.text if cancellation_source.any?

  data[:payment_method] = {
    type_id: xml.css("paymentMethod > type").text,
    code: xml.css("paymentMethod > code").text
  }
end

#serialize_items(data) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/pagseguro/transaction/serializer.rb', line 83

def serialize_items(data)
  data[:items] = []

  xml.css("items > item").each do |node|
    item = {}
    item[:id] = node.css("id").text
    item[:description] = node.css("description").text
    item[:quantity] = node.css("quantity").text.to_i
    item[:amount] = BigDecimal(node.css("amount").text)

    data[:items] << item
  end
end

#serialize_payments(data) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/pagseguro/transaction/serializer.rb', line 68

def serialize_payments(data)
  data[:payment_releases] = []

  xml.css("paymentReleases > paymentRelease").each do |node|
    payment_release = {}
    payment_release[:installment] = node.css("installment").text
    payment_release[:total_amount] = BigDecimal(node.css("totalAmount").text)
    payment_release[:release_amount] = BigDecimal(node.css("releaseAmount").text)
    payment_release[:status] = node.css("status").text
    payment_release[:release_date] = Time.parse(node.css("releaseDate").text)

    data[:payment_releases] << payment_release
  end
end

#serialize_phone(data) ⇒ Object



115
116
117
118
119
120
# File 'lib/pagseguro/transaction/serializer.rb', line 115

def serialize_phone(data)
  data[:phone] = {
    area_code: xml.css("sender > phone > areaCode").text,
    number: xml.css("sender > phone > number").text
  }
end

#serialize_sender(data) ⇒ Object



97
98
99
100
101
102
103
104
105
106
# File 'lib/pagseguro/transaction/serializer.rb', line 97

def serialize_sender(data)
  sender = {
    name: xml.css("sender > name").text,
    email: xml.css("sender > email").text
  }

  serialize_phone(sender)
  serialize_document(sender)
  data[:sender] = sender
end

#serialize_shipping(data) ⇒ Object



122
123
124
125
126
127
128
129
130
# File 'lib/pagseguro/transaction/serializer.rb', line 122

def serialize_shipping(data)
  shipping = {
    type_id: xml.css("shipping > type").text,
    cost: BigDecimal(xml.css("shipping > cost").text),
  }

  serialize_address(shipping)
  data[:shipping] = shipping
end