wayforpay 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ac203bf9298139ac2be3e1cef08eba76fed5bcb5
4
+ data.tar.gz: b979a161c53384bd04be7c0b6fa80e2671962d89
5
+ SHA512:
6
+ metadata.gz: 5ddeae517f34a156ce8f9f7e9df02591270f4da7e889a194aeaf504e3bb872573f08ccb9aaabc16e1095c8ba0bcfefbaf54d0d17698a67e50aaef7eabd846040
7
+ data.tar.gz: b47f777278907c63dd370acf4880cbefbab53b325d6d71b01286dfd90f72f174915e80511ef199091be2739c1a0b9db108c6e19576a60558b0041f1fa929ef59
@@ -0,0 +1,2 @@
1
+ .DS_Store
2
+ Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in wayforpay.gemspec
4
+ gemspec
@@ -0,0 +1,25 @@
1
+ ## Installation
2
+
3
+ Add this line to your application's `Gemfile`:
4
+
5
+ gem 'wayforpay'
6
+
7
+ And then execute:
8
+
9
+ $ bundle install
10
+
11
+ Or install it yourself as:
12
+
13
+ $ gem install wayforpay
14
+
15
+ ## Usage
16
+
17
+ TODO: Write usage instructions
18
+
19
+ ## Contributing
20
+
21
+ 1. Fork it
22
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
23
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
24
+ 4. Push to the branch (`git push origin my-new-feature`)
25
+ 5. Create new Pull Request
@@ -0,0 +1,26 @@
1
+ require_relative 'wayforpay/constants'
2
+ require_relative 'wayforpay/encrypt_field'
3
+ require_relative 'wayforpay/payments'
4
+ require_relative 'wayforpay/request'
5
+ require_relative 'wayforpay/util/configuration'
6
+
7
+ module Wayforpay
8
+ extend SingleForwardable
9
+
10
+ def_delegators :configuration, :merchant_account,
11
+ :merchant_domain_name, :encrypt_secret_key
12
+
13
+ # Pre-configure with merchant_account, merchant_domain_name
14
+ # and encrypt_secret_key.
15
+ def self.configure(&block)
16
+ yield configuration
17
+ end
18
+
19
+ private
20
+
21
+ ##
22
+ # Returns an existing or instantiates a new configuration object.
23
+ def self.configuration
24
+ @configuration ||= Util::Configuration.new
25
+ end
26
+ end
@@ -0,0 +1,42 @@
1
+ module Wayforpay
2
+ module Constants
3
+ URL = URI.parse('https://api.wayforpay.com/api').freeze
4
+
5
+ HOLD_ENCRYPT_FIELDS = %i[merchantAccount merchantDomainName orderReference orderDate amount currency productName productCount productPrice].freeze
6
+ REFUND_ENCRYPT_FIELDS = %i[merchantAccount orderReference amount currency].freeze
7
+ SETTLE_ENCRYPT_FIELDS = %i[merchantAccount orderReference amount currency].freeze
8
+
9
+ HOLD_ATTRS = {
10
+ transactionType: 'CHARGE',
11
+ authorizationType: 'SimpleSignature',
12
+ merchantTransactionType: 'AUTH',
13
+ merchantTransactionSecureType: 'NON3DS',
14
+ apiVersion: 1
15
+ }.freeze
16
+
17
+ REFUND_ATTRS = {
18
+ transactionType: 'REFUND',
19
+ apiVersion: 1
20
+ }.freeze
21
+
22
+ SETTLE_ATTRS = {
23
+ transactionType: 'SETTLE',
24
+ apiVersion: 1
25
+ }.freeze
26
+
27
+ def self.hold_params
28
+ HOLD_ATTRS.merge(
29
+ merchantAccount: Wayforpay.merchant_account,
30
+ merchantDomainName: Wayforpay.merchant_domain_name,
31
+ )
32
+ end
33
+
34
+ def self.refund_params
35
+ REFUND_ATTRS.merge(merchantAccount: Wayforpay.merchant_account)
36
+ end
37
+
38
+ def self.settle_params
39
+ SETTLE_ATTRS.merge(merchantAccount: Wayforpay.merchant_account)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,23 @@
1
+ require 'openssl'
2
+
3
+ module Wayforpay
4
+ class EncryptField
5
+ attr_reader :keys, :attrs
6
+
7
+ def initialize(keys, attrs)
8
+ @keys, @attrs = keys, attrs
9
+ end
10
+
11
+ def self.call(keys, attrs = {})
12
+ new(keys, attrs).call
13
+ end
14
+
15
+ def call
16
+ OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('md5'), Wayforpay.encrypt_secret_key, signature_string)
17
+ end
18
+
19
+ def signature_string
20
+ attrs.values_at(*keys).compact.join(';')
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module Wayforpay
2
+ module Payments
3
+ # required attrs: orderReference, amount, currency, orderDate,
4
+ # productName[], productPrice[], productCount[],
5
+ # (card + expMonth + expYear + cardCvv + cardHolder) or recToken
6
+ def self.hold(attrs = {})
7
+ request_params = Constants.hold_params.merge(attrs)
8
+ Wayforpay::Request.(Constants::HOLD_ENCRYPT_FIELDS, request_params)
9
+ end
10
+
11
+ # required attrs: orderReference, amount, currency, comment
12
+ def self.refund(attrs = {})
13
+ request_params = Constants.refund_params.merge(attrs)
14
+ Wayforpay::Request.(Constants::REFUND_ENCRYPT_FIELDS, request_params)
15
+ end
16
+
17
+ # required attrs: orderReference, amount, currency
18
+ def self.settle(attrs = {})
19
+ request_params = Constants.settle_params.merge(attrs)
20
+ Wayforpay::Request.(Constants::SETTLE_ENCRYPT_FIELDS, request_params)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,11 @@
1
+ require 'json'
2
+ require 'net/http'
3
+
4
+ module Wayforpay
5
+ class Request
6
+ def self.call(encrypted_fields, request_attrs)
7
+ request_attrs[:merchantSignature] = EncryptField.(encrypted_fields, request_attrs)
8
+ Net::HTTP.post(Constants::URL, request_attrs.to_json)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,19 @@
1
+ module Wayforpay
2
+ module Util
3
+ class Configuration
4
+ attr_accessor :merchant_account, :merchant_domain_name, :encrypt_secret_key
5
+
6
+ def merchant_account=(value)
7
+ @merchant_account = value
8
+ end
9
+
10
+ def merchant_domain_name=(value)
11
+ @merchant_domain_name = value
12
+ end
13
+
14
+ def encrypt_secret_key=(value)
15
+ @encrypt_secret_key = value
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,3 @@
1
+ module Wayforpay
2
+ VERSION = '0.1.0'.freeze
3
+ end
@@ -0,0 +1,15 @@
1
+ require 'bundler'
2
+ Bundler.setup
3
+
4
+ require 'wayforpay'
5
+ require 'webmock/rspec'
6
+
7
+ RSpec.configure do |config|
8
+ config.before(:suite) do
9
+ WebMock.disable_net_connect!
10
+ end
11
+
12
+ config.after(:suite) do
13
+ WebMock.allow_net_connect!
14
+ end
15
+ end
@@ -0,0 +1,152 @@
1
+ describe Wayforpay::EncryptField do
2
+ before do
3
+ Wayforpay.configure do |config|
4
+ config.merchant_account = 'merchantAccount'
5
+ config.merchant_domain_name = 'merchantDomainName'
6
+ config.encrypt_secret_key = 'secretKey'
7
+ end
8
+ end
9
+
10
+ describe '.initialize' do
11
+ let(:keys) { [:amount] }
12
+ let(:attrs) { { amount: 123, currency: 'UAH' } }
13
+
14
+ subject { described_class.new(keys, attrs) }
15
+
16
+ it { expect(subject.keys).to eq keys }
17
+ it { expect(subject.attrs).to eq attrs }
18
+ end
19
+
20
+ describe '.call' do
21
+ let(:keys) { [:amount] }
22
+ let(:attrs) { { amount: 1 } }
23
+ let(:encrypt_field) { described_class.new(keys, attrs) }
24
+
25
+ it "receives 'new' method for Wayforpay::EncryptField" do
26
+ expect(described_class).to receive(:new).with(keys, attrs)
27
+ .and_return(encrypt_field).once
28
+ described_class.call(keys, attrs)
29
+ end
30
+
31
+ it "receives 'call' method for any instance of Wayforpay::EncryptField" do
32
+ expect_any_instance_of(described_class).to receive(:call).once
33
+ described_class.call(keys, attrs)
34
+ end
35
+ end
36
+
37
+ describe '#call' do
38
+ subject { described_class.new(keys, attrs).call }
39
+
40
+ context 'in case params are HOLD_ENCRYPT_FIELDS and HOLD_ATTRS' do
41
+ let(:keys) { Wayforpay::Constants::HOLD_ENCRYPT_FIELDS }
42
+ let(:attrs) do
43
+ Wayforpay::Constants.hold_params.merge({
44
+ orderReference: 'new_order',
45
+ amount: 1,
46
+ currency: 'UAH',
47
+ orderDate: 1514214411,
48
+ productName: ['TRIP'],
49
+ productPrice: [123],
50
+ productCount: [1],
51
+ recToken: 'recToken'
52
+ })
53
+ end
54
+
55
+ it { is_expected.to eq '69306842abfb5424508a96674aa7bbaf' }
56
+ end
57
+
58
+ context 'in case params are REFUND_ENCRYPT_FIELDS and REFUND_ATTRS' do
59
+ let(:keys) { Wayforpay::Constants::REFUND_ENCRYPT_FIELDS }
60
+ let(:attrs) do
61
+ Wayforpay::Constants.refund_params.merge({
62
+ orderReference: 'new_order',
63
+ amount: 2,
64
+ currency: 'UAH',
65
+ comment: 'Cancellation of a trip'
66
+ })
67
+ end
68
+
69
+ it { is_expected.to eq '41b79af1557e7e84531e2e015f412ce1' }
70
+ end
71
+
72
+ context 'in case params are SETTLE_ENCRYPT_FIELDS and SETTLE_ATTRS' do
73
+ let(:keys) { Wayforpay::Constants::SETTLE_ENCRYPT_FIELDS }
74
+ let(:attrs) do
75
+ Wayforpay::Constants.settle_params.merge({
76
+ orderReference: 'new_order',
77
+ amount: 3,
78
+ currency: 'UAH'
79
+ })
80
+ end
81
+
82
+ it { is_expected.to eq 'ba9a61da321d53b6a94dadeabf24eccf' }
83
+ end
84
+ end
85
+
86
+ describe '#signature_string' do
87
+ subject { described_class.new(keys, attrs).signature_string }
88
+
89
+ context 'in case params are HOLD_ENCRYPT_FIELDS and HOLD_ATTRS' do
90
+ let(:keys) { Wayforpay::Constants::HOLD_ENCRYPT_FIELDS }
91
+ let(:attrs) do
92
+ Wayforpay::Constants.hold_params.merge({
93
+ orderReference: 'new_order',
94
+ amount: 1,
95
+ currency: 'UAH',
96
+ orderDate: 1514214411,
97
+ productName: ['TRIP'],
98
+ productPrice: [123, 987],
99
+ productCount: [2],
100
+ recToken: 'recToken'
101
+ })
102
+ end
103
+
104
+ it { is_expected.to eq 'merchantAccount;merchantDomainName;new_order;1514214411;1;UAH;TRIP;2;123;987' }
105
+
106
+ context 'in case any required fields are missing' do
107
+ before { attrs.delete(:orderDate) }
108
+
109
+ it { is_expected.to eq 'merchantAccount;merchantDomainName;new_order;1;UAH;TRIP;2;123;987' }
110
+ end
111
+ end
112
+
113
+ context 'in case params are REFUND_ENCRYPT_FIELDS and REFUND_ATTRS' do
114
+ let(:keys) { Wayforpay::Constants::REFUND_ENCRYPT_FIELDS }
115
+ let(:attrs) do
116
+ Wayforpay::Constants.refund_params.merge({
117
+ orderReference: 'new_order',
118
+ amount: 2,
119
+ currency: 'UAH',
120
+ comment: 'Cancellation of a trip'
121
+ })
122
+ end
123
+
124
+ it { is_expected.to eq 'merchantAccount;new_order;2;UAH' }
125
+
126
+ context 'in case any required fields are missing' do
127
+ before { attrs.delete(:amount) }
128
+
129
+ it { is_expected.to eq 'merchantAccount;new_order;UAH' }
130
+ end
131
+ end
132
+
133
+ context 'in case params are SETTLE_ENCRYPT_FIELDS and SETTLE_ATTRS' do
134
+ let(:keys) { Wayforpay::Constants::SETTLE_ENCRYPT_FIELDS }
135
+ let(:attrs) do
136
+ Wayforpay::Constants.settle_params.merge({
137
+ orderReference: 'new_order',
138
+ amount: 3,
139
+ currency: 'UAH'
140
+ })
141
+ end
142
+
143
+ it { is_expected.to eq 'merchantAccount;new_order;3;UAH' }
144
+
145
+ context 'in case any required fields are missing' do
146
+ before { attrs.delete(:orderReference) }
147
+
148
+ it { is_expected.to eq 'merchantAccount;3;UAH' }
149
+ end
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,67 @@
1
+ describe Wayforpay::Payments do
2
+ context '.hold' do
3
+ let(:attrs) do
4
+ {
5
+ orderReference: 'new_order',
6
+ amount: 123,
7
+ currency: 'UAH',
8
+ orderDate: 1514214411,
9
+ productName: ['TRIP'],
10
+ productPrice: [123],
11
+ productCount: [1],
12
+ recToken: 'recToken'
13
+ }
14
+ end
15
+ let(:request_params) do
16
+ Wayforpay::Constants.hold_params.merge(attrs)
17
+ end
18
+ let(:encrypt_fields) { Wayforpay::Constants::HOLD_ENCRYPT_FIELDS }
19
+
20
+ it "receives 'call' method for Wayforpay::Request" do
21
+ expect(Wayforpay::Request).to receive(:call)
22
+ .with(encrypt_fields, request_params).once
23
+ described_class.hold(attrs)
24
+ end
25
+ end
26
+
27
+ context '.refund' do
28
+ let(:attrs) do
29
+ {
30
+ orderReference: 'new_order',
31
+ amount: 123,
32
+ currency: 'UAH',
33
+ comment: 'Cancellation of a trip'
34
+ }
35
+ end
36
+ let(:request_params) do
37
+ Wayforpay::Constants.refund_params.merge(attrs)
38
+ end
39
+ let(:encrypt_fields) { Wayforpay::Constants::REFUND_ENCRYPT_FIELDS }
40
+
41
+ it "receives 'call' method for Wayforpay::Request" do
42
+ expect(Wayforpay::Request).to receive(:call)
43
+ .with(encrypt_fields, request_params).once
44
+ described_class.refund(attrs)
45
+ end
46
+ end
47
+
48
+ context '.settle' do
49
+ let(:attrs) do
50
+ {
51
+ orderReference: 'new_order',
52
+ amount: 123,
53
+ currency: 'UAH',
54
+ }
55
+ end
56
+ let(:request_params) do
57
+ Wayforpay::Constants.settle_params.merge(attrs)
58
+ end
59
+ let(:encrypt_fields) { Wayforpay::Constants::SETTLE_ENCRYPT_FIELDS }
60
+
61
+ it "receives 'call' method for Wayforpay::Request" do
62
+ expect(Wayforpay::Request).to receive(:call)
63
+ .with(encrypt_fields, request_params).once
64
+ described_class.settle(attrs)
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,78 @@
1
+ describe Wayforpay::Request do
2
+ before do
3
+ Wayforpay.configure do |config|
4
+ config.merchant_account = 'merchantAccount'
5
+ config.merchant_domain_name = 'merchantDomainName'
6
+ config.encrypt_secret_key = 'secretKey'
7
+ end
8
+ end
9
+
10
+ let(:url) { Wayforpay::Constants::URL }
11
+
12
+ context '.call' do
13
+ let(:merchant_signature) { Wayforpay::EncryptField.(encrypt_fields, request_attrs) }
14
+ let(:encrypted_attrs) { request_attrs.merge(merchantSignature: merchant_signature) }
15
+
16
+ subject { described_class.call(encrypt_fields, request_attrs) }
17
+
18
+ context "hold params" do
19
+ let(:attrs) do
20
+ {
21
+ orderReference: 'new_order',
22
+ amount: 123,
23
+ currency: 'UAH',
24
+ orderDate: 1514214411,
25
+ productName: ['TRIP'],
26
+ productPrice: [123],
27
+ productCount: [1],
28
+ recToken: 'recToken'
29
+ }
30
+ end
31
+ let(:encrypt_fields) { Wayforpay::Constants::HOLD_ENCRYPT_FIELDS }
32
+ let(:request_attrs) { Wayforpay::Constants.hold_params.merge(attrs) }
33
+
34
+ it "receives 'post' method for Net::HTTP" do
35
+ expect(Net::HTTP).to receive(:post)
36
+ .with(url, encrypted_attrs.to_json).once
37
+ subject
38
+ end
39
+ end
40
+
41
+ context "refund params" do
42
+ let(:attrs) do
43
+ {
44
+ orderReference: 'new_order',
45
+ amount: 123,
46
+ currency: 'UAH',
47
+ comment: 'Cancellation of a trip'
48
+ }
49
+ end
50
+ let(:encrypt_fields) { Wayforpay::Constants::REFUND_ENCRYPT_FIELDS }
51
+ let(:request_attrs) { Wayforpay::Constants.refund_params.merge(attrs) }
52
+
53
+ it "receives 'post' method for Net::HTTP" do
54
+ expect(Net::HTTP).to receive(:post)
55
+ .with(url, encrypted_attrs.to_json).once
56
+ subject
57
+ end
58
+ end
59
+
60
+ context "settle params" do
61
+ let(:attrs) do
62
+ {
63
+ orderReference: 'new_order',
64
+ amount: 123,
65
+ currency: 'UAH',
66
+ }
67
+ end
68
+ let(:encrypt_fields) { Wayforpay::Constants::SETTLE_ENCRYPT_FIELDS }
69
+ let(:request_attrs) { Wayforpay::Constants.settle_params.merge(attrs) }
70
+
71
+ it "receives 'post' method for Net::HTTP" do
72
+ expect(Net::HTTP).to receive(:post)
73
+ .with(url, encrypted_attrs.to_json).once
74
+ subject
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,16 @@
1
+ describe Wayforpay::Util::Configuration do
2
+ let(:config) { described_class.new }
3
+ let(:merchant_account) { 'merchantAccount' }
4
+ let(:merchant_domain_name) { 'merchantDomainName' }
5
+ let(:encrypt_secret_key) { 'secretKey' }
6
+
7
+ before do
8
+ config.merchant_account = merchant_account
9
+ config.merchant_domain_name = merchant_domain_name
10
+ config.encrypt_secret_key = encrypt_secret_key
11
+ end
12
+
13
+ it { expect(config.merchant_account).to eq(merchant_account) }
14
+ it { expect(config.merchant_domain_name).to eq(merchant_domain_name) }
15
+ it { expect(config.encrypt_secret_key).to eq(encrypt_secret_key) }
16
+ end
@@ -0,0 +1,25 @@
1
+ describe Wayforpay do
2
+ subject { described_class }
3
+
4
+ describe '.configure' do
5
+ let(:merchant_account) { 'merchantAccount' }
6
+ let(:merchant_domain_name) { 'merchantDomainName' }
7
+ let(:encrypt_secret_key) { 'secretKey' }
8
+
9
+ before do
10
+ subject.configure do |config|
11
+ config.merchant_account = merchant_account
12
+ config.merchant_domain_name = merchant_domain_name
13
+ config.encrypt_secret_key = encrypt_secret_key
14
+ end
15
+ end
16
+
17
+ after do
18
+ subject.instance_variable_set('@configuration', nil)
19
+ end
20
+
21
+ it { expect(subject.merchant_account).to eq(merchant_account) }
22
+ it { expect(subject.merchant_domain_name).to eq(merchant_domain_name) }
23
+ it { expect(subject.encrypt_secret_key).to eq(encrypt_secret_key) }
24
+ end
25
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/wayforpay/version', __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'wayforpay'
6
+ s.version = Wayforpay::VERSION
7
+ s.authors = ['Serhii Savenko','Yaroslav Tupitskyi']
8
+ s.email = ['yarik@active-bridge.com']
9
+ s.homepage = 'https://github.com/activebridge/wayforpay'
10
+ s.summary = %q{Wayforpay API}
11
+ s.description = %q{Wayforpay API}
12
+ s.platform = Gem::Platform::RUBY
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
16
+ s.require_path = 'lib'
17
+
18
+ s.required_ruby_version = '>= 2.0.0'
19
+
20
+ s.add_dependency 'builder', '>= 2.1.2'
21
+
22
+ {
23
+ 'rake' => '~> 0.8.7',
24
+ 'rspec' => '~> 2.12',
25
+ 'webmock' => '~> 1.6.2'
26
+ }.each { |l, v| s. add_development_dependency l, v }
27
+ end
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wayforpay
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Serhii Savenko
8
+ - Yaroslav Tupitskyi
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2018-01-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: builder
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: 2.1.2
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: 2.1.2
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: 0.8.7
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 0.8.7
42
+ - !ruby/object:Gem::Dependency
43
+ name: rspec
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '2.12'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '2.12'
56
+ - !ruby/object:Gem::Dependency
57
+ name: webmock
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: 1.6.2
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 1.6.2
70
+ description: Wayforpay API
71
+ email:
72
+ - yarik@active-bridge.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - ".gitignore"
78
+ - ".rspec"
79
+ - Gemfile
80
+ - README.md
81
+ - lib/wayforpay.rb
82
+ - lib/wayforpay/constants.rb
83
+ - lib/wayforpay/encrypt_field.rb
84
+ - lib/wayforpay/payments.rb
85
+ - lib/wayforpay/request.rb
86
+ - lib/wayforpay/util/configuration.rb
87
+ - lib/wayforpay/version.rb
88
+ - spec/spec_helper.rb
89
+ - spec/wayforpay/encrypt_field_spec.rb
90
+ - spec/wayforpay/payments_spec.rb
91
+ - spec/wayforpay/request_spec.rb
92
+ - spec/wayforpay/util/configuration_spec.rb
93
+ - spec/wayforpay_spec.rb
94
+ - wayforpay.gemspec
95
+ homepage: https://github.com/activebridge/wayforpay
96
+ licenses: []
97
+ metadata: {}
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: 2.0.0
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ requirements: []
113
+ rubyforge_project:
114
+ rubygems_version: 2.6.11
115
+ signing_key:
116
+ specification_version: 4
117
+ summary: Wayforpay API
118
+ test_files:
119
+ - spec/spec_helper.rb
120
+ - spec/wayforpay/encrypt_field_spec.rb
121
+ - spec/wayforpay/payments_spec.rb
122
+ - spec/wayforpay/request_spec.rb
123
+ - spec/wayforpay/util/configuration_spec.rb
124
+ - spec/wayforpay_spec.rb