pag_seguro 0.5.3 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/pag_seguro/checkout.xml.haml +1 -1
- data/lib/pag_seguro/day_of_year.rb +4 -3
- data/lib/pag_seguro/errors/unauthorized.rb +1 -1
- data/lib/pag_seguro/errors/unknown_error.rb +1 -1
- data/lib/pag_seguro/item.rb +5 -5
- data/lib/pag_seguro/notification.rb +5 -4
- data/lib/pag_seguro/payment.rb +39 -23
- data/lib/pag_seguro/payment_method.rb +12 -12
- data/lib/pag_seguro/pre_approval.rb +7 -4
- data/lib/pag_seguro/query.rb +12 -8
- data/lib/pag_seguro/sender.rb +10 -10
- data/lib/pag_seguro/shipping.rb +12 -11
- data/lib/pag_seguro/transaction.rb +31 -27
- data/lib/pag_seguro/version.rb +1 -1
- data/lib/pagseguro_decimal_validator.rb +4 -2
- data/spec/factories.rb +1 -1
- data/spec/pag_seguro/checkout_xml_spec.rb +9 -9
- data/spec/pag_seguro/convert_field_to_digit_spec.rb +2 -2
- data/spec/pag_seguro/day_of_year_spec.rb +1 -1
- data/spec/pag_seguro/errors/unknown_error_spec.rb +2 -2
- data/spec/pag_seguro/integration/checkout_spec.rb +4 -4
- data/spec/pag_seguro/integration/notification_spec.rb +3 -3
- data/spec/pag_seguro/integration/query_spec.rb +2 -2
- data/spec/pag_seguro/item_spec.rb +6 -4
- data/spec/pag_seguro/payment_method_spec.rb +10 -10
- data/spec/pag_seguro/payment_spec.rb +11 -10
- data/spec/pag_seguro/pre_approval_spec.rb +3 -2
- data/spec/pag_seguro/query_spec.rb +2 -2
- data/spec/pag_seguro/sender_spec.rb +5 -5
- data/spec/pag_seguro/shipping_spec.rb +3 -3
- data/spec/pag_seguro/transaction_spec.rb +2 -2
- data/spec/pag_seguro/version_spec.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3bbfb84a631ab24786de12bc5e7a16a107d09790
|
4
|
+
data.tar.gz: a9c38a18d3194f2962e58d9813597c162aac5cc6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf1a7901bec996be24ca3b9f85adde8508a7cea7a5e0c05ba143c086a628be9cc110aa7976861a5251dab76107ad5eba3bf8ad6f890307ecc894615fe0b31e50
|
7
|
+
data.tar.gz: 0438005dd35769dc354816e7be964d892e68b4e2c60d444ca2bfeea5a8c2c8b9f3088b7344cbfebbc16ecfed5dd707f696052edc9fbaaaa6b12b823d3bc27d8c
|
@@ -21,15 +21,16 @@ module PagSeguro
|
|
21
21
|
"#{"%02d" % @month}-#{"%02d" % @day}"
|
22
22
|
end
|
23
23
|
|
24
|
+
# very simple date validation, just to smoke test possible
|
25
|
+
# errors of switching day with month
|
24
26
|
def valid?
|
25
|
-
# very simple date validation, just to smoke test possible errors of switching day with month
|
26
27
|
@day < 31 && @month < 12
|
27
28
|
end
|
28
29
|
|
29
30
|
def <=>(other_day_of_the_year)
|
30
|
-
return
|
31
|
+
return 1 if @month > other_day_of_the_year.month
|
31
32
|
return -1 if @month < other_day_of_the_year.month
|
32
33
|
@day <=> other_day_of_the_year.day
|
33
34
|
end
|
34
35
|
end
|
35
|
-
end
|
36
|
+
end
|
data/lib/pag_seguro/item.rb
CHANGED
@@ -2,17 +2,17 @@ module PagSeguro
|
|
2
2
|
class Item
|
3
3
|
include ActiveModel::Validations
|
4
4
|
extend PagSeguro::ConvertFieldToDigit
|
5
|
-
|
5
|
+
|
6
6
|
attr_accessor :id, :description, :amount, :quantity, :shipping_cost, :weight
|
7
7
|
attr_reader_as_digit :amount, :shipping_cost
|
8
|
-
|
8
|
+
|
9
9
|
validates :id, presence: true
|
10
10
|
validates :description, presence: true
|
11
11
|
validates :amount, pagseguro_decimal: true, presence: true
|
12
12
|
validates :shipping_cost, pagseguro_decimal: true
|
13
13
|
validates :weight, numericality: { only_integer: true, greater_than: 0, allow_blank: true }
|
14
14
|
validates :quantity, presence: true, numericality: { only_integer: true, greater_than: 0, less_than: 1000 }
|
15
|
-
|
15
|
+
|
16
16
|
def initialize(attributes = {})
|
17
17
|
@id = attributes[:id]
|
18
18
|
@description = attributes[:description]
|
@@ -21,9 +21,9 @@ module PagSeguro
|
|
21
21
|
@shipping_cost = attributes[:shipping_cost]
|
22
22
|
@weight = attributes[:weight]
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def description
|
26
26
|
@description.present? && @description.size > 100 ? @description[0..99] : @description
|
27
27
|
end
|
28
28
|
end
|
29
|
-
end
|
29
|
+
end
|
@@ -1,16 +1,17 @@
|
|
1
1
|
module PagSeguro
|
2
2
|
class Notification < Transaction
|
3
|
-
|
4
|
-
def initialize(email
|
3
|
+
|
4
|
+
def initialize(email, token, notification_code)
|
5
5
|
raise "Needs a notification code" if notification_code.blank?
|
6
6
|
raise "Needs an email" if email.blank?
|
7
7
|
raise "Needs a token" if token.blank?
|
8
8
|
@data = transaction_data(email, token, notification_code)
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
private
|
12
12
|
def transaction_data(email, token, notification_code)
|
13
|
-
|
13
|
+
notification_url = "#{PAGSEGURO_TRANSACTIONS_URL}/notifications/#{notification_code}"
|
14
|
+
super RestClient.get notification_url, params: {email: email, token: token}
|
14
15
|
end
|
15
16
|
end
|
16
17
|
end
|
data/lib/pag_seguro/payment.rb
CHANGED
@@ -3,15 +3,17 @@ module PagSeguro
|
|
3
3
|
include ActiveModel::Validations
|
4
4
|
extend PagSeguro::ConvertFieldToDigit
|
5
5
|
|
6
|
-
attr_accessor :id, :email, :token, :items, :sender, :shipping,
|
7
|
-
|
6
|
+
attr_accessor :id, :email, :token, :items, :sender, :shipping,
|
7
|
+
:extra_amount, :redirect_url, :max_uses, :max_age,
|
8
|
+
:response, :pre_approval
|
9
|
+
|
8
10
|
attr_reader_as_digit :extra_amount
|
9
|
-
|
11
|
+
|
10
12
|
validates_presence_of :email, :token
|
11
13
|
validates :extra_amount, pagseguro_decimal: true
|
12
14
|
validates_format_of :redirect_url, with: URI::regexp(%w(http https)), message: " must give a correct url for redirection", allow_blank: true
|
13
15
|
validate :max_uses_number, :max_age_number, :valid_pre_approval, :valid_items
|
14
|
-
|
16
|
+
|
15
17
|
def initialize(email = nil, token = nil, options = {})
|
16
18
|
@email = email unless email.nil?
|
17
19
|
@token = token unless token.nil?
|
@@ -25,60 +27,74 @@ module PagSeguro
|
|
25
27
|
@max_age = options[:max_age]
|
26
28
|
@pre_approval = options[:pre_approval]
|
27
29
|
end
|
28
|
-
|
30
|
+
|
29
31
|
def self.checkout_payment_url(code)
|
30
32
|
"https://pagseguro.uol.com.br/v2/checkout/payment.html?code=#{code}"
|
31
33
|
end
|
32
|
-
|
34
|
+
|
33
35
|
def checkout_xml
|
34
36
|
xml_content = File.open( File.dirname(__FILE__) + "/checkout.xml.haml" ).read
|
35
37
|
haml_engine = Haml::Engine.new(xml_content)
|
36
|
-
|
38
|
+
|
39
|
+
haml_engine.render Object.new,
|
40
|
+
items: @items,
|
41
|
+
payment: self,
|
42
|
+
sender: @sender,
|
43
|
+
shipping: @shipping,
|
44
|
+
pre_approval: @pre_approval
|
37
45
|
end
|
38
|
-
|
46
|
+
|
39
47
|
def checkout_url_with_params
|
40
48
|
"https://ws.pagseguro.uol.com.br/v2/checkout?email=#{@email}&token=#{@token}"
|
41
49
|
end
|
42
|
-
|
50
|
+
|
43
51
|
def checkout_payment_url
|
44
52
|
self.class.checkout_payment_url(code)
|
45
53
|
end
|
46
|
-
|
54
|
+
|
47
55
|
def code
|
48
56
|
response || parse_checkout_response
|
49
57
|
parse_code
|
50
58
|
end
|
51
|
-
|
59
|
+
|
52
60
|
def date
|
53
61
|
response || parse_checkout_response
|
54
62
|
parse_date
|
55
63
|
end
|
56
|
-
|
64
|
+
|
57
65
|
def reset!
|
58
66
|
@response = nil
|
59
67
|
end
|
60
|
-
|
68
|
+
|
61
69
|
protected
|
62
70
|
def max_uses_number
|
63
|
-
|
71
|
+
if @max_uses.present? && @max_uses.to_i <= 0
|
72
|
+
errors.add(:max_uses, " must be an integer greater than 0")
|
73
|
+
end
|
64
74
|
end
|
65
|
-
|
75
|
+
|
66
76
|
def max_age_number
|
67
|
-
|
77
|
+
if @max_age.present? && @max_age.to_i < 30
|
78
|
+
errors.add(:max_age, " must be an integer grater or equal to 30")
|
79
|
+
end
|
68
80
|
end
|
69
81
|
|
70
82
|
def valid_pre_approval
|
71
|
-
|
83
|
+
if pre_approval && !pre_approval.valid?
|
84
|
+
errors.add(:pre_approval, " must be valid")
|
85
|
+
end
|
72
86
|
end
|
73
87
|
|
74
88
|
def valid_items
|
75
|
-
|
89
|
+
if items.blank? || !items.all?(&:valid?)
|
90
|
+
errors.add(:items, " must be all valid")
|
91
|
+
end
|
76
92
|
end
|
77
|
-
|
93
|
+
|
78
94
|
def send_checkout
|
79
95
|
RestClient.post(checkout_url_with_params, checkout_xml, content_type: "application/xml"){|resp, request, result| resp }
|
80
96
|
end
|
81
|
-
|
97
|
+
|
82
98
|
def parse_checkout_response
|
83
99
|
res = send_checkout
|
84
100
|
raise Errors::Unauthorized if res.code == 401
|
@@ -86,11 +102,11 @@ module PagSeguro
|
|
86
102
|
raise Errors::UnknownError.new(res) if res.code != 200
|
87
103
|
@response = res.body
|
88
104
|
end
|
89
|
-
|
105
|
+
|
90
106
|
def parse_date
|
91
|
-
DateTime.iso8601(
|
107
|
+
DateTime.iso8601(Nokogiri::XML(response.body).css("checkout date").first.content)
|
92
108
|
end
|
93
|
-
|
109
|
+
|
94
110
|
def parse_code
|
95
111
|
Nokogiri::XML(response.body).css("checkout code").first.content
|
96
112
|
end
|
@@ -2,47 +2,47 @@
|
|
2
2
|
module PagSeguro
|
3
3
|
class PaymentMethod
|
4
4
|
attr_accessor :code, :type
|
5
|
-
|
5
|
+
|
6
6
|
# Payment Method types
|
7
7
|
CREDIT_CARD = 1
|
8
8
|
BANK_BILL = 2
|
9
9
|
ONLINE_DEBIT = 3
|
10
10
|
PAG_SEGURO_BALANCE = 4
|
11
11
|
OI_PAGGO = 5
|
12
|
-
|
12
|
+
|
13
13
|
def initialize(options = {})
|
14
14
|
@code = options[:code]
|
15
15
|
@type = options[:type]
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
def code
|
19
19
|
@code.to_i
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def type
|
23
23
|
@type.to_i
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
def credit_card?
|
27
27
|
CREDIT_CARD == type
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
def bank_bill?
|
31
31
|
BANK_BILL == type
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
def online_debit?
|
35
35
|
ONLINE_DEBIT == type
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
def pag_seguro_balance?
|
39
39
|
PAG_SEGURO_BALANCE == type
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
def oi_paggo?
|
43
43
|
OI_PAGGO == type
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
def name
|
47
47
|
case code
|
48
48
|
when 101 then "Cartão de crédito Visa"
|
@@ -61,7 +61,7 @@ module PagSeguro
|
|
61
61
|
when 303 then "Débito online Unibanco"
|
62
62
|
when 304 then "Débito online Banco do Brasil"
|
63
63
|
when 305 then "Débito online Banco Real"
|
64
|
-
when 306 then "Débito online Banrisul"
|
64
|
+
when 306 then "Débito online Banrisul"
|
65
65
|
when 307 then "Débito online HSBC"
|
66
66
|
when 401 then "Saldo PagSeguro"
|
67
67
|
when 501 then "Oi Paggo"
|
@@ -69,4 +69,4 @@ module PagSeguro
|
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
72
|
-
end
|
72
|
+
end
|
@@ -7,8 +7,11 @@ module PagSeguro
|
|
7
7
|
DAYS_OF_WEEK = %w(monday tuesday wednesday thursday friday saturday sunday)
|
8
8
|
DATE_RANGE = 17856.hours
|
9
9
|
|
10
|
-
attr_accessor :name, :details, :amount_per_payment, :period,
|
11
|
-
|
10
|
+
attr_accessor :name, :details, :amount_per_payment, :period,
|
11
|
+
:day_of_week, :day_of_month, :day_of_year, :initial_date,
|
12
|
+
:final_date, :max_amount_per_period, :max_total_amount,
|
13
|
+
:review_URL
|
14
|
+
|
12
15
|
attr_reader_as_digit :amount_per_payment, :max_amount_per_period, :max_total_amount
|
13
16
|
|
14
17
|
validates_presence_of :name, :period, :final_date, :max_total_amount, :max_amount_per_period
|
@@ -16,7 +19,7 @@ module PagSeguro
|
|
16
19
|
validates_inclusion_of :day_of_week, in: DAYS_OF_WEEK, if: :weekly?
|
17
20
|
validates_inclusion_of :day_of_month, in: (1..28), if: :monthly?
|
18
21
|
validates_presence_of :day_of_year, if: :yearly?
|
19
|
-
validates_format_of :day_of_year, with:
|
22
|
+
validates_format_of :day_of_year, with: /\A\d{2}-\d{2}\z/, if: :yearly?
|
20
23
|
validate :initial_date_range, :final_date_range
|
21
24
|
validates :max_amount_per_period, pagseguro_decimal: true
|
22
25
|
validates :max_total_amount, pagseguro_decimal: true
|
@@ -81,4 +84,4 @@ module PagSeguro
|
|
81
84
|
errors.add(:final_date) if final_date > (initial_date || Time.now) + DATE_RANGE
|
82
85
|
end
|
83
86
|
end
|
84
|
-
end
|
87
|
+
end
|
data/lib/pag_seguro/query.rb
CHANGED
@@ -1,25 +1,28 @@
|
|
1
1
|
module PagSeguro
|
2
2
|
class Query < Transaction
|
3
|
-
|
4
|
-
def initialize(email
|
3
|
+
|
4
|
+
def initialize(email, token, transaction_code)
|
5
5
|
raise "Needs a transaction code" if transaction_code.blank?
|
6
6
|
raise "Needs an email" if email.blank?
|
7
7
|
raise "Needs a token" if token.blank?
|
8
8
|
@data = transaction_data(email, token, transaction_code)
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
def self.find(email, token, options={})
|
12
12
|
url = Transaction::PAGSEGURO_TRANSACTIONS_URL
|
13
13
|
url += "/abandoned" if options[:abandoned]
|
14
|
+
|
14
15
|
transactions_data = Nokogiri::XML(RestClient.get url, params: search_params(email, token, options))
|
15
|
-
transactions_data.css("transaction").map
|
16
|
+
transactions_data.css("transaction").map do |transaction_xml|
|
17
|
+
Transaction.new(transaction_xml)
|
18
|
+
end
|
16
19
|
end
|
17
20
|
|
18
21
|
def self.search_params(email, token, options={})
|
19
22
|
params = {email: email, token: token}
|
20
23
|
params[:initialDate], params[:finalDate] = parse_dates(options)
|
21
|
-
params[:page]
|
22
|
-
params[:maxPageResults]
|
24
|
+
params[:page] = options[:page] if options[:page]
|
25
|
+
params[:maxPageResults] = options[:max_page_results] if options[:max_page_results]
|
23
26
|
params
|
24
27
|
end
|
25
28
|
|
@@ -34,10 +37,11 @@ module PagSeguro
|
|
34
37
|
|
35
38
|
return initial_date.to_time.iso8601, final_date.to_time.iso8601
|
36
39
|
end
|
37
|
-
|
40
|
+
|
38
41
|
private
|
39
42
|
def transaction_data(email, token, transaction_code)
|
40
|
-
|
43
|
+
transaction_url = "#{PAGSEGURO_TRANSACTIONS_URL}/#{transaction_code}"
|
44
|
+
super RestClient.get transaction_url, params: {email: email, token: token}
|
41
45
|
end
|
42
46
|
end
|
43
47
|
end
|
data/lib/pag_seguro/sender.rb
CHANGED
@@ -1,37 +1,37 @@
|
|
1
1
|
module PagSeguro
|
2
2
|
class Sender
|
3
3
|
attr_accessor :name, :email, :phone_ddd, :phone_number
|
4
|
-
|
4
|
+
|
5
5
|
def initialize(options = {})
|
6
6
|
@name = options[:name]
|
7
7
|
@email = options[:email]
|
8
8
|
@phone_ddd = options[:phone_ddd]
|
9
9
|
@phone_number = options[:phone_number]
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
def email
|
13
13
|
valid_email? ? @email : nil
|
14
14
|
end
|
15
15
|
|
16
16
|
def valid_email?
|
17
|
-
@email =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\
|
17
|
+
@email =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i && @email.size <= 60
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
def name
|
21
21
|
return nil unless valid_name?
|
22
22
|
@name.gsub(/ +/, " ")[0..49]
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def valid_name?
|
26
26
|
@name =~ /\S+ +\S+/
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
def phone_ddd
|
30
|
-
@phone_ddd if @phone_ddd.to_s =~
|
30
|
+
@phone_ddd if @phone_ddd.to_s =~ /\A\d{2}\z/
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def phone_number
|
34
|
-
@phone_number if @phone_number.to_s
|
34
|
+
@phone_number if @phone_number.to_s =~/\A\d{8,9}\z/
|
35
35
|
end
|
36
36
|
end
|
37
|
-
end
|
37
|
+
end
|
data/lib/pag_seguro/shipping.rb
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
module PagSeguro
|
2
2
|
class Shipping
|
3
3
|
include ActiveModel::Validations
|
4
|
-
|
4
|
+
|
5
5
|
PAC = 1
|
6
6
|
SEDEX = 2
|
7
7
|
UNIDENTIFIED = 3
|
8
|
-
|
8
|
+
|
9
9
|
validates :postal_code, numericality: true, length: {is: 8}
|
10
|
-
|
11
|
-
attr_accessor :type, :state, :city, :postal_code, :district,
|
12
|
-
|
10
|
+
|
11
|
+
attr_accessor :type, :state, :city, :postal_code, :district,
|
12
|
+
:street, :number, :complement, :cost
|
13
|
+
|
13
14
|
def initialize(attributes = {})
|
14
15
|
@type = attributes[:type] || UNIDENTIFIED
|
15
16
|
@state = attributes[:state]
|
@@ -21,25 +22,25 @@ module PagSeguro
|
|
21
22
|
@complement = attributes[:complement]
|
22
23
|
@cost = attributes[:cost]
|
23
24
|
end
|
24
|
-
|
25
|
+
|
25
26
|
def postal_code
|
26
27
|
@postal_code if @postal_code.present? && @postal_code.to_s.size == 8
|
27
28
|
end
|
28
|
-
|
29
|
+
|
29
30
|
def type
|
30
31
|
@type.to_i
|
31
32
|
end
|
32
|
-
|
33
|
+
|
33
34
|
def pac?
|
34
35
|
PAC == type
|
35
36
|
end
|
36
|
-
|
37
|
+
|
37
38
|
def sedex?
|
38
39
|
SEDEX == type
|
39
40
|
end
|
40
|
-
|
41
|
+
|
41
42
|
def unidentified?
|
42
43
|
UNIDENTIFIED == type
|
43
44
|
end
|
44
45
|
end
|
45
|
-
end
|
46
|
+
end
|
@@ -6,7 +6,7 @@ module PagSeguro
|
|
6
6
|
attr_accessor :data
|
7
7
|
|
8
8
|
PAGSEGURO_TRANSACTIONS_URL = "https://ws.pagseguro.uol.com.br/v2/transactions"
|
9
|
-
|
9
|
+
|
10
10
|
# possible status values
|
11
11
|
PAGSEGURO_PROCESSING = 1
|
12
12
|
PAGSEGURO_IN_ANALYSIS = 2
|
@@ -15,14 +15,14 @@ module PagSeguro
|
|
15
15
|
PAGSEGURO_DISPUTED = 5
|
16
16
|
PAGSEGURO_RETURNED = 6
|
17
17
|
PAGSEGURO_CANCELLED = 7
|
18
|
-
|
18
|
+
|
19
19
|
# possible type values
|
20
20
|
PAGSEGURO_PAYMENT = 1
|
21
21
|
PAGSEGURO_TRANSFER = 2
|
22
22
|
PAGSEGURO_ADDITION_OF_FUNDS = 3
|
23
23
|
PAGSEGURO_CHARGE = 4
|
24
24
|
PAGSEGURO_BONUS = 5
|
25
|
-
|
25
|
+
|
26
26
|
def self.status_for(status_code)
|
27
27
|
case status_code
|
28
28
|
when PAGSEGURO_PROCESSING then :processing
|
@@ -42,7 +42,7 @@ module PagSeguro
|
|
42
42
|
def id
|
43
43
|
@data.css("reference").first.content
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
def gross_amount
|
47
47
|
@data.css("grossAmount").first.content
|
48
48
|
end
|
@@ -66,29 +66,33 @@ module PagSeguro
|
|
66
66
|
def installment_count
|
67
67
|
@data.css("installmentCount").first.content.to_i
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
def item_count
|
71
71
|
@data.css("itemCount").first.content.to_i
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
74
|
def transaction_id
|
75
75
|
@data.css("code").first.content
|
76
76
|
end
|
77
|
-
|
77
|
+
|
78
78
|
def date
|
79
79
|
DateTime.iso8601( @data.css("date").first.content )
|
80
80
|
end
|
81
|
-
|
81
|
+
|
82
82
|
def items
|
83
83
|
@data.css("items item").map do |i|
|
84
|
-
Item.new
|
84
|
+
Item.new id: parse_item(i, "id"),
|
85
|
+
description: parse_item(i, "description"),
|
86
|
+
quantity: parse_item(i, "quantity"),
|
87
|
+
amount: parse_item(i, "amount")
|
85
88
|
end
|
86
89
|
end
|
87
|
-
|
90
|
+
|
88
91
|
def payment_method
|
89
|
-
PaymentMethod.new code: parse_css("paymentMethod code"),
|
92
|
+
PaymentMethod.new code: parse_css("paymentMethod code"),
|
93
|
+
type: parse_css("paymentMethod type")
|
90
94
|
end
|
91
|
-
|
95
|
+
|
92
96
|
def sender
|
93
97
|
sn = Sender.new
|
94
98
|
sn.name = parse_css("sender name")
|
@@ -97,7 +101,7 @@ module PagSeguro
|
|
97
101
|
sn.phone_number = parse_css("sender phone number")
|
98
102
|
sn
|
99
103
|
end
|
100
|
-
|
104
|
+
|
101
105
|
def shipping
|
102
106
|
sh = Shipping.new
|
103
107
|
sh.type = parse_css("shipping type")
|
@@ -111,7 +115,7 @@ module PagSeguro
|
|
111
115
|
sh.complement = parse_css("shipping address complement")
|
112
116
|
sh
|
113
117
|
end
|
114
|
-
|
118
|
+
|
115
119
|
def status
|
116
120
|
@data.css("status").first.content.to_i
|
117
121
|
end
|
@@ -123,7 +127,7 @@ module PagSeguro
|
|
123
127
|
def processing?
|
124
128
|
PAGSEGURO_PROCESSING == status
|
125
129
|
end
|
126
|
-
|
130
|
+
|
127
131
|
def in_analysis?
|
128
132
|
PAGSEGURO_IN_ANALYSIS == status
|
129
133
|
end
|
@@ -131,43 +135,43 @@ module PagSeguro
|
|
131
135
|
def approved?
|
132
136
|
PAGSEGURO_APPROVED == status
|
133
137
|
end
|
134
|
-
|
138
|
+
|
135
139
|
def available?
|
136
140
|
PAGSEGURO_AVAILABLE == status
|
137
141
|
end
|
138
|
-
|
142
|
+
|
139
143
|
def disputed?
|
140
144
|
PAGSEGURO_DISPUTED == status
|
141
145
|
end
|
142
|
-
|
146
|
+
|
143
147
|
def returned?
|
144
148
|
PAGSEGURO_RETURNED == status
|
145
149
|
end
|
146
|
-
|
150
|
+
|
147
151
|
def cancelled?
|
148
152
|
PAGSEGURO_CANCELLED == status
|
149
153
|
end
|
150
|
-
|
154
|
+
|
151
155
|
def payment?
|
152
156
|
PAGSEGURO_PAYMENT == type
|
153
157
|
end
|
154
|
-
|
158
|
+
|
155
159
|
def transfer?
|
156
160
|
PAGSEGURO_TRANSFER == type
|
157
161
|
end
|
158
|
-
|
162
|
+
|
159
163
|
def addition_of_funds?
|
160
164
|
PAGSEGURO_ADDITION_OF_FUNDS == type
|
161
165
|
end
|
162
|
-
|
166
|
+
|
163
167
|
def charge?
|
164
168
|
PAGSEGURO_CHARGE == type
|
165
169
|
end
|
166
|
-
|
170
|
+
|
167
171
|
def bonus?
|
168
172
|
PAGSEGURO_BONUS == type
|
169
173
|
end
|
170
|
-
|
174
|
+
|
171
175
|
protected
|
172
176
|
def transaction_data(transaction_xml)
|
173
177
|
transaction_xml.instance_of?(Nokogiri::XML::Element) ? transaction_xml : Nokogiri::XML(transaction_xml)
|
@@ -176,10 +180,10 @@ module PagSeguro
|
|
176
180
|
def parse_item(data, attribute)
|
177
181
|
data.css(attribute).first.content
|
178
182
|
end
|
179
|
-
|
183
|
+
|
180
184
|
def parse_css(selector)
|
181
185
|
value = @data.css(selector).first
|
182
186
|
value.nil? ? nil : value.content
|
183
|
-
end
|
187
|
+
end
|
184
188
|
end
|
185
189
|
end
|
data/lib/pag_seguro/version.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
class PagseguroDecimalValidator < ActiveModel::EachValidator
|
2
2
|
def validate_each(object, attribute, value)
|
3
|
-
|
3
|
+
unless value.nil? || value =~ /\A\d+\.\d{2}\z/
|
4
|
+
object.errors.add(attribute, error_message)
|
5
|
+
end
|
4
6
|
end
|
5
7
|
|
6
8
|
def error_message
|
7
9
|
" must be a decimal and have 2 digits after the dot"
|
8
10
|
end
|
9
|
-
end
|
11
|
+
end
|
data/spec/factories.rb
CHANGED
@@ -18,9 +18,9 @@ describe PagSeguro::Payment do
|
|
18
18
|
it 'should be a valid xml' do
|
19
19
|
expect { Nokogiri::XML(payment.checkout_xml) { |config| config.options = Nokogiri::XML::ParseOptions::STRICT } }.to_not raise_error
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
its(:checkout_xml){ should match(/^<\?xml.+encoding="UTF-8".+\?>$/) }
|
23
|
-
|
23
|
+
|
24
24
|
describe 'settings' do
|
25
25
|
it { xml_content('checkout reference').should be_empty }
|
26
26
|
it { xml_content('checkout extraAmount').should be_empty }
|
@@ -33,22 +33,22 @@ describe PagSeguro::Payment do
|
|
33
33
|
before{ payment.id = 305 }
|
34
34
|
it { xml_content('checkout reference').should == '305' }
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
context 'with extra amount' do
|
38
38
|
before{ payment.extra_amount = '10.50' }
|
39
39
|
it { xml_content('checkout extraAmount').should == '10.50' }
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
context 'with redirect url' do
|
43
43
|
before{ payment.redirect_url = 'http://heavenstudio.com.br' }
|
44
44
|
it { xml_content('checkout redirectURL').should == 'http://heavenstudio.com.br' }
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
47
|
context 'with max uses' do
|
48
48
|
before{ payment.max_uses = '10' }
|
49
49
|
it { xml_content('checkout maxUses').should == '10' }
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
context 'with max age' do
|
53
53
|
before{ payment.max_age = '5000' }
|
54
54
|
it { xml_content('checkout maxAge').should == '5000' }
|
@@ -65,12 +65,12 @@ describe PagSeguro::Payment do
|
|
65
65
|
it { xml_collection('checkout items item quantity').should == ['4', '1', '2', '89'] }
|
66
66
|
it { xml_collection('checkout items item shippingCost').should == ['1.00', '12.00'] }
|
67
67
|
it { xml_collection('checkout items item weight').should == ['10', '300', '400'] }
|
68
|
-
|
68
|
+
|
69
69
|
it 'should escape html in item description' do
|
70
70
|
payment.checkout_xml.should include('A Book & Cover')
|
71
71
|
end
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
74
|
describe 'sender info' do
|
75
75
|
context 'without sender' do
|
76
76
|
it { xml_content('checkout sender name').should be_empty }
|
@@ -88,7 +88,7 @@ describe PagSeguro::Payment do
|
|
88
88
|
it { xml_content('checkout sender phone number').should == '993430994' }
|
89
89
|
end
|
90
90
|
end
|
91
|
-
|
91
|
+
|
92
92
|
describe 'shipping info' do
|
93
93
|
context 'without shipping' do
|
94
94
|
it { xml_content('checkout shipping').should be_empty }
|
@@ -7,7 +7,7 @@ end
|
|
7
7
|
describe PagSeguro::ConvertFieldToDigit do
|
8
8
|
subject{ MyObject.new }
|
9
9
|
|
10
|
-
context "normal object" do
|
10
|
+
context "normal object" do
|
11
11
|
context "with numeric price" do
|
12
12
|
before{ subject.price = 10.02 }
|
13
13
|
its(:price){ should == 10.02 }
|
@@ -65,4 +65,4 @@ describe PagSeguro::ConvertFieldToDigit do
|
|
65
65
|
its(:amount){ should == nil }
|
66
66
|
end
|
67
67
|
end
|
68
|
-
end
|
68
|
+
end
|
@@ -4,7 +4,7 @@ class MockResponse
|
|
4
4
|
def code
|
5
5
|
10000
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
def body
|
9
9
|
" error description"
|
10
10
|
end
|
@@ -14,4 +14,4 @@ describe PagSeguro::Errors::UnknownError do
|
|
14
14
|
it "should be able to raise an unknown error" do
|
15
15
|
lambda { raise PagSeguro::Errors::UnknownError.new(MockResponse.new) }.should raise_error(PagSeguro::Errors::UnknownError, "Unknown response code (10000):\n error description")
|
16
16
|
end
|
17
|
-
end
|
17
|
+
end
|
@@ -9,7 +9,7 @@ describe PagSeguro::Payment do
|
|
9
9
|
pending "You need to set your token for your PagSeguro account in spec/pag_seguro/integration/config.yml in order to run this spec"
|
10
10
|
end
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
context "with all fields" do
|
14
14
|
let(:payment){ build :payment_with_all_fields, email: EMAIL, token: TOKEN }
|
15
15
|
subject { payment }
|
@@ -37,7 +37,7 @@ describe PagSeguro::Payment do
|
|
37
37
|
context "with items" do
|
38
38
|
let(:payment){ build :payment_with_items, email: EMAIL, token: TOKEN }
|
39
39
|
subject { payment }
|
40
|
-
|
40
|
+
|
41
41
|
its('code.size'){ should == 32 }
|
42
42
|
its(:date){ should be_an_instance_of(DateTime) }
|
43
43
|
|
@@ -52,9 +52,9 @@ describe PagSeguro::Payment do
|
|
52
52
|
expect { payment.code }.to raise_error(PagSeguro::Errors::InvalidData)
|
53
53
|
end
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
it "should raise unauthorized error if email and token do not match" do
|
57
57
|
payment = build :payment, email: "not_a_user@not_an_email.com", token: "NOTATOKEN7F048A09A8AEFDD1E5A7B91"
|
58
58
|
expect { payment.code }.to raise_error(PagSeguro::Errors::Unauthorized)
|
59
59
|
end
|
60
|
-
end
|
60
|
+
end
|
@@ -13,7 +13,7 @@ describe PagSeguro::Notification do
|
|
13
13
|
@notification = PagSeguro::Notification.new(EMAIL, TOKEN, NOTIFICATION_CODE)
|
14
14
|
end
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
it { @notification.transaction_id.should be_present }
|
18
18
|
it { @notification.date.should be_present }
|
19
19
|
it { @notification.id.should be_present }
|
@@ -38,7 +38,7 @@ describe PagSeguro::Notification do
|
|
38
38
|
item.quantity.should be_present
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
it { @notification.sender.email.should be_present }
|
43
43
|
it { @notification.shipping.type.should be_present }
|
44
|
-
end
|
44
|
+
end
|
@@ -14,7 +14,7 @@ describe PagSeguro::Query do
|
|
14
14
|
@query = PagSeguro::Query.new(EMAIL, TOKEN, TRANSACTION_ID)
|
15
15
|
end
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
it { @query.transaction_id.should be_present }
|
19
19
|
it { @query.date.should be_present }
|
20
20
|
it { @query.id.should be_present }
|
@@ -39,7 +39,7 @@ describe PagSeguro::Query do
|
|
39
39
|
item.quantity.should be_present
|
40
40
|
end
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
it { @query.sender.email.should be_present }
|
44
44
|
it { @query.shipping.type.should be_present }
|
45
45
|
end
|
@@ -15,7 +15,7 @@ describe PagSeguro::Item do
|
|
15
15
|
it { should validate_presence_of :id }
|
16
16
|
it { should validate_presence_of :description }
|
17
17
|
it { should validate_presence_of :amount }
|
18
|
-
|
18
|
+
|
19
19
|
it { should_not allow_value(nil).for(:quantity) }
|
20
20
|
it { should_not allow_value(0).for(:quantity) }
|
21
21
|
it { should_not allow_value(1000).for(:quantity) }
|
@@ -25,13 +25,15 @@ describe PagSeguro::Item do
|
|
25
25
|
it { should_not allow_value("10,50").for(:amount) }
|
26
26
|
it { should_not allow_value("R$ 10.50").for(:amount) }
|
27
27
|
it { should_not allow_value("-10.50").for(:amount) }
|
28
|
+
it { should_not allow_value("10.50\nanything").for(:amount) }
|
28
29
|
it { should allow_value("10.50").for(:amount) }
|
29
30
|
it { should allow_value(10).for(:amount) }
|
30
31
|
it { should allow_value(BigDecimal.new("10.5")).for(:amount) }
|
31
|
-
|
32
|
+
|
32
33
|
it { should_not allow_value("10,50").for(:shipping_cost) }
|
33
34
|
it { should_not allow_value("R$ 10.50").for(:shipping_cost) }
|
34
35
|
it { should_not allow_value("-10.50").for(:shipping_cost) }
|
36
|
+
it { should_not allow_value("10.50\nanything").for(:shipping_cost) }
|
35
37
|
it { should allow_value("10.50").for(:shipping_cost) }
|
36
38
|
it { should allow_value(10).for(:shipping_cost) }
|
37
39
|
it { should allow_value(BigDecimal.new("10.5")).for(:shipping_cost) }
|
@@ -41,7 +43,7 @@ describe PagSeguro::Item do
|
|
41
43
|
it { should_not allow_value("0").for(:quantity) }
|
42
44
|
it { should_not allow_value("-1").for(:quantity) }
|
43
45
|
it { should allow_value("1").for(:quantity) }
|
44
|
-
|
46
|
+
|
45
47
|
it { should_not allow_value("-10").for(:weight) }
|
46
48
|
it { should_not allow_value("10.5").for(:weight) }
|
47
49
|
it { should_not allow_value("10,5").for(:weight) }
|
@@ -50,4 +52,4 @@ describe PagSeguro::Item do
|
|
50
52
|
it "should trim description to 100 characters if it has more than 100 characters" do
|
51
53
|
PagSeguro::Item.new(description: "-" * 101).description.size.should == 100
|
52
54
|
end
|
53
|
-
end
|
55
|
+
end
|
@@ -3,28 +3,28 @@ require 'spec_helper'
|
|
3
3
|
|
4
4
|
describe PagSeguro::PaymentMethod do
|
5
5
|
it { should have_attribute_accessor(:code) }
|
6
|
-
it { should have_attribute_accessor(:type) }
|
7
|
-
|
6
|
+
it { should have_attribute_accessor(:type) }
|
7
|
+
|
8
8
|
context "initalized with code and type" do
|
9
9
|
subject { build :payment_method, code: "101", type: "1" }
|
10
10
|
|
11
11
|
its(:code){ should == 101 }
|
12
12
|
its(:type){ should == 1 }
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
describe "types" do
|
16
16
|
let(:payment_method){ PagSeguro::PaymentMethod.new }
|
17
|
-
|
17
|
+
|
18
18
|
context "with type 1" do
|
19
19
|
subject { build :payment_method, type: 1 }
|
20
20
|
it { should be_credit_card }
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
context "with if type 2" do
|
24
24
|
subject { build :payment_method, type: 2 }
|
25
25
|
it { should be_bank_bill }
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
context "with if type 3" do
|
29
29
|
subject { build :payment_method, type: 3 }
|
30
30
|
it { should be_online_debit }
|
@@ -34,18 +34,18 @@ describe PagSeguro::PaymentMethod do
|
|
34
34
|
subject { build :payment_method, type: 4 }
|
35
35
|
it { should be_pag_seguro_balance }
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
context "with type 5" do
|
39
39
|
subject { build :payment_method, type: 5 }
|
40
40
|
it { should be_oi_paggo }
|
41
41
|
end
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
describe "codes" do
|
45
45
|
def should_have_meaning_for_code(meaning, code)
|
46
46
|
PagSeguro::PaymentMethod.new(code: code).name.should be == meaning
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
it { should_have_meaning_for_code("Cartão de crédito Visa", 101) }
|
50
50
|
it { should_have_meaning_for_code("Cartão de crédito MasterCard", 102) }
|
51
51
|
it { should_have_meaning_for_code("Cartão de crédito American Express", 103) }
|
@@ -68,4 +68,4 @@ describe PagSeguro::PaymentMethod do
|
|
68
68
|
it { should_have_meaning_for_code("Oi Paggo", 501) }
|
69
69
|
it { should_have_meaning_for_code("Desconhecido", 0) }
|
70
70
|
end
|
71
|
-
end
|
71
|
+
end
|
@@ -48,14 +48,15 @@ describe PagSeguro::Payment do
|
|
48
48
|
|
49
49
|
it { validate_presence_of :email }
|
50
50
|
it { validate_presence_of :token }
|
51
|
-
|
51
|
+
|
52
52
|
it { should_not allow_value('10,50').for(:extra_amount) }
|
53
53
|
it { should_not allow_value('R$ 10.50').for(:extra_amount) }
|
54
54
|
it { should_not allow_value('-10.50').for(:extra_amount) }
|
55
|
+
it { should_not allow_value('10.50\nanything').for(:extra_amount) }
|
55
56
|
it { should allow_value('10.50').for(:extra_amount) }
|
56
57
|
it { should allow_value(10).for(:extra_amount) }
|
57
58
|
it { should allow_value(BigDecimal.new('10.5')).for(:extra_amount) }
|
58
|
-
|
59
|
+
|
59
60
|
it { should_not allow_value('something.com.br').for(:redirect_url)}
|
60
61
|
it { should allow_value('http://something.com.br').for(:redirect_url)}
|
61
62
|
|
@@ -85,17 +86,17 @@ describe PagSeguro::Payment do
|
|
85
86
|
subject { build :payment_with_item }
|
86
87
|
it { should be_valid }
|
87
88
|
end
|
88
|
-
|
89
|
+
|
89
90
|
context 'checking out' do
|
90
91
|
let(:payment){ build(:payment) }
|
91
92
|
it 'should generate a checkout url with an external code' do
|
92
93
|
PagSeguro::Payment.checkout_payment_url('aabbcc').should == 'https://pagseguro.uol.com.br/v2/checkout/payment.html?code=aabbcc'
|
93
94
|
end
|
94
|
-
|
95
|
+
|
95
96
|
it 'should have a checkout_url_with_params' do
|
96
97
|
payment.checkout_url_with_params.should == 'https://ws.pagseguro.uol.com.br/v2/checkout?email=myemail&token=mytoken'
|
97
98
|
end
|
98
|
-
|
99
|
+
|
99
100
|
it 'should generate a checkout url based on the received response' do
|
100
101
|
payment.stub code: 'aabbcc'
|
101
102
|
payment.checkout_payment_url.should == 'https://pagseguro.uol.com.br/v2/checkout/payment.html?code=aabbcc'
|
@@ -109,18 +110,18 @@ describe PagSeguro::Payment do
|
|
109
110
|
PagSeguro::Payment.any_instance.stub_chain(:send_checkout, :body){ 'some body info' }
|
110
111
|
expect { payment.send(:parse_checkout_response) }.to_not raise_error
|
111
112
|
end
|
112
|
-
|
113
|
+
|
113
114
|
it 'should raise PagSeguro::Errors::InvalidData if response code is 400' do
|
114
115
|
PagSeguro::Payment.any_instance.stub_chain(:send_checkout, :code){ 400 }
|
115
116
|
PagSeguro::Payment.any_instance.stub_chain(:send_checkout, :body){ 'some error description' }
|
116
117
|
expect { payment.send(:parse_checkout_response) }.to raise_error(PagSeguro::Errors::InvalidData)
|
117
118
|
end
|
118
|
-
|
119
|
+
|
119
120
|
it 'should raise PagSeguro::Errors::Unauthorized if response code is 400' do
|
120
121
|
PagSeguro::Payment.any_instance.stub_chain(:send_checkout, :code){ 401 }
|
121
122
|
expect { payment.send(:parse_checkout_response) }.to raise_error(PagSeguro::Errors::Unauthorized)
|
122
123
|
end
|
123
|
-
|
124
|
+
|
124
125
|
it 'should raise PagSeguro::Errors::UnknownError if response code is not 200, 400 or 401' do
|
125
126
|
PagSeguro::Payment.any_instance.stub_chain(:send_checkout, :code){ 300 }
|
126
127
|
PagSeguro::Payment.any_instance.stub_chain(:send_checkout, :body){ 'some response body' }
|
@@ -132,7 +133,7 @@ describe PagSeguro::Payment do
|
|
132
133
|
PagSeguro::Payment.any_instance.stub_chain(:send_checkout, :body){ 'some response body' }
|
133
134
|
expect { payment.send(:parse_checkout_response) }.to change { payment.response }.from(nil).to('some response body')
|
134
135
|
end
|
135
|
-
|
136
|
+
|
136
137
|
it 'should be able to reset response' do
|
137
138
|
payment.response = 'something'
|
138
139
|
expect { payment.reset! }.to change{ payment.response }.from('something').to(nil)
|
@@ -179,4 +180,4 @@ describe PagSeguro::Payment do
|
|
179
180
|
payment.date
|
180
181
|
end
|
181
182
|
end
|
182
|
-
end
|
183
|
+
end
|
@@ -47,7 +47,7 @@ describe PagSeguro::PreApproval do
|
|
47
47
|
it { should_not allow_value( Time.now - 10.minutes + 5.days ).for(:final_date) }
|
48
48
|
it { should allow_value( Time.now + 5.days ).for(:final_date) }
|
49
49
|
it { should allow_value( (PagSeguro::PreApproval::DATE_RANGE - 5.minutes + 5.days).from_now ).for(:final_date) }
|
50
|
-
it { should_not allow_value( PagSeguro::PreApproval::DATE_RANGE.from_now + 5.minutes + 5.days ).for(:final_date) }
|
50
|
+
it { should_not allow_value( PagSeguro::PreApproval::DATE_RANGE.from_now + 5.minutes + 5.days ).for(:final_date) }
|
51
51
|
end
|
52
52
|
|
53
53
|
describe "initialized with minimum attributes" do
|
@@ -101,6 +101,7 @@ describe PagSeguro::PreApproval do
|
|
101
101
|
it { should allow_value('01-01').for(:day_of_year) }
|
102
102
|
it { should allow_value(PagSeguro::DayOfYear.new(month: 1, day: 1)).for(:day_of_year) }
|
103
103
|
it { should_not allow_value('1-1').for(:day_of_year) }
|
104
|
+
it { should_not allow_value("10-22\nanything").for(:day_of_year) }
|
104
105
|
|
105
106
|
its(:period){ should == 'yearly' }
|
106
107
|
its(:day_of_year){ should == '03-01' }
|
@@ -109,4 +110,4 @@ describe PagSeguro::PreApproval do
|
|
109
110
|
it { should be_yearly }
|
110
111
|
end
|
111
112
|
end
|
112
|
-
end
|
113
|
+
end
|
@@ -33,7 +33,7 @@ describe PagSeguro::Query do
|
|
33
33
|
PagSeguro::Query.stub(search_params: params)
|
34
34
|
RestClient.should_receive(:get).with("https://ws.pagseguro.uol.com.br/v2/transactions/abandoned", params: params)
|
35
35
|
PagSeguro::Query.find "email", "token", abandoned: true
|
36
|
-
end
|
36
|
+
end
|
37
37
|
end
|
38
38
|
|
39
39
|
context "with a stubbed response" do
|
@@ -60,7 +60,7 @@ describe PagSeguro::Query do
|
|
60
60
|
it { search_params.keys.should_not include :page }
|
61
61
|
it { search_params[:finalDate].should include Date.today.iso8601 }
|
62
62
|
it { search_params[:initialDate].should include Date.yesterday.iso8601 }
|
63
|
-
|
63
|
+
|
64
64
|
it "should call parse_dates" do
|
65
65
|
PagSeguro::Query.should_receive(:parse_dates)
|
66
66
|
search_params
|
@@ -2,12 +2,12 @@
|
|
2
2
|
require "spec_helper"
|
3
3
|
|
4
4
|
describe PagSeguro::Sender do
|
5
|
-
context "instance" do
|
5
|
+
context "instance" do
|
6
6
|
it { should have_attribute_accessor(:email) }
|
7
7
|
it { should have_attribute_accessor(:name) }
|
8
8
|
it { should have_attribute_accessor(:phone_ddd) }
|
9
9
|
it { should have_attribute_accessor(:phone_number) }
|
10
|
-
|
10
|
+
|
11
11
|
context "initialized with all attributes" do
|
12
12
|
subject { PagSeguro::Sender.new attributes_for(:sender) }
|
13
13
|
its(:name){ should == "Stefano Diem Benatti" }
|
@@ -15,7 +15,7 @@ describe PagSeguro::Sender do
|
|
15
15
|
its(:phone_ddd){ should == 11 }
|
16
16
|
its(:phone_number){ should == 993430994 }
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
context "with invalid e-mail" do
|
20
20
|
subject { build :sender, email: "nothing" }
|
21
21
|
its(:email){ should be_nil }
|
@@ -50,7 +50,7 @@ describe PagSeguro::Sender do
|
|
50
50
|
it { should be_a_valid_name }
|
51
51
|
its(:name){ should == "a" * 50 }
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
context "with double spaces in name" do
|
55
55
|
subject { build :sender, name: "Stefano Benatti" }
|
56
56
|
it { should be_a_valid_name }
|
@@ -67,4 +67,4 @@ describe PagSeguro::Sender do
|
|
67
67
|
its(:phone_number){ should be_nil }
|
68
68
|
end
|
69
69
|
end
|
70
|
-
end
|
70
|
+
end
|
@@ -18,14 +18,14 @@ describe PagSeguro::Shipping do
|
|
18
18
|
|
19
19
|
describe "instance" do
|
20
20
|
subject{ build(:shipping) }
|
21
|
-
|
21
|
+
|
22
22
|
it { should be_valid }
|
23
23
|
its(:cost){ should == "12.13" }
|
24
24
|
its(:postal_code){ should == "05363000" }
|
25
25
|
|
26
26
|
context "with invalid postal_code" do
|
27
27
|
subject{ build(:shipping, postal_code: 1234567) }
|
28
|
-
its(:postal_code){ should be_blank }
|
28
|
+
its(:postal_code){ should be_blank }
|
29
29
|
end
|
30
30
|
|
31
31
|
context "with type 1" do
|
@@ -43,4 +43,4 @@ describe PagSeguro::Shipping do
|
|
43
43
|
it { should be_unidentified }
|
44
44
|
end
|
45
45
|
end
|
46
|
-
end
|
46
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pag_seguro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefano Diem Benatti
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-05-
|
11
|
+
date: 2013-05-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|