gyft 0.0.4 → 1.0.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: 8e6eeace4f248958e53b36ea5adcff736fbdedc8
4
- data.tar.gz: dc6b3b16b6c9b3cc78c6c9c6958ead8a44178aa7
3
+ metadata.gz: 1cacc42d597e9d65aaef5cb8fc4b4a1b1bd4d257
4
+ data.tar.gz: 7d0bfd2bb5bcedcfb091c556eb17d9da29ac0d09
5
5
  SHA512:
6
- metadata.gz: 543e7cf9d0e3cb507861c3ec4190767c26f0df1a0858448334e7de46fff2dfe3c5579a03ef3cffed148fd453b5c03e5d9ebfc680dfe19db2e80d740ae6dde5ac
7
- data.tar.gz: 8111036baa68ba2a81b4420d57a7b2e912490fe4ed79259f516702cfb39801b3e6c5ce950fba7430ac4601354d5c9c67093b1e1c93ef903ece18383af950d670
6
+ metadata.gz: 2b05032d9ff5336b23772d406e72fb42270acca69212b69398adee074233ce401afe59cf74c9f8b4e4dffe328b9aea0e6b47e17284b289f1b597a53a5fa0c927
7
+ data.tar.gz: 6922c59dcdeb5780b396937b7b9c37d45746adb7dd575009f92d73abce0f4a63c942df2b913efb4a83e94ccda5245602239bc35dd19f9c6db606c35f9c12a822
data/gyft.gemspec CHANGED
@@ -15,5 +15,4 @@ Gem::Specification.new do |s|
15
15
  s.add_development_dependency('rake')
16
16
  s.add_development_dependency('webmock')
17
17
  s.add_development_dependency('minitest')
18
- s.add_development_dependency('awesome_print')
19
18
  end
data/lib/gyft/client.rb CHANGED
@@ -5,31 +5,31 @@ require 'json'
5
5
  module Gyft
6
6
  class Client
7
7
  class ServerError < StandardError; end
8
+ class NotFoundError < StandardError; end
9
+ class BadRequestError < StandardError; end
8
10
 
9
11
  ENDPOINTS = {
10
12
  'production' => 'api.gyft.com',
11
13
  'sandbox' => 'apitest.gyft.com'
12
14
  }
13
15
 
14
- attr_accessor :api_key, :api_secret, :environment, :http
16
+ attr_accessor :api_key, :api_secret, :environment, :http, :reseller
15
17
 
16
18
  def initialize(options = {})
17
19
  @api_key = options.fetch(:api_key) do
18
- ENV['GYFT_RESELLER_API_KEY'] ||
19
- ArgumentError.new("Missing required argument: api_key")
20
+ ENV['GYFT_API_KEY'] || raise(KeyError, "Missing required argument: api_key")
20
21
  end
21
22
 
22
23
  @api_secret = options.fetch(:api_secret) do
23
- ENV['GYFT_RESELLER_API_SECRET'] ||
24
- ArgumentError.new("Missing required argument: api_secret")
24
+ ENV['GYFT_API_SECRET'] || raise(KeyError, "Missing required argument: api_secret")
25
25
  end
26
26
 
27
27
  @environment = begin
28
28
  environment = options.fetch(:environment) do
29
- ENV['GYFT_RESELLER_API_ENVIRONMENT'] || 'sandbox'
29
+ ENV['GYFT_API_ENVIRONMENT'] || 'sandbox'
30
30
  end
31
31
  unless %w{production sandbox}.include?(environment)
32
- raise ArgumentError.new("Invalid argument: environment should be one of 'production' or 'sandbox'")
32
+ raise(KeyError, "Invalid argument: environment should be one of 'production' or 'sandbox'")
33
33
  end
34
34
  environment
35
35
  end
@@ -47,7 +47,7 @@ module Gyft
47
47
  end
48
48
 
49
49
  def reseller
50
- Gyft::Client::Reseller.new(self)
50
+ @reseller ||= Gyft::Client::Reseller.new(self)
51
51
  end
52
52
 
53
53
  def partner
@@ -94,6 +94,10 @@ module Gyft
94
94
  case response
