wizypay-api-client 0.2.6 → 0.3.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 387b0101fe922e7289f27ce14001af9bf7a28707
4
- data.tar.gz: 936a44b3574d9eace3f30c8aae7a972acf9cd0a7
3
+ metadata.gz: f231d484040d7bc2ae1cf08f4b411ece9d4abab4
4
+ data.tar.gz: dfdff5327ad0b6994e10e48c4a661067753a0d7f
5
5
  SHA512:
6
- metadata.gz: cb507d2013a379a0b8439e3146f510801a6c634052227f12ed4e6a57e071b3d1c8179d0555aad78e819aa2c4bbd3c729d6fa0d62f3dd7bea569680a2783a3dfd
7
- data.tar.gz: 00d188f4fbf388535ddaa1f95a55b8460e643e9feb180164dc1e5c0a218287b7aed2071e064e3faf2f351e566cc13272ec01b9dbb6450b903a8aede5d481719f
6
+ metadata.gz: 9f49f63f9bd69cac1a3a3f26eda501e804beb8e69abcb92cd5799cbf537ccb8b18301ab6c8724a6d1dc737f35b797b357aec458aa6cd40634109c32e917dad7b
7
+ data.tar.gz: cf1196d81d131d6e71ad8c5dc53b8ff903846493c9a519b95b0057c8e4a01111fb8bf21c3df75a0652986e3c0f3cd7cb0eaad82900a31a5c2249d0d50ad3ca24
@@ -14,7 +14,7 @@ module Wizypay
14
14
  end
15
15
 
16
16
  def cards
17
- Collection.new(Card, super['data'], super['meta'])
17
+ Collection.new(DebitCard, super['data'], super['meta'])
18
18
  end
19
19
 
20
20
  def save
@@ -0,0 +1,89 @@
1
+ module Wizypay
2
+ module CardMethods
3
+ include SimpleHmac::Helper
4
+
5
+ module ClassMethods
6
+ attr_accessor :base_path
7
+
8
+ def where(q)
9
+ raw = ApiClient.get(base_path, q)
10
+ Collection.new(self, raw[:data], raw[:meta])
11
+ end
12
+
13
+ def all(q = {})
14
+ where(q)
15
+ end
16
+
17
+ def find(id)
18
+ new(ApiClient.get("#{base_path}/#{id}")[:data])
19
+ end
20
+
21
+ def create(reference, amount, currency, merchant_id, user)
22
+ user = user.to_json if user.is_a?(Hash)
23
+ new(amount: amount, currency: currency, merchant_id: merchant_id, reference: reference, user: user).tap do |card|
24
+ card.save
25
+ end
26
+ end
27
+
28
+ def cancel(reference)
29
+ new(reference: reference).cancel
30
+ end
31
+
32
+ def refund(reference, amount)
33
+ new(reference: reference).refund(amount)
34
+ end
35
+
36
+ def url(reference)
37
+ new(reference: reference).url
38
+ end
39
+ end
40
+
41
+ def base_path
42
+ self.class.base_path
43
+ end
44
+
45
+ def cancel
46
+ ApiClient.post("#{base_path}/#{URI::encode_www_form_component reference}/cancel")
47
+ end
48
+
49
+ def refund(amount)
50
+ ApiClient.post("#{base_path}/#{URI::encode_www_form_component reference}/refund", amount: amount)
51
+ end
52
+
53
+ def url
54
+ timestamp = Time.now.utc.httpdate
55
+ security = sign_string("#{reference}\n#{timestamp}", ApiClient.api_secret)
56
+ query_string = {
57
+ key: ApiClient.api_key,
58
+ timestamp: timestamp,
59
+ reference: reference,
60
+ security: security
61
+ }.map { |k, v| "#{k}=#{URI::encode_www_form_component(v)}" }.join('&')
62
+ "#{ApiClient.api_endpoint}/widget?#{query_string}"
63
+ end
64
+
65
+ def save
66
+ reinitialize ApiClient.post(base_path, to_h)
67
+ rescue => e
68
+ begin
69
+ cancel
70
+ rescue RestClient::Exception
71
+ #no-op
72
+ end
73
+ raise e
74
+ end
75
+
76
+ def created_at
77
+ return nil unless super.present?
78
+ Time.parse(super)
79
+ end
80
+
81
+ def operations
82
+ Collection.new(VdcOperation, super['data'], super['meta'])
83
+ end
84
+
85
+ def refunds
86
+ Collection.new(Refund, super['data'], super['meta'])
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,7 @@
1
+ module Wizypay
2
+ class DebitCard < Resource
3
+ include CardMethods
4
+ extend CardMethods::ClassMethods
5
+ self.base_path = '/debit_cards'
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Wizypay
2
+ class GiftCard < Resource
3
+ include CardMethods
4
+ extend CardMethods::ClassMethods
5
+ self.base_path = '/gift_cards'
6
+ end
7
+ end
@@ -1,3 +1,3 @@
1
1
  module Wizypay
