pin_up 1.2.0 → 1.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: c67d8075501e91bd3b435d0e505340c02205a535
4
- data.tar.gz: 36267918b46bcc3bbeb595f3e8af798daba499f4
3
+ metadata.gz: f700bc2aa83973dd14ec89c9bff2bdb7b2fdfd78
4
+ data.tar.gz: bcc17c7fc2dc62c11cb92b3292d047bee18bc98d
5
5
  SHA512:
6
- metadata.gz: b5cc15ec66e259f6e3ef21c22b7fb4e936195ba84c22a2f8521b0ff130ba9e42bfa1a399b0986beafcfaab0c299d20b89c466c8e71d6b5dcd4129452da6f3500
7
- data.tar.gz: 1e25012796615fa553563200ca24888d915b06d6c55348f3ac7fdbd6d8696226424593d722add3dda0fcba055f8a36f6a04cff6c3d7f851724b44a880f364ebd
6
+ metadata.gz: 8b89a1203f95056d99e4734061a1bc6f2995b170e3ca24975d46087764692f6a61fe8b699a59a750db01bf328da315e21999ef099b9b31dc1d0f490eb4259ef8
7
+ data.tar.gz: 31b5c8ca1e3ab72d604020d9b1b1e55ec1b820f600ab7004f168eac96479dbc83cf5294004083dbc609f704be10c3e9b119371f488487b6bfd477fef6f81aa0e
data/README.md CHANGED
@@ -233,6 +233,26 @@ A bank account token can only be used once to create a recipient. The token auto
233
233
 