95
95
  when Net::HTTPSuccess
96
96
  json?(response) ? JSON.parse(response.body) : response.body
97
+ when Net::HTTPNotFound
98
+ raise NotFoundError, "Record not found (404)"
99
+ when Net::HTTPBadRequest
100
+ raise BadRequestError, "Bad request (400)"
97
101
  else
98
102
  if json?(response)
99
103
  raise ServerError, "HTTP #{response.code}: #{JSON.parse(response.body)}"
@@ -22,14 +22,21 @@ class Gyft::Client::Reseller
22
22
  @client.get('/reseller/merchants')['details'].map do |merchant|
23
23
  merchant[:client] = @client
24
24
  merchant = Gyft::Merchant.new(merchant)
25
- merchant.shop_cards = merchant.shop_cards.map do |card|
26
- card[:client] = @client
27
- Gyft::Card.new(card)
25
+
26
+ if merchant.shop_cards
27
+ merchant.shop_cards = merchant.shop_cards.map do |card|
28
+ card[:client] = @client
29
+ Gyft::Card.new(card)
30
+ end
28
31
  end
29
- merchant.categories = merchant.categories.map do |category|
30
- category[:client] = @client
31
- Gyft::Category.new(category)
32
+
33
+ if merchant.categories
34
+ merchant.categories = merchant.categories.map do |category|
35
+ category[:client] = @client
36
+ Gyft::Category.new(category)
37
+ end
32
38
  end
39
+
33
40
  merchant
34
41
  end
35
42
  end
data/lib/gyft/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Gyft
2
- VERSION = '0.0.4'
2
+ VERSION = '1.0.0'
3
3
  end