2
- VERSION = '0.2.6'
2
+ VERSION = '0.3.0'
3
3
  end
data/lib/wizypay.rb CHANGED
@@ -5,7 +5,9 @@ require 'json'
5
5
  require_relative 'wizypay/api_client'
6
6
  require_relative 'wizypay/resource'
7
7
  require_relative 'wizypay/collection'
8
- require_relative 'wizypay/card'
8
+ require_relative 'wizypay/card_methods'
9
+ require_relative 'wizypay/debit_card'
10
+ require_relative 'wizypay/gift_card'
9
11
  require_relative 'wizypay/vdc_operation'
10
12
  require_relative 'wizypay/refund'
11
13
  require_relative 'wizypay/ad'
@@ -51,7 +51,7 @@ module Wizypay
51
51
  expect(response).to be_a(Beneficiary)
52
52
  expect(response.name).to eq 'Joel Cogen'
53
53
  expect(response.cards).to be_a(Collection)
54
- expect(response.cards.first).to be_a(Card)
54
+ expect(response.cards.first).to be_a(DebitCard)
55
55
  end
56
56
  end
57
57
 
@@ -0,0 +1,57 @@
1
+ require 'spec_helper'
2
+
3
+ module Wizypay
4
+ RSpec.describe 'DebitCard#cancel' do
5
+
6
+ let(:api_key) { 'key' }
7
+ let(:api_secret) { 'secret' }
8
+ let(:api_endpoint) { 'https://api.wizypay.com' }
9
+ let(:reference) { '85fb584c-72cb-4f35-b307-ac5442ef7153' }
10
+ let(:cancel_request) { stub_request(:post, "#{api_endpoint}/debit_cards/#{reference}/cancel").
11
+ with(headers: { 'Accept' => 'application/json',
12
+ 'Authorization' => /WIZYPAY #{api_key}:.*/,
13
+ 'Content-Type' => 'application/x-www-form-urlencoded' }) }
14
+ before do
15
+ Wizypay.setup(api_key, api_secret, api_endpoint)
16
+ end
17
+
18
+ context 'success' do
19
+ it 'returns empty body' do
20
+ request = cancel_request.to_return(status: 200, body: '')
21
+ response = DebitCard.new(reference: reference).cancel
22
+ expect(request).to have_been_made
23
+ expect(response).to be_empty
24
+ end
25
+ end
26
+
27
+ describe '.cancel' do
28
+ it 'delegates to an instance' do
29
+ expect(DebitCard).to receive(:new).with(reference: reference).and_return(card = double('card'))
30
+ expect(card).to receive(:cancel)
31
+ DebitCard.cancel(reference)
32
+ end
33
+ end
34
+
35
+ context 'failure' do
36
+ context '4XX' do
37
+ it "throws #{RestClient::Exception}" do
38
+ request = cancel_request.to_return(status: 401, body: { errors: { base: ['authentication_failed'] } }.to_json)
39
+ expect do
40
+ DebitCard.cancel(reference)
41
+ end.to raise_error(RestClient::Exception)
42
+ expect(request).to have_been_made
43
+ end
44
+ end
45
+
46
+ context 'timeout' do
47
+ it "throws #{RestClient::Exception}" do
48
+ request = cancel_request.to_timeout
49
+ expect do
50
+ DebitCard.cancel(reference)
51
+ end.to raise_error(RestClient::Exception)
52
+ expect(request).to have_been_made
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ module Wizypay
4
+ RSpec.describe DebitCard do
5
+ let(:api_key) { 'key' }
6
+ let(:api_secret) { 'secret' }
7
+ let(:api_endpoint) { 'https://api.wizypay.com' }
8
+ let(:all_cards_request) { stub_request(:get, "#{api_endpoint}/debit_cards").
9
+ with(headers: { 'Accept' => 'application/json',
10
+ 'Authorization' => /WIZYPAY #{api_key}:.*/ }) }
11
+ let(:where_cards_request) { stub_request(:get, "#{api_endpoint}/debit_cards?beneficiary=john").
12
+ with(headers: { 'Accept' => 'application/json',
13
+ 'Authorization' => /WIZYPAY #{api_key}:.*/ }) }
14
+ before do
15
+ Wizypay.setup(api_key, api_secret, api_endpoint)
16
+ end
17
+
18
+ context 'all' do
19
+ it 'returns empty body' do
20
+ request = all_cards_request.to_return(status: 200, body: '{"data": []}')
21
+ response = DebitCard.all
22
+ expect(request).to have_been_made
23
+ expect(response).to be_empty
24
+ end
25
+
26
+ it 'is a collection' do
27
+ all_cards_request.to_return(status: 200, body: '{"data": [{"id": 1, "partial_number": "XXXX-1234"}]}')
28
+ response = DebitCard.all
29
+ expect(response).to be_a(Collection)
30
+ expect(response.first).to be_a(DebitCard)
31
+ expect(response.first.partial_number).to eq 'XXXX-1234'
32
+ end
33
+ end
34
+
35
+ context 'where' do
36
+ it 'returns empty body' do
37
+ request = where_cards_request.to_return(status: 200, body: '{"data": []}')
38
+ response = DebitCard.where(beneficiary: 'john')
39
+ expect(request).to have_been_made
40
+ expect(response).to be_empty
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ module Wizypay
4
+ RSpec.describe DebitCard do
5
+ let(:api_key) { 'key' }
6
+ let(:api_secret) { 'secret' }
7
+ let(:api_endpoint) { 'https://api.wizypay.com' }
8
+ let(:card_id) { 1 }
9
+ let(:card_request) { stub_request(:get, "#{api_endpoint}/debit_cards/#{card_id}").
10
+ with(headers: { 'Accept' => 'application/json',
11
+ 'Authorization' => /WIZYPAY #{api_key}:.*/ }) }
12
+ before do
13
+ Wizypay.setup(api_key, api_secret, api_endpoint)
14
+ end
15
+
16
+ it 'is a card' do
17
+ request = card_request.to_return(status: 200, body: '{"data": {"id": 1, "partial_number": "XXXX-1234"}}')
18
+ response = DebitCard.find(card_id)
19
+ expect(request).to have_been_made
20
+ expect(response).to be_a(DebitCard)
21
+ expect(response.partial_number).to eq 'XXXX-1234'
22
+ end
23
+
24
+ it 'has operations' do
25
+ card_request.to_return(status: 200, body: '{"data": {"operations": {"data": [{"id": 1}]}}}')
26
+ response = DebitCard.find(card_id)
27
+ expect(response.operations).to be_a(Collection)
28
+ expect(response.operations.first).to be_a(VdcOperation)
29
+ expect(response.operations.first.id).to eq 1
30
+ end
31
+
32
+ it 'has refunds' do
33
+ card_request.to_return(status: 200, body: '{"data": {"refunds": {"data": [{"id": 1}]}}}')
34
+ response = DebitCard.find(card_id)
35
+ expect(response.refunds).to be_a(Collection)
36
+ expect(response.refunds.first).to be_a(Refund)
37
+ expect(response.refunds.first.id).to eq 1
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+ require 'time'
3
+
4
+ module Wizypay
5
+ RSpec.describe 'DebitCard#url' do
6
+ include SimpleHmac::Helper
7
+
8
+ let(:api_key) { 'key' }
9
+ let(:api_secret) { 'secret' }
10
+ let(:api_endpoint) { 'https://api.wizypay.com' }
11
+ let(:reference) { '85fb584c-72cb-4f35-b307-ac5442ef7153' }
12
+
13
+ before do
14
+ Wizypay.setup(api_key, api_secret, api_endpoint)
15
+ end
16
+
17
+ it 'returns' do
18
+ t = Time.new(2015, 1, 1, 0, 0, 0, "+01:00")
19
+ Timecop.freeze(t) do
20
+ url = DebitCard.new(reference: reference).url
21
+ expected_security = sign_string("#{reference}\n#{t.httpdate}", api_secret)
22
+ expect(url).to eq("#{api_endpoint}/widget?key=#{URI::encode_www_form_component api_key}"+
23
+ "&timestamp=#{URI::encode_www_form_component t.httpdate}" +
24
+ "&reference=#{URI::encode_www_form_component reference}"+
25
+ "&security=#{URI::encode_www_form_component expected_security}")
26
+ end
27
+ end
28
+
29
+ describe '.url' do
30
+ it 'delegates to an instance' do
31
+ expect(DebitCard).to receive(:new).with(reference: reference).and_return(card = double('card'))
32
+ expect(card).to receive(:url)
33
+ DebitCard.url(reference)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ module Wizypay
4
+ RSpec.describe 'DebitCard.create' do
5
+ let(:api_key) { 'key' }
6
+ let(:api_secret) { 'secret' }
7
+ let(:api_endpoint) { 'https://api.wizypay.com' }
8
+ let(:user) { { id: 33, first_name: 'Nicolas', last_name: 'Cage' } }
9
+ let(:reference) { '85fb584c-72cb-4f35-b307-ac5442ef7153' }
10
+ let(:merchant_id) { '91' }
11
+ let(:amount) { '5000' }
12
+ let(:currency) { 'EUR' }
13
+ let(:create_request) { stub_request(:post, "#{api_endpoint}/debit_cards").
14
+ with(body: { amount: amount, currency: currency, merchant_id: merchant_id,
15
+ reference: reference, user: user.to_json },
16
+ headers: { 'Accept' => 'application/json',
17
+ 'Authorization' => /WIZYPAY #{api_key}:.*/,
18
+ 'Content-Type' => 'application/x-www-form-urlencoded' }) }
19
+ let!(:cancel_request) { stub_request(:post, "#{api_endpoint}/debit_cards/#{reference}/cancel").
20
+ with(headers: { 'Accept' => 'application/json',
21
+ 'Authorization' => /WIZYPAY #{api_key}:.*/,
22
+ 'Content-Type' => 'application/x-www-form-urlencoded' }) }
23
+ before do
24
+ Wizypay.setup(api_key, api_secret, api_endpoint)
25
+ end
26
+
27
+ context 'success' do
28
+ it 'returns a Card with correct data' do
29
+ response_body = {
30
+ reference: reference,
31
+ type: 'Mastercard',
32
+ amount: amount,
33
+ currency: currency,
34
+ merchant_id: merchant_id,
35
+ user_id: user[:id]
36
+ }
37
+ request = create_request.to_return(status: 200, body: response_body.to_json)
38
+ response = DebitCard.create(reference, amount, currency, merchant_id, user)
39
+ expect(request).to have_been_made
40
+ expect(response).to be_a(DebitCard)
41
+ expect(response.to_h).to match(response_body)
42
+ end
43
+ end
44
+
45
+ context 'failure' do
46
+ context '4XX' do
47
+ it "throws #{RestClient::Exception}" do
48
+ request = create_request.to_return(status: 401, body: { errors: { base: ['authentication_failed'] } }.to_json)
49
+ expect do
50
+ DebitCard.create(reference, amount, currency, merchant_id, user)
51
+ end.to raise_error(RestClient::Exception)
52
+ expect(request).to have_been_made
53
+ expect(cancel_request).to have_been_made
54
+ end
55
+ end
56
+
57
+ context 'timeout' do
58
+ it "throws #{RestClient::Exception}" do
59
+ request = create_request.to_timeout
60
+ expect do
61
+ DebitCard.create(reference, amount, currency, merchant_id, user)
62
+ end.to raise_error(RestClient::Exception)
63
+ expect(request).to have_been_made
64
+ expect(cancel_request).to have_been_made
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -1,14 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Wizypay
4
- RSpec.describe 'Card#refun' do
4
+ RSpec.describe 'DebitCard#refun' do
5
5
 
6
6
  let(:api_key) { 'key' }
7
7
  let(:api_secret) { 'secret' }
8
8
  let(:api_endpoint) { 'https://api.wizypay.com' }
9
9
  let(:reference) { '85fb584c-72cb-4f35-b307-ac5442ef7153' }
10
10
  let(:amount) { 2000 }
11
- let(:refund_request) { stub_request(:post, "#{api_endpoint}/cards/#{reference}/refund").
11
+ let(:refund_request) { stub_request(:post, "#{api_endpoint}/debit_cards/#{reference}/refund").
12
12
  with(body: { 'amount' => amount.to_s },
13
13
  headers: { 'Accept' => 'application/json',
14
14
  'Authorization' => /WIZYPAY #{api_key}:.*/,
@@ -20,7 +20,7 @@ module Wizypay
20
20
  context 'success' do
21
21
  it 'returns empty body' do
22
22
  request = refund_request.to_return(status: 200, body: '')
23
- response = Card.new(reference: reference).refund(amount)
23
+ response = DebitCard.new(reference: reference).refund(amount)
24
24
  expect(request).to have_been_made
25
25
  expect(response).to be_empty
26
26
  end
@@ -28,9 +28,9 @@ module Wizypay
28
28
 
29
29
  describe '.refund' do
30
30
  it 'delegates to an instance' do
31
- expect(Card).to receive(:new).with(reference: reference).and_return(card = double('card'))
31
+ expect(DebitCard).to receive(:new).with(reference: reference).and_return(card = double('card'))
32
32
  expect(card).to receive(:refund).with(amount)
33
- Card.refund(reference, amount)
33
+ DebitCard.refund(reference, amount)
34
34
  end
35
35
  end
36
36
  end
@@ -1,13 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Wizypay
4
- RSpec.describe 'Card#cancel' do
4
+ RSpec.describe 'GiftCard#cancel' do
5
5
 
6
6
  let(:api_key) { 'key' }
7
7
  let(:api_secret) { 'secret' }
8
8
  let(:api_endpoint) { 'https://api.wizypay.com' }
9
9
  let(:reference) { '85fb584c-72cb-4f35-b307-ac5442ef7153' }
10
- let(:cancel_request) { stub_request(:post, "#{api_endpoint}/cards/#{reference}/cancel").
10
+ let(:cancel_request) { stub_request(:post, "#{api_endpoint}/gift_cards/#{reference}/cancel").
11
11
  with(headers: { 'Accept' => 'application/json',
12
12
  'Authorization' => /WIZYPAY #{api_key}:.*/,
13
13
  'Content-Type' => 'application/x-www-form-urlencoded' }) }
@@ -18,7 +18,7 @@ module Wizypay
18
18
  context 'success' do
19
19
  it 'returns empty body' do
20
20
  request = cancel_request.to_return(status: 200, body: '')
21
- response = Card.new(reference: reference).cancel
21
+ response = GiftCard.new(reference: reference).cancel
22
22
  expect(request).to have_been_made
23
23
  expect(response).to be_empty
24
24
  end
@@ -26,9 +26,9 @@ module Wizypay
26
26
 
27
27
  describe '.cancel' do
28
28
  it 'delegates to an instance' do
29
- expect(Card).to receive(:new).with(reference: reference).and_return(card = double('card'))
29
+ expect(GiftCard).to receive(:new).with(reference: reference).and_return(card = double('card'))
30
30
  expect(card).to receive(:cancel)
31
- Card.cancel(reference)
31
+ GiftCard.cancel(reference)
32
32
  end
33
33
  end
34
34
 
@@ -37,7 +37,7 @@ module Wizypay
37
37
  it "throws #{RestClient::Exception}" do
38
38
  request = cancel_request.to_return(status: 401, body: { errors: { base: ['authentication_failed'] } }.to_json)
39
39
  expect do
40
- Card.cancel(reference)
40
+ GiftCard.cancel(reference)
41
41
  end.to raise_error(RestClient::Exception)
42
42
  expect(request).to have_been_made
43
43
  end
@@ -47,7 +47,7 @@ module Wizypay
47
47
  it "throws #{RestClient::Exception}" do
48
48
  request = cancel_request.to_timeout
49
49
  expect do
50
- Card.cancel(reference)
50
+ GiftCard.cancel(reference)
51
51
  end.to raise_error(RestClient::Exception)
52
52
  expect(request).to have_been_made
53
53
  end
@@ -1,14 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Wizypay
4
- RSpec.describe Card do
4
+ RSpec.describe GiftCard do
5
5
  let(:api_key) { 'key' }
6
6
  let(:api_secret) { 'secret' }
7
7
  let(:api_endpoint) { 'https://api.wizypay.com' }
8
- let(:all_cards_request) { stub_request(:get, "#{api_endpoint}/cards").
8
+ let(:all_cards_request) { stub_request(:get, "#{api_endpoint}/gift_cards").
9
9
  with(headers: { 'Accept' => 'application/json',
10
10
  'Authorization' => /WIZYPAY #{api_key}:.*/ }) }
11
- let(:where_cards_request) { stub_request(:get, "#{api_endpoint}/cards?beneficiary=john").
11
+ let(:where_cards_request) { stub_request(:get, "#{api_endpoint}/gift_cards?beneficiary=john").
12
12
  with(headers: { 'Accept' => 'application/json',
13
13
  'Authorization' => /WIZYPAY #{api_key}:.*/ }) }
14
14
  before do
@@ -18,16 +18,16 @@ module Wizypay
18
18
  context 'all' do
19
19
  it 'returns empty body' do
20
20
  request = all_cards_request.to_return(status: 200, body: '{"data": []}')
21
- response = Card.all
21
+ response = GiftCard.all
22
22
  expect(request).to have_been_made
23
23
  expect(response).to be_empty
24
24
  end
25
25
 
26
26
  it 'is a collection' do
27
27
  all_cards_request.to_return(status: 200, body: '{"data": [{"id": 1, "partial_number": "XXXX-1234"}]}')
28
- response = Card.all
28
+ response = GiftCard.all
29
29
  expect(response).to be_a(Collection)
30
- expect(response.first).to be_a(Card)
30
+ expect(response.first).to be_a(GiftCard)
31
31
  expect(response.first.partial_number).to eq 'XXXX-1234'
32
32
  end
33
33
  end
@@ -35,7 +35,7 @@ module Wizypay
35
35
  context 'where' do
36
36
  it 'returns empty body' do
37
37
  request = where_cards_request.to_return(status: 200, body: '{"data": []}')
38
- response = Card.where(beneficiary: 'john')
38
+ response = GiftCard.where(beneficiary: 'john')
39
39
  expect(request).to have_been_made
40
40
  expect(response).to be_empty
41
41
  end
@@ -1,12 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Wizypay
4
- RSpec.describe Card do
4
+ RSpec.describe GiftCard do
5
5
  let(:api_key) { 'key' }
6
6
  let(:api_secret) { 'secret' }
7
7
  let(:api_endpoint) { 'https://api.wizypay.com' }
8
8
  let(:card_id) { 1 }
9
- let(:card_request) { stub_request(:get, "#{api_endpoint}/cards/#{card_id}").
9
+ let(:card_request) { stub_request(:get, "#{api_endpoint}/gift_cards/#{card_id}").
10
10
  with(headers: { 'Accept' => 'application/json',
11
11
  'Authorization' => /WIZYPAY #{api_key}:.*/ }) }
12
12
  before do
@@ -15,15 +15,15 @@ module Wizypay
15
15
 
16
16
  it 'is a card' do
17
17
  request = card_request.to_return(status: 200, body: '{"data": {"id": 1, "partial_number": "XXXX-1234"}}')
18
- response = Card.find(card_id)
18
+ response = GiftCard.find(card_id)
19
19
  expect(request).to have_been_made
20
- expect(response).to be_a(Card)
20
+ expect(response).to be_a(GiftCard)
21
21
  expect(response.partial_number).to eq 'XXXX-1234'
22
22
  end
23
23
 
24
24
  it 'has operations' do
25
25
  card_request.to_return(status: 200, body: '{"data": {"operations": {"data": [{"id": 1}]}}}')
26
- response = Card.find(card_id)
26
+ response = GiftCard.find(card_id)
27
27
  expect(response.operations).to be_a(Collection)
28
28
  expect(response.operations.first).to be_a(VdcOperation)
29
29
  expect(response.operations.first.id).to eq 1
@@ -31,7 +31,7 @@ module Wizypay
31
31
 
32
32
  it 'has refunds' do
33
33
  card_request.to_return(status: 200, body: '{"data": {"refunds": {"data": [{"id": 1}]}}}')
34
- response = Card.find(card_id)
34
+ response = GiftCard.find(card_id)
35
35
  expect(response.refunds).to be_a(Collection)
36
36
  expect(response.refunds.first).to be_a(Refund)
37
37
  expect(response.refunds.first.id).to eq 1
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
  require 'time'
3
3
 
4
4
  module Wizypay
5
- RSpec.describe 'Card#url' do
5
+ RSpec.describe 'GiftCard#url' do
6
6
  include SimpleHmac::Helper
7
7
 
8
8
  let(:api_key) { 'key' }
@@ -17,7 +17,7 @@ module Wizypay
17
17
  it 'returns' do
18
18
  t = Time.new(2015, 1, 1, 0, 0, 0, "+01:00")
19
19
  Timecop.freeze(t) do
20
- url = Card.new(reference: reference).url
20
+ url = GiftCard.new(reference: reference).url
21
21
  expected_security = sign_string("#{reference}\n#{t.httpdate}", api_secret)
22
22
  expect(url).to eq("#{api_endpoint}/widget?key=#{URI::encode_www_form_component api_key}"+
23
23
  "&timestamp=#{URI::encode_www_form_component t.httpdate}" +
@@ -28,9 +28,9 @@ module Wizypay
28
28
 
29
29
  describe '.url' do
30
30
  it 'delegates to an instance' do
31
- expect(Card).to receive(:new).with(reference: reference).and_return(card = double('card'))
31
+ expect(GiftCard).to receive(:new).with(reference: reference).and_return(card = double('card'))
32
32
  expect(card).to receive(:url)
33
- Card.url(reference)
33
+ GiftCard.url(reference)
34
34
  end
35
35
  end
36
36
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Wizypay
4
- RSpec.describe 'Card.create' do
4
+ RSpec.describe 'GiftCard.create' do
5
5
  let(:api_key) { 'key' }
6
6
  let(:api_secret) { 'secret' }
7
7
  let(:api_endpoint) { 'https://api.wizypay.com' }
@@ -10,12 +10,16 @@ module Wizypay
10
10
  let(:merchant_id) { '91' }
11
11
  let(:amount) { '5000' }
12
12
  let(:currency) { 'EUR' }
13
- let(:create_request) { stub_request(:post, "#{api_endpoint}/cards").
13
+ let(:create_request) { stub_request(:post, "#{api_endpoint}/gift_cards").
14
14
  with(body: { amount: amount, currency: currency, merchant_id: merchant_id,
15
15
  reference: reference, user: user.to_json },
16
16
  headers: { 'Accept' => 'application/json',
17
17
  'Authorization' => /WIZYPAY #{api_key}:.*/,
18
18
  'Content-Type' => 'application/x-www-form-urlencoded' }) }
19
+ let!(:cancel_request) { stub_request(:post, "#{api_endpoint}/gift_cards/#{reference}/cancel").
20
+ with(headers: { 'Accept' => 'application/json',
21
+ 'Authorization' => /WIZYPAY #{api_key}:.*/,
22
+ 'Content-Type' => 'application/x-www-form-urlencoded' }) }
19
23
  before do
20
24
  Wizypay.setup(api_key, api_secret, api_endpoint)
21
25
  end
@@ -31,9 +35,9 @@ module Wizypay
31
35
  user_id: user[:id]
32
36
  }
33
37
  request = create_request.to_return(status: 200, body: response_body.to_json)
34
- response = Wizypay::Card.create(reference, amount, currency, merchant_id, user)
38
+ response = GiftCard.create(reference, amount, currency, merchant_id, user)
35
39
  expect(request).to have_been_made
36
- expect(response).to be_a(Wizypay::Card)
40
+ expect(response).to be_a(GiftCard)
37
41
  expect(response.to_h).to match(response_body)
38
42
  end
39
43
  end
@@ -43,9 +47,10 @@ module Wizypay
43
47
  it "throws #{RestClient::Exception}" do
44
48
  request = create_request.to_return(status: 401, body: { errors: { base: ['authentication_failed'] } }.to_json)
45
49
  expect do
46
- Card.create(reference, amount, currency, merchant_id, user)
50
+ GiftCard.create(reference, amount, currency, merchant_id, user)
47
51
  end.to raise_error(RestClient::Exception)
48
52
  expect(request).to have_been_made
53
+ expect(cancel_request).to have_been_made
49
54
  end
50
55
  end
51
56
 
@@ -53,9 +58,10 @@ module Wizypay
53
58
  it "throws #{RestClient::Exception}" do
54
59
  request = create_request.to_timeout
55
60
  expect do
56
- Card.create(reference, amount, currency, merchant_id, user)
61
+ GiftCard.create(reference, amount, currency, merchant_id, user)
57
62
  end.to raise_error(RestClient::Exception)
58
63
  expect(request).to have_been_made
64
+ expect(cancel_request).to have_been_made
59
65
  end
60
66
  end
61
67
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wizypay-api-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chaker Nakhli
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-02-04 00:00:00.000000000 Z
13
+ date: 2016-02-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: simple-hmac
@@ -153,8 +153,10 @@ files:
153
153
  - lib/wizypay/ad.rb
154
154
  - lib/wizypay/api_client.rb
155
155
  - lib/wizypay/beneficiary.rb
156
- - lib/wizypay/card.rb
156
+ - lib/wizypay/card_methods.rb
157
157
  - lib/wizypay/collection.rb
158
+ - lib/wizypay/debit_card.rb
159
+ - lib/wizypay/gift_card.rb
158
160
  - lib/wizypay/merchant.rb
159
161
  - lib/wizypay/merchant_category.rb
160
162
  - lib/wizypay/merchant_version.rb
@@ -163,12 +165,17 @@ files:
163
165
  - lib/wizypay/vdc_operation.rb
164
166
  - lib/wizypay/version.rb
165
167
  - spec/beneficiary/beneficiary_spec.rb
166
- - spec/card/cancel_card_spec.rb
167
- - spec/card/card_all_spec.rb
168
- - spec/card/card_show_spec.rb
169
- - spec/card/card_url_spec.rb
170
- - spec/card/create_card_spec.rb
171
- - spec/card/refund_card_spec.rb
168
+ - spec/debit_card/cancel_card_spec.rb
169
+ - spec/debit_card/card_all_spec.rb
170
+ - spec/debit_card/card_show_spec.rb
171
+ - spec/debit_card/card_url_spec.rb
172
+ - spec/debit_card/create_card_spec.rb
173
+ - spec/debit_card/refund_card_spec.rb
174
+ - spec/gift_card/cancel_card_spec.rb
175
+ - spec/gift_card/card_all_spec.rb
176
+ - spec/gift_card/card_show_spec.rb
177
+ - spec/gift_card/card_url_spec.rb
178
+ - spec/gift_card/create_card_spec.rb
172
179
  - spec/merchant/merchant_spec.rb
173
180
  - spec/merchant_category/merchant_category_spec.rb
174
181
  - spec/merchant_version/merchant_version_spec.rb
@@ -200,12 +207,17 @@ specification_version: 4
200
207
  summary: Programmatic API to access Wizypay's API.
201
208
  test_files:
202
209
  - spec/beneficiary/beneficiary_spec.rb
203
- - spec/card/cancel_card_spec.rb
204
- - spec/card/card_all_spec.rb
205
- - spec/card/card_show_spec.rb
206
- - spec/card/card_url_spec.rb
207
- - spec/card/create_card_spec.rb
208
- - spec/card/refund_card_spec.rb
210
+ - spec/debit_card/cancel_card_spec.rb
211
+ - spec/debit_card/card_all_spec.rb
212
+ - spec/debit_card/card_show_spec.rb
213
+ - spec/debit_card/card_url_spec.rb
214
+ - spec/debit_card/create_card_spec.rb
215
+ - spec/debit_card/refund_card_spec.rb
216
+ - spec/gift_card/cancel_card_spec.rb
217
+ - spec/gift_card/card_all_spec.rb
218
+ - spec/gift_card/card_show_spec.rb
219
+ - spec/gift_card/card_url_spec.rb
220
+ - spec/gift_card/create_card_spec.rb
209
221
  - spec/merchant/merchant_spec.rb
210
222
  - spec/merchant_category/merchant_category_spec.rb
211
223
  - spec/merchant_version/merchant_version_spec.rb
data/lib/wizypay/card.rb DELETED
@@ -1,74 +0,0 @@
1
- module Wizypay
2
- class Card < Resource
3
- include SimpleHmac::Helper
4
-
5
- def self.where(q)
6
- raw = ApiClient.get('/cards', q)
7
- Collection.new(self, raw[:data], raw[:meta])
8
- end
9
-
10
- def self.all(q = {})
11
- where(q)
12
- end
13
-
14
- def self.find(id)
15
- new(ApiClient.get("/cards/#{id}")[:data])
16
- end
17
-
18
- def self.create(reference, amount, currency, merchant_id, user)
19
- user = user.to_json if user.is_a?(Hash)
20
- new(amount: amount, currency: currency, merchant_id: merchant_id, reference: reference, user: user).tap do |card|
21
- card.save
22
- end
23
- end
24
-
25
- def self.cancel(reference)
26
- new(reference: reference).cancel
27
- end
28
-
29
- def self.refund(reference, amount)
30
- new(reference: reference).refund(amount)
31
- end
32
-
33
- def self.url(reference)
34
- new(reference: reference).url
35
- end
36
-
37
- def cancel
38
- ApiClient.post("/cards/#{URI::encode_www_form_component reference}/cancel")
39
- end
40
-
41
- def refund(amount)
42
- ApiClient.post("/cards/#{URI::encode_www_form_component reference}/refund", amount: amount)
43
- end
44
-
45
- def url
46
- timestamp = Time.now.utc.httpdate
47
- security = sign_string("#{reference}\n#{timestamp}", ApiClient.api_secret)
48
- query_string = {
49
- key: ApiClient.api_key,
50
- timestamp: timestamp,
51
- reference: reference,
52
- security: security
53
- }.map { |k, v| "#{k}=#{URI::encode_www_form_component(v)}" }.join('&')
54
- "#{ApiClient.api_endpoint}/widget?#{query_string}"
55
- end
56
-
57
- def save
58
- reinitialize ApiClient.post('/cards', to_h)
59
- end
60
-
61
- def created_at
62
- return nil unless super.present?
63
- Time.parse(super)
64
- end
65
-
66
- def operations
67
- Collection.new(VdcOperation, super['data'], super['meta'])
68
- end
69
-
70
- def refunds
71
- Collection.new(Refund, super['data'], super['meta'])
72
- end
73
- end
74
- end