payment_recipes 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/lib/payment_recipes/paypal/rest/action/capture_authorization.rb +27 -0
  3. data/lib/payment_recipes/paypal/rest/action/create_payment.rb +73 -0
  4. data/lib/payment_recipes/paypal/rest/action/execute_payment.rb +25 -0
  5. data/lib/payment_recipes/paypal/rest/action/refund_capture.rb +24 -0
  6. data/lib/payment_recipes/paypal/rest/action/refund_sale.rb +24 -0
  7. data/lib/payment_recipes/paypal/rest/action/void_authorization.rb +24 -0
  8. data/lib/payment_recipes/paypal/rest/authorization.rb +172 -0
  9. data/lib/payment_recipes/paypal/rest/capture.rb +140 -0
  10. data/lib/payment_recipes/paypal/rest/payer.rb +38 -0
  11. data/lib/payment_recipes/paypal/rest/payment.rb +126 -0
  12. data/lib/payment_recipes/paypal/rest/refund.rb +160 -0
  13. data/lib/payment_recipes/paypal/rest/sale.rb +172 -0
  14. data/lib/payment_recipes/paypal/rest/settings.rb +18 -0
  15. data/lib/payment_recipes/paypal/rest/transaction.rb +118 -0
  16. data/lib/payment_recipes/paypal/soap/action/capture_authorization.rb +104 -0
  17. data/lib/payment_recipes/paypal/soap/action/create_express_checkout_payment.rb +76 -0
  18. data/lib/payment_recipes/paypal/soap/action/execute_express_checkout_payment.rb +131 -0
  19. data/lib/payment_recipes/paypal/soap/action/perform_direct_payment.rb +62 -0
  20. data/lib/payment_recipes/paypal/soap/settings.rb +22 -0
  21. data/lib/payment_recipes/paypal/soap/transaction.rb +116 -0
  22. data/lib/payment_recipes/utils/action.rb +145 -8
  23. data/lib/payment_recipes/version.rb +1 -1
  24. data/lib/payment_recipes.rb +24 -15
  25. metadata +37 -17
  26. data/lib/payment_recipes/paypal/action/capture_authorization.rb +0 -25
  27. data/lib/payment_recipes/paypal/action/create_payment.rb +0 -66
  28. data/lib/payment_recipes/paypal/action/execute_payment.rb +0 -17
  29. data/lib/payment_recipes/paypal/action/refund_capture.rb +0 -22
  30. data/lib/payment_recipes/paypal/action/refund_sale.rb +0 -22
  31. data/lib/payment_recipes/paypal/action/void_authorization.rb +0 -22
  32. data/lib/payment_recipes/paypal/authorization.rb +0 -170
  33. data/lib/payment_recipes/paypal/capture.rb +0 -138
  34. data/lib/payment_recipes/paypal/payer.rb +0 -36
  35. data/lib/payment_recipes/paypal/payment.rb +0 -124
  36. data/lib/payment_recipes/paypal/refund.rb +0 -158
  37. data/lib/payment_recipes/paypal/sale.rb +0 -170
  38. data/lib/payment_recipes/paypal/settings.rb +0 -14
  39. data/lib/payment_recipes/paypal/transaction.rb +0 -116
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 66541abdf7844f23ca778f821c3220c2aac9dcbd
4
- data.tar.gz: 78b1f94824133cc81cdb4f200e1b6f8f563f7403
3
+ metadata.gz: 60ecc7638850540116e27e88c520b2b7d2ff8b60
4
+ data.tar.gz: 1249548f4b18acb1bc8c1b6f29f6efa5aaacf8ab
5
5
  SHA512:
6
- metadata.gz: 6bef25ec95f76928833bc96aa736a902c6940f37f61cc8be70a24df8e267b351c4fdde341b4402cc8eb33be91f19ab752f57a7e44e8bf0ed8b262fd3c2e9ad58
7
- data.tar.gz: bc32138fa4b1630529b75ddb4b98f7abbafa9bfbe8c5660471b2360be6f3c156e5f3900602c40bf5eac4ddb7a2ccc9713d9e70a65161f1bcaed76680fd4ab47b
6
+ metadata.gz: 36dead83b189551ef563ffbce73c5cb9f92529aab5631decb9a870b2a70508331c1944929568e2d36e385e37941ead13919982327ded5c48e042f0dccbae6c4a
7
+ data.tar.gz: d3146a05564469ab2786b9ec118f8af9490e8779ee08488daf793f050a9500f05dd43db03a32a145aff3e43bf37a958576b190b0f01a1e878584f1aca6e861d6
@@ -0,0 +1,27 @@
1
+ module PaymentRecipes
2
+ module PayPal
3
+ module REST
4
+ module Action
5
+ class CaptureAuthorization < PaymentRecipes::Utils::Action
6
+ variable :authorization, "PaymentRecipes::PayPal::REST::Authorization"
7
+
8
+ def perform
9
+ if @authorization.can_be_captured?
10
+ currency = @authorization.currency
11
+ total = @authorization.total.to_s
12
+
13
+ @authorization.raw_authorization.capture({:amount => { :currency => currency, :total => total } })
14
+
15
+ @authorization.reload!
16
+ @authorization.reload_payment!
17
+ else
18
+ raise Exception, "Authorization can't be captured"
19
+ end
20
+
21
+ @authorization
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,73 @@
1
+ module PaymentRecipes
2
+ module PayPal
3
+ module REST
4
+ module Action
5
+ class CreatePayment < PaymentRecipes::Utils::Action
6
+ variable :intent, "Symbol"
7
+ variable :attributes, "Hash"
8
+ variable :amount, "Money"
9
+ variable :description, "String"
10
+
11
+ include ::PaymentRecipes::Utils::Converters
12
+
13
+ def perform
14
+ unless [:sale, :authorize].include?(intent)
15
+ raise Exception, "Allowed values for intent: :sale, :authorize"
16
+ end
17
+
18
+ create_paypal_payment!
19
+ find_payment!
20
+
21
+ payment
22
+ end
23
+
24
+ def create_paypal_payment!
25
+ store(:paypal_payment) do
26
+ new_paypal_payment = ::PayPal::SDK::REST::Payment.new(payment_attributes)
27
+ new_paypal_payment.create
28
+
29
+ new_paypal_payment
30
+ end
31
+ end
32
+
33
+ def find_payment!
34
+ store(:payment) do
35
+ ::PaymentRecipes::PayPal::REST::Payment.find(paypal_payment.id)
36
+ end
37
+ end
38
+
39
+ def redirect_url
40
+ paypal_payment.links.select { |link| link.rel == 'approval_url' }.first.href rescue nil
41
+ end
42
+
43
+ def sale
44
+ return nil unless payment
45
+
46
+ payment.sale
47
+ end
48
+
49
+ def authorization
50
+ return nil unless payment
51
+
52
+ payment.authorization
53
+ end
54
+
55
+ def payment_attributes
56
+ {
57
+ "intent" => convert_to_string(intent),
58
+ "transactions" => [
59
+ {
60
+ "amount" => {
61
+ "total" => amount.to_s,
62
+ "currency" => amount.currency.iso_code
63
+ },
64
+ "description" => description
65
+ }
66
+ ]
67
+ }.merge(attributes)
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,25 @@
1
+ module PaymentRecipes
2
+ module PayPal
3
+ module REST
4
+ module Action
5
+ class ExecutePayment < PaymentRecipes::Utils::Action
6
+ variable :payment, "PaymentRecipes::PayPal::REST::Payment"
7
+ variable :payer_id, "String"
8
+
9
+ def perform
10
+ @payment.raw_payment.execute( :payer_id => payer_id )
11
+ @payment.reload!
12
+
13
+ @payment
14
+ end
15
+
16
+ def authorization
17
+ return nil unless payment
18
+
19
+ payment.authorization
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,24 @@
1
+ module PaymentRecipes
2
+ module PayPal
3
+ module REST
4
+ module Action
5
+ class RefundCapture < PaymentRecipes::Utils::Action
6
+ variable :capture, "PaymentRecipes::PayPal::REST::Capture"
7
+
8
+ def perform
9
+ if @capture.can_be_refunded?
10
+ @capture.raw_capture.refund({})
11
+
12
+ @capture.reload!
13
+ @capture.reload_payment!
14
+ else
15
+ raise Exception, "Capture can't be refunded"
16
+ end
17
+
18
+ @capture
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ module PaymentRecipes
2
+ module PayPal
3
+ module REST
4
+ module Action
5
+ class RefundSale < PaymentRecipes::Utils::Action
6
+ variable :sale, "PaymentRecipes::PayPal::REST::Sale"
7
+
8
+ def perform
9
+ if @sale.can_be_refunded?
10
+ @sale.raw_sale.refund({})
11
+
12
+ @sale.reload!
13
+ @sale.reload_payment!
14
+ else
15
+ raise Exception, "Sale can't be refunded"
16
+ end
17
+
18
+ @sale
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ module PaymentRecipes
2
+ module PayPal
3
+ module REST
4
+ module Action
5
+ class VoidAuthorization < PaymentRecipes::Utils::Action
6
+ variable :authorization, "PaymentRecipes::PayPal::REST::Authorization"
7
+
8
+ def perform
9
+ if @authorization.can_be_captured?
10
+ @authorization.raw_authorization.void()
11
+
12
+ @authorization.reload!
13
+ @authorization.reload_payment!
14
+ else
15
+ raise Exception, "Authorization can't be voided"
16
+ end
17
+
18
+ @authorization
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,172 @@
1
+ module PaymentRecipes
2
+ module PayPal
3
+ module REST
4
+ class Authorization
5
+ attr_reader :id
6
+ attr_reader :currency
7
+ attr_reader :total
8
+ attr_reader :payment
9
+ attr_reader :payment_id
10
+ attr_reader :subtotal
11
+ attr_reader :state
12
+ attr_reader :create_time
13
+ attr_reader :update_time
14
+ attr_reader :valid_until
15
+
16
+ attr_reader :payment_mode
17
+ attr_reader :protection_eligibility
18
+ attr_reader :protection_eligibility_type
19
+
20
+ attr_reader :expanded
21
+ attr_reader :raw_authorization
22
+
23
+ include ::PaymentRecipes::Utils::Converters
24
+ include ::PaymentRecipes::Utils::Equality
25
+
26
+ def initialize(paypal_authorization, payment: nil, expanded: false)
27
+ unless paypal_authorization.is_a?(::PayPal::SDK::REST::DataTypes::Authorization)
28
+ raise Exception, "#{ self.class.name } must be initialized with a PayPal Authorization"
29
+ end
30
+
31
+ if payment
32
+ unless payment.is_a?(::PaymentRecipes::PayPal::REST::Payment)
33
+ raise Exception, "Parameter payment must be a PaymentRecipes::PayPal::Payment"
34
+ end
35
+
36
+ @payment = payment
37
+ @payment_id = payment.id
38
+ end
39
+
40
+ extract_and_store(paypal_authorization)
41
+ @expanded = expanded
42
+ end
43
+
44
+ def reload!
45
+ paypal_authorization = self.class.find_raw(@id)
46
+ extract_and_store(paypal_authorization)
47
+ @expanded = true
48
+
49
+ self
50
+ end
51
+
52
+ def reload_payment!
53
+ @payment = ::PaymentRecipes::PayPal::REST::Payment.find(@payment_id)
54
+
55
+ @payment
56
+ end
57
+
58
+ def payment
59
+ reload_payment! unless @payment
60
+
61
+ @payment
62
+ end
63
+
64
+ def payment_mode
65
+ reload! unless @payment_mode
66
+
67
+ @payment_mode
68
+ end
69
+
70
+ def protection_eligibility
71
+ reload! unless @protection_eligibility
72
+
73
+ @protection_eligibility
74
+ end
75
+
76
+ def protection_eligibility_type
77
+ reload! unless @protection_eligibility_type
78
+
79
+ @protection_eligibility_type
80
+ end
81
+
82
+ def captures
83
+ payment.captures
84
+ end
85
+
86
+ def capture
87
+ captures.first
88
+ end
89
+
90
+ def inspect
91
+ to_str
92
+ end
93
+
94
+ def pending?
95
+ @state == :pending
96
+ end
97
+
98
+ def authorized?
99
+ @state == :authorized
100
+ end
101
+
102
+ def partially_captured?
103
+ @state == :partially_captured
104
+ end
105
+
106
+ def captured?
107
+ @state == :captured
108
+ end
109
+
110
+ def expired?
111
+ @state == :expired
112
+ end
113
+
114
+ def voided?
115
+ @state == :voided
116
+ end
117
+
118
+ def can_be_captured?
119
+ authorized? || partially_captured?
120
+ end
121
+
122
+ def to_s
123
+ to_str
124
+ end
125
+
126
+ def to_str
127
+ "<#{ self.class.name } total=#{ @total.format } state=#{ @state } id=#{ @id }>"
128
+ end
129
+
130
+ class << self
131
+ def find(id)
132
+ paypal_authorization = find_raw(id)
133
+
134
+ if paypal_authorization
135
+ new(paypal_authorization, payment: nil, expanded: true)
136
+ else
137
+ nil
138
+ end
139
+ end
140
+
141
+ def find_raw(id)
142
+ begin
143
+ ::PayPal::SDK::REST::Authorization.find(id)
144
+
145
+ rescue ::PayPal::SDK::Core::Exceptions::ResourceNotFound
146
+ nil
147
+ end
148
+ end
149
+ end
150
+
151
+ private
152
+
153
+ def extract_and_store(paypal_authorization)
154
+ @id = convert_to_string(paypal_authorization.id)
155
+ @currency = convert_to_string(paypal_authorization.amount.currency)
156
+ @total = convert_to_money(amount: paypal_authorization.amount.total, currency: @currency)
157
+ @subtotal = convert_to_money(amount: paypal_authorization.amount.details.subtotal, currency: @currency)
158
+ @create_time = convert_to_time(paypal_authorization.create_time)
159
+ @update_time = convert_to_time(paypal_authorization.update_time)
160
+ @valid_until = convert_to_time(paypal_authorization.valid_until)
161
+ @payment_id = convert_to_string(paypal_authorization.parent_payment)
162
+ @state = convert_to_symbol(paypal_authorization.state)
163
+ @raw_authorization = paypal_authorization
164
+
165
+ @payment_mode = convert_to_string(paypal_authorization.payment_mode)
166
+ @protection_eligibility = convert_to_string(paypal_authorization.protection_eligibility)
167
+ @protection_eligibility_type = convert_to_string(paypal_authorization.protection_eligibility_type)
168
+ end
169
+ end
170
+ end
171
+ end
172
+ end
@@ -0,0 +1,140 @@
1
+ module PaymentRecipes
2
+ module PayPal
3
+ module REST
4
+ class Capture
5
+ attr_reader :currency
6
+ attr_reader :total
7
+ attr_reader :create_time
8
+ attr_reader :id
9
+ attr_reader :payment
10
+ attr_reader :payment_id
11
+ attr_reader :state
12
+ attr_reader :update_time
13
+ attr_reader :transaction_fee
14
+ attr_reader :raw_capture
15
+
16
+ include ::PaymentRecipes::Utils::Converters
17
+ include ::PaymentRecipes::Utils::Equality
18
+
19
+ def initialize(paypal_capture, payment: nil)
20
+ unless paypal_capture.is_a?(::PayPal::SDK::REST::DataTypes::Capture)
21
+ raise Exception, "#{ self.class.name } must be initialized with a PayPal Capture"
22
+ end
23
+
24
+ if payment
25
+ unless payment.is_a?(::PaymentRecipes::PayPal::REST::Payment)
26
+ raise Exception, "Parameter payment must be a PaymentRecipes::PayPal::Payment"
27
+ end
28
+
29
+ @payment = payment
30
+ @payment_id = payment.id
31
+ end
32
+
33
+ extract_and_store(paypal_capture)
34
+ end
35
+
36
+ def reload!
37
+ paypal_capture = self.class.find_raw(@id)
38
+ extract_and_store(paypal_capture)
39
+
40
+ self
41
+ end
42
+
43
+ def reload_payment!
44
+ @payment = ::PaymentRecipes::PayPal::REST::Payment.find(@payment_id)
45
+
46
+ @payment
47
+ end
48
+
49
+ def payment
50
+ reload_payment! unless @payment
51
+
52
+ @payment
53
+ end
54
+
55
+ def authorizations
56
+ payment.authorizations
57
+ end
58
+
59
+ def authorization
60
+ payment.authorization
61
+ end
62
+
63
+ def refunds
64
+ payment.refunds.select do |refund|
65
+ refund.capture_id == @id
66
+ end
67
+ end
68
+
69
+ def refund
70
+ refunds.first
71
+ end
72
+
73
+ def can_be_refunded?
74
+ completed?
75
+ end
76
+
77
+ def pending?
78
+ @state == :pending
79
+ end
80
+
81
+ def completed?
82
+ @state == :completed
83
+ end
84
+
85
+ def refunded?
86
+ @state = :refunded
87
+ end
88
+
89
+ def partially_refunded?
90
+ @state = :partially_refunded
91
+ end
92
+
93
+ def inspect
94
+ to_str
95
+ end
96
+
97
+ def to_s
98
+ to_str
99
+ end
100
+
101
+ def to_str
102
+ "<#{ self.class.name } total=#{ @total.format } state=#{ @state } id=#{ @id }>"
103
+ end
104
+
105
+ class << self
106
+ def find(id)
107
+ paypal_capture = find_raw(id)
108
+
109
+ if paypal_capture
110
+ new(paypal_capture, payment: nil)
111
+ else
112
+ nil
113
+ end
114
+ end
115
+
116
+ def find_raw(id)
117
+ begin
118
+ ::PayPal::SDK::REST::Capture.find(id)
119
+
120
+ rescue ::PayPal::SDK::Core::Exceptions::ResourceNotFound
121
+ nil
122
+ end
123
+ end
124
+ end
125
+
126
+ def extract_and_store(paypal_capture)
127
+ @currency = convert_to_string(paypal_capture.amount.currency)
128
+ @total = convert_to_money(amount: paypal_capture.amount.total, currency: @currency)
129
+ @create_time = convert_to_time(paypal_capture.create_time)
130
+ @update_time = convert_to_time(paypal_capture.update_time)
131
+ @id = convert_to_string(paypal_capture.id)
132
+ @payment_id = convert_to_string(paypal_capture.parent_payment)
133
+ @state = convert_to_symbol(paypal_capture.state)
134
+ @transaction_fee = convert_to_money(amount: paypal_capture.transaction_fee.value, currency: paypal_capture.transaction_fee.currency)
135
+ @raw_capture = paypal_capture
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,38 @@
1
+ module PaymentRecipes
2
+ module PayPal
3
+ module REST
4
+ class Payer
5
+ attr_reader :payment_method
6
+ attr_reader :funding_instruments
7
+ attr_reader :raw_payer
8
+
9
+ include ::PaymentRecipes::Utils::Converters
10
+
11
+ def initialize(paypal_payer)
12
+ unless paypal_payer.is_a?(::PayPal::SDK::REST::DataTypes::Payer)
13
+ raise Exception, "#{ self.class.name } must be initialized with a PayPal Payer"
14
+ end
15
+
16
+ @payment_method = convert_to_symbol(paypal_payer.payment_method)
17
+ @raw_payer = paypal_payer
18
+ end
19
+
20
+ def funding_instrument
21
+ @funding_instruments.first
22
+ end
23
+
24
+ def inspect
25
+ to_str
26
+ end
27
+
28
+ def to_s
29
+ to_str
30
+ end
31
+
32
+ def to_str
33
+ "<#{ self.class.name } payment_method=#{ @payment_method }>"
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,126 @@
1
+ module PaymentRecipes
2
+ module PayPal
3
+ module REST
4
+ class Payment
5
+ attr_reader :id
6
+ attr_reader :intent
7
+ attr_reader :create_time
8
+ attr_reader :update_time
9
+ attr_reader :state
10
+ attr_reader :transactions
11
+ attr_reader :sales
12
+ attr_reader :authorizations
13
+ attr_reader :captures
14
+ attr_reader :refunds
15
+ attr_reader :payer
16
+ attr_reader :raw_payment
17
+
18
+ include ::PaymentRecipes::Utils::Converters
19
+ include ::PaymentRecipes::Utils::Equality
20
+
21
+ def initialize(paypal_payment, expand: false)
22
+ unless paypal_payment.is_a?(::PayPal::SDK::REST::DataTypes::Payment)
23
+ raise Exception, "#{ self.class.name } must be initialized with a PayPal Payment"
24
+ end
25
+
26
+ extract_and_store(paypal_payment, expand: expand)
27
+ end
28
+
29
+ def reload!
30
+ paypal_payment = self.class.find_raw(@id)
31
+ extract_and_store(paypal_payment)
32
+
33
+ self
34
+ end
35
+
36
+ def transaction
37
+ @transactions.first
38
+ end
39
+
40
+ def sale
41
+ @sales.first
42
+ end
43
+
44
+ def authorization
45
+ @authorizations.first
46
+ end
47
+
48
+ def capture
49
+ @captures.first
50
+ end
51
+
52
+ def refund
53
+ @refunds.first
54
+ end
55
+
56
+ def inspect
57
+ to_str
58
+ end
59
+
60
+ def to_s
61
+ to_str
62
+ end
63
+
64
+ def to_str
65
+ "<#{ self.class.name } intent=#{ @intent } state=#{ @state } id=#{ @id }>"
66
+ end
67
+
68
+ class << self
69
+ def find(id, expand: false)
70
+ paypal_payment = find_raw(id)
71
+
72
+ if paypal_payment
73
+ new(paypal_payment, expand: expand)
74
+ else
75
+ nil
76
+ end
77
+ end
78
+
79
+ def find_raw(id)
80
+ begin
81
+ ::PayPal::SDK::REST::Payment.find(id)
82
+
83
+ rescue ::PayPal::SDK::Core::Exceptions::ResourceNotFound
84
+ nil
85
+ end
86
+ end
87
+
88
+ def history(count:, page: 1, expand: false)
89
+ paypal_payment_history = ::PayPal::SDK::REST::Payment.all(count: count, start_index: count * (page - 1))
90
+
91
+ paypal_payment_history.payments.map do |paypal_payment|
92
+ new(paypal_payment, expand: expand)
93
+ end
94
+ end
95
+ end
96
+
97
+ private
98
+
99
+ def extract_and_store(paypal_payment, expand: false)
100
+ @id = convert_to_string(paypal_payment.id)
101
+ @intent = convert_to_symbol(paypal_payment.intent)
102
+ @create_time = convert_to_time(paypal_payment.create_time)
103
+ @update_time = convert_to_time(paypal_payment.update_time)
104
+ @state = convert_to_symbol(paypal_payment.state)
105
+ @raw_payment = paypal_payment
106
+ @transactions = []
107
+ @sales = []
108
+ @authorizations = []
109
+ @captures = []
110
+ @refunds = []
111
+ @payer = ::PaymentRecipes::PayPal::REST::Payer.new(paypal_payment.payer)
112
+
113
+ paypal_payment.transactions.each do |paypal_transaction|
114
+ transaction = ::PaymentRecipes::PayPal::REST::Transaction.new(paypal_transaction, payment: self, expand: expand)
115
+ @sales += transaction.sales
116
+ @authorizations += transaction.authorizations
117
+ @captures += transaction.captures
118
+ @refunds += transaction.refunds
119
+
120
+ @transactions << transaction
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end