data/spec/card_spec.rb ADDED
@@ -0,0 +1,21 @@
1
+ require_relative './test_helper'
2
+
3
+ describe 'Gyft::Card' do
4
+
5
+ describe '.purchase' do
6
+ it "should delegate to the client" do
7
+ @client = Minitest::Mock.new
8
+ @card = Gyft::Card.new id: 123, client: @client
9
+ @partner = Minitest::Mock.new
10
+
11
+ @client.expect :partner, @partner
12
+ @partner.expect :purchase, @partner
13
+ @partner.expect :gift_card_direct, {}, [{ shop_card_id: 123, to_email: 'foo@bar.com'}]
14
+
15
+ @card.purchase(to_email: 'foo@bar.com')
16
+
17
+ @client.verify
18
+ @partner.verify
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ require_relative '../test_helper'
2
+
3
+ describe 'Gyft::Client::Health' do
4
+
5
+ describe '.check' do
6
+ it "should return if succesful" do
7
+ @client = Minitest::Mock.new
8
+ @health = Gyft::Client::Health.new @client
9
+
10
+ @client.expect :get, nil, ["/health/check"]
11
+ @health.check.must_equal true
12
+ @client.verify
13
+ end
14
+
15
+ it "should catch a SocketError" do
16
+ @client = Gyft::Client.new(api_key: "123", api_secret: "234")
17
+ @health = Gyft::Client::Health.new @client
18
+
19
+ @client.stub :get, ->(path){ raise SocketError.new } do
20
+ @health.check.must_equal false
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,44 @@
1
+ require_relative '../test_helper'
2
+
3
+ describe 'Gyft::Client::Partner' do
4
+
5
+ describe '.purchase.gift_card_direct' do
6
+ before do
7
+ @client = Minitest::Mock.new
8
+ @transaction = { id: '123' }
9
+ @partner = Gyft::Client::Partner.new @client
10
+ @params = { to_email: 'foo@bar.com', shop_card_id: '234' }
11
+ end
12
+
13
+ it "should return if succesful" do
14
+ @client.expect :post, @transaction, ["/partner/purchase/gift_card_direct", @params]
15
+ result = @partner.purchase.gift_card_direct(@params)
16
+ result.id.must_equal '123'
17
+ @client.verify
18
+ end
19
+
20
+ it "should error if params are missing" do
21
+ @params.delete(:to_email)
22
+ assert_raises KeyError do
23
+ @partner.purchase.gift_card_direct(@params)
24
+ end
25
+ end
26
+
27
+ it "should ignore invalid params" do
28
+ @new_params = @params.dup
29
+ @new_params[:foo] = 'bar'
30
+
31
+ @client.expect :post, @transaction, ["/partner/purchase/gift_card_direct", @params]
32
+ @partner.purchase.gift_card_direct(@new_params)
33
+ @client.verify
34
+ end
35
+
36
+ it "should symbolize keys" do
37
+ @new_params = { 'to_email' => 'foo@bar.com', 'shop_card_id' => '234' }
38
+
39
+ @client.expect :post, @transaction, ["/partner/purchase/gift_card_direct", @params]
40
+ @partner.purchase.gift_card_direct(@new_params)
41
+ @client.verify
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,60 @@
1
+ require_relative '../test_helper'
2
+
3
+ describe 'Gyft::Client::Reseller' do
4
+ before do
5
+ @client = Minitest::Mock.new
6
+ @reseller = Gyft::Client::Reseller.new @client
7
+ end
8
+
9
+ describe '.shop_cards' do
10
+ it "should return if succesful" do
11
+ @cards = [{ id: '123' }]
12
+ @client.expect :get, @cards, ["/reseller/shop_cards"]
13
+ result = @reseller.shop_cards
14
+ result.first.id.must_equal '123'
15
+ @client.verify
16
+ end
17
+ end
18
+
19
+ describe '.categories' do
20
+ it "should return if succesful" do
21
+ @categories = { 'details' => [{ id: '123' }] }
22
+ @client.expect :get, @categories, ["/reseller/categories"]
23
+ result = @reseller.categories
24
+ result.first.id.must_equal '123'
25
+ @client.verify
26
+ end
27
+ end
28
+
29
+ describe '.merchants' do
30
+ it "should return if succesful" do
31
+ @merchants = { 'details' => [{ id: '123' }] }
32
+ @client.expect :get, @merchants, ["/reseller/merchants"]
33
+ result = @reseller.merchants
34
+ result.first.id.must_equal '123'
35
+ @client.verify
36
+ end
37
+ end
38
+
39
+ describe '.account' do
40
+ it "should return if succesful" do
41
+ @account = { id: '123' }
42
+ @client.expect :get, @account, ["/reseller/account"]
43
+ result = @reseller.account
44
+ result.id.must_equal @account[:id]
45
+ @client.verify
46
+ end
47
+ end
48
+
49
+ describe '.transaction' do
50
+ it "should return a Gyft::Client::Transactions object" do
51
+ @reseller.transaction.must_be_instance_of Gyft::Client::Transactions
52
+ end
53
+ end
54
+
55
+ describe '.transactions' do
56
+ it "should return a Gyft::Client::Transactions object" do
57
+ @reseller.transactions.must_be_instance_of Gyft::Client::Transactions
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,54 @@
1
+ require_relative '../test_helper'
2
+
3
+ describe 'Gyft::Client::Transactions' do
4
+ before do
5
+ @client = Minitest::Mock.new
6
+ @transaction = { id: '123' }
7
+ @transactions = Gyft::Client::Transactions.new @client
8
+ end
9
+
10
+ describe '.find' do
11
+ it "should return if succesful" do
12
+ @client.expect :get, @transaction, ["/reseller/transaction/123"]
13
+ result = @transactions.find(123)
14
+ result.id.must_equal '123'
15
+ @client.verify
16
+ end
17
+ end
18
+
19
+ describe '.all' do
20
+ it "should return if succesful" do
21
+ @client.expect :get, [@transaction], ["/reseller/transactions"]
22
+ result = @transactions.all
23
+ result.first.id.must_equal '123'
24
+ @client.verify
25
+ end
26
+ end
27
+
28
+ describe '.first' do
29
+ it "should return if succesful" do
30
+ @client.expect :get, [@transaction], ["/reseller/transactions/first/10"]
31
+ result = @transactions.first(10)
32
+ result.first.id.must_equal '123'
33
+ @client.verify
34
+ end
35
+ end
36
+
37
+ describe '.last' do
38
+ it "should return if succesful" do
39
+ @client.expect :get, [@transaction], ["/reseller/transactions/last/10"]
40
+ result = @transactions.last(10)
41
+ result.first.id.must_equal '123'
42
+ @client.verify
43
+ end
44
+ end
45
+
46
+ describe '.refund' do
47
+ it "should return if succesful" do
48
+ @client.expect :post, @transaction, ["/reseller/transaction/refund", {id: 123}]
49
+ result = @transactions.refund(123)
50
+ result.id.must_equal '123'
51
+ @client.verify
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,112 @@
1
+ require_relative './test_helper'
2
+
3
+ describe 'Gyft::Client' do
4
+ before do
5
+ @client = Gyft::Client.new(api_key: '123', api_secret: '234')
6
+ end
7
+
8
+ describe '.initialize' do
9
+ it "should return successful with the right params" do
10
+ client = Gyft::Client.new(api_key: '123', api_secret: '234')
11
+ client.must_be_instance_of Gyft::Client
12
+ client.api_key.must_equal '123'
13
+ client.api_secret.must_equal '234'
14
+ client.environment.must_equal 'sandbox'
15
+ end
16
+
17
+ it "should be able to accept another environment" do
18
+ client = Gyft::Client.new(api_key: '123', api_secret: '234', environment: 'production')
19
+ client.environment.must_equal 'production'
20
+ end
21
+
22
+ it "should return successful with the ENV variables set" do
23
+ ENV['GYFT_API_KEY'] = '123'
24
+ ENV['GYFT_API_SECRET'] = '234'
25
+ ENV['GYFT_API_ENVIRONMENT'] = 'production'
26
+
27
+ client = Gyft::Client.new
28
+ client.must_be_instance_of Gyft::Client
29
+ client.api_key.must_equal '123'
30
+ client.api_secret.must_equal '234'
31
+ client.environment.must_equal 'production'
32
+
33
+ ENV.delete('GYFT_API_KEY')
34
+ ENV.delete('GYFT_API_SECRET')
35
+ ENV.delete('GYFT_API_ENVIRONMENT')
36
+ end
37
+
38
+ it "should raise without the right params" do
39
+ assert_raises KeyError do
40
+ Gyft::Client.new
41
+ end
42
+ end
43
+ end
44
+
45
+ describe '.cards' do
46
+ it "should delegate to Gyft::Reseller" do
47
+ @reseller = Minitest::Mock.new
48
+ @client.reseller = @reseller
49
+ @reseller.expect :shop_cards, nil
50
+ @client.cards
51
+ @reseller.verify
52
+ end
53
+ end
54
+
55
+ describe '.health' do
56
+ it "should return a Gyft::Client::Health object" do
57
+ @client.health.must_be_instance_of Gyft::Client::Health
58
+ end
59
+ end
60
+
61
+ describe '.reseller' do
62
+ it "should return a Gyft::Client::Reseller object" do
63
+ @client.reseller.must_be_instance_of Gyft::Client::Reseller
64
+ end
65
+ end
66
+
67
+ describe '.partner' do
68
+ it "should return a Gyft::Client::Partner object" do
69
+ @client.partner.must_be_instance_of Gyft::Client::Partner
70
+ end
71
+ end
72
+
73
+ describe '.get' do
74
+ it "should return the json on success" do
75
+ stub_request(:get, /apitest.gyft.com\/mashery\/v1\/reseller\/categories/).
76
+ to_return(:status => 200, :body => '{"status":0,"details":[{"id":4,"name":"Babies & Children"}]}', :headers => { 'Content-Type' => 'application/json'})
77
+
78
+ result = @client.get('/reseller/categories')
79
+ result['details'].first['id'].must_equal 4
80
+ end
81
+
82
+ it "should raise on 404" do
83
+ stub_request(:get, /apitest.gyft.com\/mashery\/v1\/reseller\/categories/).
84
+ to_return(:status => 404)
85
+
86
+ assert_raises Gyft::Client::NotFoundError do
87
+ @client.get('/reseller/categories')
88
+ end
89
+ end
90
+ end
91
+
92
+ describe '.post' do
93
+ it "should return the json on success" do
94
+ body = '{"id":"1234","status":0,"gf_reseller_id":"asdasd","gf_reseller_transaction_id":123,"email":"foo@bar.com","gf_order_id":123,"gf_order_detail_id":123,"gf_gyfted_card_id":123,"invalidated":false}'
95
+ stub_request(:post, /apitest.gyft.com\/mashery\/v1\/reseller\/transactions\/refund/).
96
+ to_return(:status => 200, :body => body, :headers => { 'Content-Type' => 'application/json'})
97
+
98
+ result = @client.post('/reseller/transactions/refund', id: '123')
99
+ result['id'].must_equal '1234'
100
+ end
101
+
102
+ it "should handle a bad request" do
103
+ stub_request(:post, /apitest.gyft.com\/mashery\/v1\/reseller\/transactions\/refund/).
104
+ to_return(:status => 400)
105
+
106
+ assert_raises Gyft::Client::BadRequestError do
107
+ @client.post('/reseller/transactions/refund', id: '123')
108
+ end
109
+ end
110
+ end
111
+
112
+ end
@@ -0,0 +1,4 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/pride'
3
+ require 'webmock/minitest'
4
+ require 'gyft'
@@ -0,0 +1,43 @@
1
+ require_relative './test_helper'
2
+
3
+ describe 'Gyft::Transaction' do
4
+
5
+ describe '.reload' do
6
+ it "should delegate to the client" do
7
+ @client = Minitest::Mock.new
8
+ @transaction = Gyft::Transaction.new id: 123, client: @client
9
+ @reseller = Minitest::Mock.new
10
+ @transactions = Minitest::Mock.new
11
+
12
+ @client.expect :reseller, @reseller
13
+ @reseller.expect :transactions, @transactions
14
+ @transactions.expect :find, {}, [123]
15
+
16
+ @transaction.reload
17
+
18
+ @client.verify
19
+ @reseller.verify
20
+ @transactions.verify
21
+ end
22
+ end
23
+
24
+ describe '.refund' do
25
+ it "should delegate to the client" do
26
+ @client = Minitest::Mock.new
27
+ @transaction = Gyft::Transaction.new id: 123, client: @client
28
+ @reseller = Minitest::Mock.new
29
+ @transactions = Minitest::Mock.new
30
+
31
+ @client.expect :reseller, @reseller
32
+ @reseller.expect :transactions, @transactions
33
+ @transactions.expect :refund, {}, [123]
34
+
35
+ @transaction.refund
36
+
37
+ @client.verify
38
+ @reseller.verify
39
+ @transactions.verify
40
+ end
41
+ end
42
+
43
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gyft
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cristiano Betta
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: awesome_print
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
55
  description: Wrapper for the Gyft API
