active_merchant_every_pay 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b16416f31367ed866423531ebee7e250d3df2b2d39d72b97fd06b6d72fecbc9d
4
+ data.tar.gz: a051c3ce222fc4fc7f656b73896ff969d8d7269990074d51d88c9c770f3a976e
5
+ SHA512:
6
+ metadata.gz: 3eb75bc2ecd845b3035e887eacaca40682a1b266e5fd9c6e771fdd7604a16bded54632d537699fa7f86d1e487efde73a007489680726f99b1fc290e901f29361
7
+ data.tar.gz: ce0d3f5e227d5ac20abcf0c681b78472ee10e54b2261bcadf712dd843276c2438482e3778f369f5592f6a6284946e0baec021e16b9aa7b69d49df3ebcf0d8500
@@ -0,0 +1,3 @@
1
+ ## 1.0.0
2
+
3
+ * Initial version
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2017, CubeSystems <info@cubesystems.lv>
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,39 @@
1
+ EveryPay gateway for Active Merchant
2
+ =============================================
3
+
4
+ [![Build Status](https://travis-ci.org/cubesystems/active_merchant_every_pay.svg?branch=master)](https://travis-ci.org/cubesystems/active_merchant_every_pay)
5
+ [![Coverage Status](https://coveralls.io/repos/github/cubesystems/active_merchant_every_pay/badge.svg?branch=master)](https://coveralls.io/github/cubesystems/active_merchant_every_pay?branch=master)
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ $ gem install active_merchant_every_pay
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ```ruby
16
+ require "active_merchant_every_pay"
17
+
18
+ gateway = ActiveMerchant::Billing::EveryPayGateway.new(
19
+ api_username: "abc12345",
20
+ api_secret: "asdsasdsdasd",
21
+ account_name: "EUR1",
22
+ gateway_url: "https://igw-demo.every-pay.com/api/v3",
23
+ customer_url: "https://shop.example.com/cart"
24
+ )
25
+
26
+ # Authorize for 10 euros and 34 cents
27
+ response = gateway.authorize(1034, order_reference: "order #123", email: "client@example.com", customer_ip: "127.0.0.1")
28
+
29
+ # Use this url to redirect user to merchant portal
30
+ response.authorization
31
+
32
+ # Read status
33
+ gateway.result(payment_reference: response.payment_reference)
34
+ ```
35
+
36
+ ### Gateways
37
+ #### SEB
38
+ test: `https://igw-demo.every-pay.com/api/v3`
39
+ production: `https://payment.ecommerce.sebgroup.com/api/v3`
@@ -0,0 +1,234 @@
1
+ module ActiveMerchant
2
+ module Billing
3
+ class EveryPayApiScheme
4
+ REQUIRED_PARAM = :required
5
+ OPTIONAL_PARAM = :optional
6
+
7
+ TOKEN_AGREEMENT_RECURRING = 'recurring'
8
+ TOKEN_AGREEMENT_UNSCHEDULED = 'unscheduled'
9
+
10
+ POST_REQUEST = :post
11
+ GET_REQUEST = :get
12
+
13
+ PAYMENT_STATES = [
14
+ PAYMENT_STATE_INITIAL = "initial",
15
+ PAYMENT_STATE_SETTLED = "settled",
16
+ PAYMENT_STATE_VOIDED = "voided",
17
+ PAYMENT_STATE_FAILED = "failed",
18
+ PAYMENT_STATE_REFUNDED = "refunded",
19
+ PAYMENT_STATE_ABANDONED = "abandoned",
20
+ PAYMENT_STATE_AUTHORIZED = "authorized",
21
+ PAYMENT_STATE_CHARGEBACKED = "chargebacked",
22
+ PAYMENT_STATE_WAITING_FOR_3DS_RESPONSE = "waiting_for_3ds_response",
23
+ PAYMENT_STATE_WAITING_FOR_BAV = "waiting_for_bav"
24
+ ]
25
+
26
+ SCHEME = {
27
+ make_oneoff_payment: {
28
+ request: {
29
+ method: POST_REQUEST,
30
+ path: "/payments/oneoff",
31
+ params: {
32
+ api_username: REQUIRED_PARAM,
33
+ account_name: REQUIRED_PARAM,
34
+ amount: REQUIRED_PARAM,
35
+ customer_url: REQUIRED_PARAM,
36
+ token_agreement: OPTIONAL_PARAM,
37
+ mobile_payment: OPTIONAL_PARAM,
38
+ order_reference: OPTIONAL_PARAM,
39
+ nonce: REQUIRED_PARAM,
40
+ email: OPTIONAL_PARAM,
41
+ customer_ip: OPTIONAL_PARAM,
42
+ preferred_country: OPTIONAL_PARAM,
43
+ billing_city: OPTIONAL_PARAM,
44
+ billing_country: OPTIONAL_PARAM,
45
+ billing_line1: OPTIONAL_PARAM,
46
+ billing_line2: OPTIONAL_PARAM,
47
+ billing_line3: OPTIONAL_PARAM,
48
+ billing_postcode: OPTIONAL_PARAM,
49
+ billing_state: OPTIONAL_PARAM,
50
+ shipping_city: OPTIONAL_PARAM,
51
+ shipping_country: OPTIONAL_PARAM,
52
+ shipping_line1: OPTIONAL_PARAM,
53
+ shipping_line2: OPTIONAL_PARAM,
54
+ shipping_line3: OPTIONAL_PARAM,
55
+ shipping_code: OPTIONAL_PARAM,
56
+ shipping_state: OPTIONAL_PARAM,
57
+ locale: OPTIONAL_PARAM,
58
+ request_token: OPTIONAL_PARAM,
59
+ timestamp: REQUIRED_PARAM,
60
+ skin_name: OPTIONAL_PARAM,
61
+ integration_details: OPTIONAL_PARAM
62
+ }
63
+ },
64
+ response: {
65
+ successful_states: [PAYMENT_STATE_INITIAL]
66
+ }
67
+ },
68
+ make_mit_payment: {
69
+ request: {
70
+ method: POST_REQUEST,
71
+ path: "/payments/mit",
72
+ params: {
73
+ api_username: REQUIRED_PARAM,
74
+ account_name: REQUIRED_PARAM,
75
+ amount: REQUIRED_PARAM,
76
+ token_agreement: REQUIRED_PARAM,
77
+ merchant_ip: REQUIRED_PARAM,
78
+ order_reference: OPTIONAL_PARAM,
79
+ nonce: REQUIRED_PARAM,
80
+ email: OPTIONAL_PARAM,
81
+ timestamp: REQUIRED_PARAM,
82
+ token: REQUIRED_PARAM,
83
+ integration_details: OPTIONAL_PARAM
84
+ }
85
+ },
86
+ response: {
87
+ successful_states: [PAYMENT_STATE_SETTLED]
88
+ }
89
+ },
90
+ make_cit_payment: {
91
+ request: {
92
+ method: POST_REQUEST,
93
+ path: "/payments/cit",
94
+ params: {
95
+ api_username: REQUIRED_PARAM,
96
+ account_name: REQUIRED_PARAM,
97
+ amount: REQUIRED_PARAM,
98
+ token_agreement: OPTIONAL_PARAM,
99
+ order_reference: REQUIRED_PARAM,
100
+ nonce: REQUIRED_PARAM,
101
+ email: OPTIONAL_PARAM,
102
+ customer_ip: OPTIONAL_PARAM,
103
+ customer_url: REQUIRED_PARAM,
104
+ timestamp: REQUIRED_PARAM,
105
+ token: REQUIRED_PARAM,
106
+ billing_city: OPTIONAL_PARAM,
107
+ billing_country: OPTIONAL_PARAM,
108
+ billing_line1: OPTIONAL_PARAM,
109
+ billing_line2: OPTIONAL_PARAM,
110
+ billing_line3: OPTIONAL_PARAM,
111
+ billing_postcode: OPTIONAL_PARAM,
112
+ billing_state: OPTIONAL_PARAM,
113
+ integration_details: OPTIONAL_PARAM
114
+ }
115
+ },
116
+ response: {
117
+ successful_states: [PAYMENT_STATE_WAITING_FOR_3DS_RESPONSE]
118
+ }
119
+ },
120
+ capture_payment: {
121
+ request: {
122
+ method: POST_REQUEST,
123
+ path: "/payments/capture",
124
+ params: {
125
+ api_username: REQUIRED_PARAM,
126
+ amount: REQUIRED_PARAM,
127
+ payment_reference: REQUIRED_PARAM,
128
+ nonce: REQUIRED_PARAM,
129
+ timestamp: REQUIRED_PARAM,
130
+ }
131
+ },
132
+ response: {
133
+ successful_states: [PAYMENT_STATE_SETTLED]
134
+ }
135
+ },
136
+ refund_payment: {
137
+ request: {
138
+ method: POST_REQUEST,
139
+ path: "/payments/refund",
140
+ params: {
141
+ api_username: REQUIRED_PARAM,
142
+ amount: REQUIRED_PARAM,
143
+ payment_reference: REQUIRED_PARAM,
144
+ nonce: REQUIRED_PARAM,
145
+ timestamp: REQUIRED_PARAM,
146
+ }
147
+ },
148
+ response: {
149
+ successful_states: [PAYMENT_STATE_REFUNDED]
150
+ }
151
+ },
152
+ void_payment: {
153
+ request: {
154
+ method: POST_REQUEST,
155
+ path: "/payments/void",
156
+ params: {
157
+ api_username: REQUIRED_PARAM,
158
+ payment_reference: REQUIRED_PARAM,
159
+ nonce: REQUIRED_PARAM,
160
+ timestamp: REQUIRED_PARAM,
161
+ reason: REQUIRED_PARAM,
162
+ }
163
+ },
164
+ response: {
165
+ successful_states: [PAYMENT_STATE_VOIDED]
166
+ }
167
+ },
168
+ payment_reference: {
169
+ request: {
170
+ method: GET_REQUEST,
171
+ path: "/payments/:payment_reference",
172
+ params: {
173
+ api_username: REQUIRED_PARAM,
174
+ payment_reference: REQUIRED_PARAM
175
+ }
176
+ },
177
+ response: {
178
+ successful_states: [PAYMENT_STATE_SETTLED]
179
+ }
180
+ },
181
+ }
182
+
183
+ def self.for api_call
184
+ new(api_call)
185
+ end
186
+
187
+ def initialize api_call
188
+ @api_call = api_call
189
+ @scheme = SCHEME.fetch(api_call)
190
+ end
191
+
192
+ def successful_response? json_response
193
+ successful_response_states = @scheme.fetch(:response, {}).fetch(:successful_states, [])
194
+
195
+ successful_response_states.empty? || successful_response_states.include?(json_response["payment_state"])
196
+ end
197
+
198
+ def validate_params params
199
+ mandatory_params = request_params.map{|key, type| key if type == REQUIRED_PARAM }.compact
200
+ all_params = request_params.keys
201
+
202
+ missing_params = mandatory_params - params.keys
203
+ raise ArgumentError, "Missing request params: #{missing_params}" if missing_params.any?
204
+
205
+ unknown_params = params.keys - request_params.keys
206
+ raise ArgumentError, "Unknown request params: #{unknown_params}" if unknown_params.any?
207
+ end
208
+
209
+ def name
210
+ @api_call
211
+ end
212
+
213
+ def request_params
214
+ @scheme.fetch(:request).fetch(:params, {})
215
+ end
216
+
217
+ def request_method
218
+ @scheme.fetch(:request).fetch(:method)
219
+ end
220
+
221
+ def post_request?
222
+ request_method == POST_REQUEST
223
+ end
224
+
225
+ def get_request?
226
+ request_method == GET_REQUEST
227
+ end
228
+
229
+ def request_path
230
+ @scheme.fetch(:request).fetch(:path)
231
+ end
232
+ end
233
+ end
234
+ end
@@ -0,0 +1,138 @@
1
+ module ActiveMerchant
2
+ module Billing
3
+ class EveryPayGateway < Gateway
4
+
5
+ TEST_GATEWAY_URL = "https://igw-demo.every-pay.com/api/v3"
6
+
7
+ self.display_name = "EveryPay"
8
+ self.money_format = :dollars
9
+
10
+ def initialize(options = {})
11
+ options[:gateway_url] = TEST_GATEWAY_URL if ActiveMerchant::Billing::Base.test?
12
+
13
+ required_options = [:api_username, :api_secret, :account_name, :gateway_url, :customer_url]
14
+
15
+ requires!(options, *required_options)
16
+ @options = options
17
+ super
18
+ end
19
+
20
+ def authorize(money, params = {})
21
+ params = params.merge(
22
+ api_username: @options[:api_username],
23
+ account_name: @options[:account_name],
24
+ customer_url: @options[:customer_url],
25
+ amount: amount(money),
26
+ nonce: nonce,
27
+ timestamp: timestamp
28
+ )
29
+
30
+ commit(:make_oneoff_payment, params)
31
+ end
32
+
33
+ def recurring_merchant(money, params = {})
34
+ params = params.merge(
35
+ api_username: @options[:api_username],
36
+ account_name: @options[:account_name],
37
+ amount: amount(money),
38
+ nonce: nonce,
39
+ timestamp: timestamp
40
+ )
41
+
42
+ commit(:make_mit_payment, params)
43
+ end
44
+
45
+ def recurring_customer(money, params = {})
46
+ params = params.merge(
47
+ api_username: @options[:api_username],
48
+ account_name: @options[:account_name],
49
+ amount: amount(money),
50
+ nonce: nonce,
51
+ timestamp: timestamp
52
+ )
53
+
54
+ commit(:make_cit_payment, params)
55
+ end
56
+
57
+ def capture(money, params = {})
58
+ params = params.merge(
59
+ api_username: @options[:api_username],
60
+ amount: amount(money),
61
+ nonce: nonce,
62
+ timestamp: timestamp
63
+ )
64
+
65
+ commit(:capture_payment, params)
66
+ end
67
+
68
+ def refund(money, params = {})
69
+ params = params.merge(
70
+ api_username: @options[:api_username],
71
+ amount: amount(money),
72
+ nonce: nonce,
73
+ timestamp: timestamp
74
+ )
75
+
76
+ commit(:refund_payment, params)
77
+ end
78
+
79
+ def void(params = {})
80
+ params = params.merge(
81
+ api_username: @options[:api_username],
82
+ nonce: nonce,
83
+ timestamp: timestamp
84
+ )
85
+
86
+ commit(:void_payment, params)
87
+ end
88
+
89
+ def result(params = {})
90
+ params = params.merge(
91
+ api_username: @options[:api_username],
92
+ )
93
+
94
+ commit(:payment_reference, params)
95
+ end
96
+
97
+ def timestamp
98
+ DateTime.now.iso8601
99
+ end
100
+
101
+ def nonce
102
+ Random.new_seed
103
+ end
104
+
105
+ def commit(api_call, params)
106
+ raw_response = nil
107
+ response = nil
108
+
109
+ scheme = EveryPayApiScheme.for(api_call)
110
+ scheme.validate_params(params)
111
+
112
+ request = EveryPayRequest.new(@options, scheme, params)
113
+ response = raw_ssl_request(request.method, request.url, request.data, request.headers)
114
+ json_response = parse(response, scheme)
115
+
116
+ EveryPayResponse.new(json_response)
117
+ end
118
+
119
+ def parse(response, scheme)
120
+ begin
121
+ json_response = JSON.parse(response.body)
122
+
123
+ if json_response["error"].nil? && !scheme.successful_response?(json_response)
124
+ json_response["error"] = {"message" => "Unsuccessful response for :#{scheme.name} API call"}
125
+ end
126
+ rescue JSON::ParserError
127
+ json_response = {
128
+ "error" => {
129
+ "message" => "Non parsable response received from the EveryPay API, status code: #{response.code}, body: #{response.body}"
130
+ }
131
+ }
132
+ end
133
+
134
+ json_response
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,42 @@
1
+ module ActiveMerchant
2
+ module Billing
3
+ class EveryPayRequest
4
+ attr_accessor :gateway_options, :scheme, :params
5
+
6
+ def initialize gateway_options, scheme, params
7
+ self.gateway_options = gateway_options
8
+ self.scheme = scheme
9
+ self.params = params
10
+ end
11
+
12
+ def data
13
+ params.to_json if scheme.post_request?
14
+ end
15
+
16
+ def url
17
+ uri = URI(gateway_options.fetch(:gateway_url))
18
+ uri.path += scheme.request_path.gsub(/(:[\w]*)/) {|m| m.gsub(m, params.fetch(m.tr(":", "").to_sym)) }
19
+
20
+ uri.query = URI.encode_www_form(params) if scheme.get_request?
21
+
22
+ uri.to_s
23
+ end
24
+
25
+ def method
26
+ scheme.request_method
27
+ end
28
+
29
+ def headers
30
+ {
31
+ "Content-Type" => "application/json",
32
+ "Accept" => "application/json",
33
+ "Authorization" => basic_auth
34
+ }
35
+ end
36
+
37
+ def basic_auth
38
+ "Basic " + Base64.strict_encode64("#{gateway_options.fetch(:api_username)}:#{gateway_options.fetch(:api_secret)}")
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,27 @@
1
+ module ActiveMerchant
2
+ module Billing
3
+ class EveryPayResponse < Response
4
+ def initialize json_response
5
+ success = json_response["error"].nil?
6
+
7
+ super success,
8
+ success ? 'SUCCESS' : json_response["error"]["message"],
9
+ json_response,
10
+ test: test?,
11
+ authorization: json_response["payment_link"]
12
+ end
13
+
14
+ def payment_state
15
+ params["payment_state"]
16
+ end
17
+
18
+ def payment_reference
19
+ params["payment_reference"]
20
+ end
21
+
22
+ def error
23
+ params["error"]
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,5 @@
1
+ require "active_merchant"
2
+ require "active_merchant/billing/every_pay_api_scheme"
3
+ require "active_merchant/billing/every_pay_request"
4
+ require "active_merchant/billing/every_pay_response"
5
+ require "active_merchant/billing/every_pay_gateway"
metadata ADDED
@@ -0,0 +1,176 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_merchant_every_pay
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - CubeSystems
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-06-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activemerchant
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.15.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.15.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.12.2
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.12.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: coveralls
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.8.23
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.8.23
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: vcr
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '5'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '5'
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3'
125
+ - !ruby/object:Gem::Dependency
126
+ name: activesupport
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '5'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '5'
139
+ description: EveryPay gateway for Active Merchant
140
+ email:
141
+ - info@cubesystems.lv
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - CHANGELOG.md
147
+ - LICENSE
148
+ - README.md
149
+ - lib/active_merchant/billing/every_pay_api_scheme.rb
150
+ - lib/active_merchant/billing/every_pay_gateway.rb
151
+ - lib/active_merchant/billing/every_pay_request.rb
152
+ - lib/active_merchant/billing/every_pay_response.rb
153
+ - lib/active_merchant_every_pay.rb
154
+ homepage: https://github.com/cubesystems/active_merchant_every_pay
155
+ licenses: []
156
+ metadata: {}
157
+ post_install_message:
158
+ rdoc_options: []
159
+ require_paths:
160
+ - lib
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ requirements: []
172
+ rubygems_version: 3.0.2
173
+ signing_key:
174
+ specification_version: 4
175
+ summary: EveryPay gateway for Active Merchant
176
+ test_files: []