234
234
  Receipts have been extracted out into their [own gem](https://github.com/dNitza/pin_up_receipts)
235
235
 
236
+ ## Exceptions
237
+
238
+ A number of different error types are built in:
239
+
240
+ ### ResourceNotFound
241
+ The requested resource could not be found in Pin.
242
+
243
+ ### InvalidResource
244
+ A number of parameters sent to Pin were invalid.
245
+
246
+ ### ChargeError
247
+ Something went wrong while creating a charge in Pin. This could be due to insufficient funds, a card being declined or expired. A full list of possible errors is available [here](https://pin.net.au/docs/api/charges).
248
+
249
+ ### InsufficientPinBalance
250
+
251
+ N.B. All of the above errors return an error object with a `message` and a `response` attribute. The response is the raw response from Pin (useful for logging).
252
+
253
+ ### ClientError
254
+ An unsupported HTTP verb was used.
255
+
236
256
  ## Testing locally
237
257
  Create a YAML file under 'spec' called 'test_data.yml' and add in:
238
258
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.0
1
+ 1.3.0
@@ -11,7 +11,6 @@ require 'pin_up/client'
11
11
  require 'pin_up/customer'
12
12
  require 'pin_up/recipient'
13
13
  require 'pin_up/refund'
14
- require 'pin_up/retrying_client'
15
14
  require 'pin_up/transfer'
16
15
 
17
16
  require 'pin_up/pin_errors'
@@ -13,10 +13,11 @@ module Pin
13
13
  # env: The environment you want to use.
14
14
  # Leave blank for live and pass :test for test
15
15
  # An error is raised if an invalid env is passed in.
16
- def initialize(key = '', env = :live)
16
+ def initialize(key = '', env = :live, timeout = 1800)
17
17
  @key = key
18
18
  env = env.to_sym
19
19
  @@auth = { username: @key, password: '' }
20
+ @@timeout = timeout
20
21
  @@base_url = if env == :live
21
22
  'https://api.pin.net.au/1/'
22
23
  elsif env == :test
@@ -37,9 +38,7 @@ module Pin
37
38
  # args: method (Symbol), args (Hash)
38
39
  # eg. args => { url: 'cards', options: { ... } }
39
40
  def self.make_request(method, args)
40
- client = Pin::Client.new(method, args, @@base_url, @@auth)
41
- retrying_client = Pin::RetryingClient.new(client)
42
- retrying_client.make_request
41
+ Pin::Client.new(method, args, @@base_url, @@auth, @@timeout).make_request
43
42
  end
44
43
 
45
44
  ##
@@ -50,7 +50,7 @@ module Pin
50
50
  # returns: charge object
51
51
  # https://pin.net.au/docs/api/charges#put-charges
52
52
  def self.capture(token)
53
- build_response(make_request(:put, { url: "/charges/#{token}/capture" } ))
53
+ build_response(make_request(:put, { url: "charges/#{token}/capture" } ))
54
54
  end
55
55
  end
56
56
  end
@@ -1,19 +1,20 @@
1
1
  module Pin
2
2
  class Client
3
- def initialize(method, args, base_url, auth)
3
+ def initialize(method, args, base_url, auth, timeout)
4
4
  @method = method
5
5
  @args = args
6
6
  @base_url = base_url
7
7
  @auth = auth
8
+ @timeout = timeout
8
9
  end
9
10
 
10
11
  ##
11
12
  # Sends an authenticated request to pin's server
12
13
  # args: method (Symbol), args (Hash)
13
14
  # eg. args => { url: 'cards', options: { ... } }
14
- def make_request(times)
15
+ def make_request
15
16
  if %i(get post put patch delete).include? @method
16
- HTTParty.send(@method, "#{@base_url}#{@args[:url]}", body: @args[:options], basic_auth: @auth)
17
+ HTTParty.send(@method, "#{@base_url}#{@args[:url]}", body: @args[:options], basic_auth: @auth, timeout: @timeout)
17
18
  else
18
19
  Pin::PinError.handle_bad_request
19
20
  end
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: pin_up 1.2.0 ruby lib
5
+ # stub: pin_up 1.3.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "pin_up"
9
- s.version = "1.2.0"
9
+ s.version = "1.3.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Daniel Nitsikopoulos"]
14
- s.date = "2015-11-14"
14
+ s.date = "2016-03-31"
15
15
  s.description = "A Ruby gem wrapper for the pin-payments (pin.net.au) API"
16
16
  s.email = "dnitza@gmail.com"
17
17
  s.extra_rdoc_files = [
@@ -40,7 +40,6 @@ Gem::Specification.new do |s|
40
40
  "lib/pin_up/pin_errors.rb",
41
41
  "lib/pin_up/recipient.rb",
42
42
  "lib/pin_up/refund.rb",
43
- "lib/pin_up/retrying_client.rb",
44
43
  "lib/pin_up/transfer.rb",
45
44
  "pin_up.gemspec",
46
45
  "spec/balance_spec.rb",
@@ -23,10 +23,13 @@ RSpec.describe 'Base', :vcr, class: Pin::Base do
23
23
  expect { Pin::Base.new('KEY', :foo) }.to raise_error(RuntimeError, "'env' option must be :live or :test. Leave blank for live payments")
24
24
  end
25
25
 
26
- it 'should list succesfully connect to Pin' do
26
+ it 'should succesfully connect to Pin' do
27
27
  stub_request(:get, "https://#{@test_pin.key}:''@test-api.pin.net.au/1/customers")
28
28
  expect(Pin::Base.make_request(:get, { url: 'customers' }).code).to eq 200
29
- # expect(Pin::Base.auth_get('customers').code).to eq 200
30
29
  end
31
30
 
31
+ it "raises a timeout error if we don't get a response in time" do
32
+ @test_pin = Pin::Base.new(ENV['PIN_SECRET'], :test, 0)
33
+ expect { Pin::Base.make_request(:get, { url: 'customers' }) }.to raise_error(Net::ReadTimeout)
34
+ end
32
35
  end
@@ -1,37 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  RSpec.describe 'Client', class: Pin::Client do
4
- it 'delegates http requests to an inner object' do
5
- inner = double(make_request: 'RESULT')
6
- client = Pin::RetryingClient.new(inner)
7
- expect(client.make_request).to eq('RESULT')
8
- end
9
-
10
- it 'retries if a request fails' do
11
- inner = double
12
- client = Pin::RetryingClient.new(inner)
13
- times = 2
14
- allow(inner).to receive(:make_request) do
15
- raise "Oops" if (times -= 1) > 0
16
- 'RESULT'
17
- end
18
- expect(client.make_request).to eq('RESULT')
19
- end
20
-
21
- it 'gives up after a few tries' do
22
- inner = double
23
- client = Pin::RetryingClient.new(inner)
24
- times = 4
25
- allow(inner).to receive(:make_request) do
26
- raise "Ooops!" if (times -= 1) > 0
27
- end
28
- expect{client.make_request}.to raise_error('Ooops!')
29
- expect(inner).to have_received(:make_request).exactly(3).times
30
- end
31
-
32
4
  it 'fails if invalid http verb is used' do
33
- inner = Pin::Client.new(:foo, {}, '', '')
34
- client = Pin::RetryingClient.new(inner)
5
+ client = Pin::Client.new(:foo, {}, '', '', 30)
35
6
  expect {client.make_request}.to raise_error(Pin::ClientError, 'request :method must be one of get, post, put, patch or delete')
36
7
  end
37
- end
8
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pin_up
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Nitsikopoulos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-14 00:00:00.000000000 Z
11
+ date: 2016-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -179,7 +179,6 @@ files:
179
179
  - lib/pin_up/pin_errors.rb
180
180
  - lib/pin_up/recipient.rb
181
181
  - lib/pin_up/refund.rb
182
- - lib/pin_up/retrying_client.rb
183
182
  - lib/pin_up/transfer.rb
184
183
  - pin_up.gemspec
185
184
  - spec/balance_spec.rb
@@ -1,12 +0,0 @@
1
- module Pin
2
- require 'delegate'
3
-
4
- class RetryingClient < DelegateClass(Pin::Client)
5
- def make_request(*, times: 3)
6
- super
7
- rescue
8
- retry if (times -= 1) > 0
9
- raise
10
- end
11
- end
12
- end