70
56
  email: cbetta@gmail.com
71
57
  executables: []
@@ -88,7 +74,14 @@ files:
88
74
  - lib/gyft/refund.rb
89
75
  - lib/gyft/transaction.rb
90
76
  - lib/gyft/version.rb
91
- - spec/gyft_spec.rb
77
+ - spec/card_spec.rb
78
+ - spec/client/health_spec.rb
79
+ - spec/client/partner_spec.rb
80
+ - spec/client/reseller_spec.rb
81
+ - spec/client/transactions_spec.rb
82
+ - spec/client_spec.rb
83
+ - spec/test_helper.rb
84
+ - spec/transaction_spec.rb
92
85
  homepage: https://github.com/cbetta/gyft
93
86
  licenses:
94
87
  - MIT
data/spec/gyft_spec.rb DELETED
@@ -1,18 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'webmock/minitest'
3
- require 'gyft'
4
-
5
- describe 'Gyft::Reseller' do
6
-
7
- before do
8
- @client = Gyft::Client.new(api_key: '123', api_secret: '234')
9
- end
10
-
11
- describe '.health.check' do
12
- it 'should return the result' do
13
- stub_request(:get, /apitest.gyft.com\/mashery/)
14
- .to_return(status: 200, body: "", headers: {})
15
- @client.health.check.must_equal(true)
16
- end
17
- end
18
- end