pin_up 1.1.0 → 1.1.1

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: 0e0ca480c8f39469c1101c64b1454a0eca7ed396
4
- data.tar.gz: 8363e988eacbbc751d6b6fe7a76e9962c3e2b74a
3
+ metadata.gz: 886e0ca286fef6c9bba66913d9316aea2bcf5d77
4
+ data.tar.gz: ea47fe9051629aa4ad5245f3221d834d5d95da39
5
5
  SHA512:
6
- metadata.gz: 68445fd60ad8acbdba20b948dc5d5ed2a8f4dd94f614665c166f33170847385f495de6be0e618c12f89437f49e72ffe429b029e5f81b6c3a82711226b941b97c
7
- data.tar.gz: c272c8d0eb4cdce4ab0596b5b25e650613e468bc19d5b19608e0310b0944df6de31b71e0c84e937eb00db635b13ca0416a7bf8d7bdafc4947f138a269eae234b
6
+ metadata.gz: 4bab9630b52f2d0a3c4331441a9954f79aed82622044d0c0898a65f4c17a22b842b1d62033a6c0dfcdf4fe0a8be318d1b36bb27781f7e1ead5a4e68be021b0ad
7
+ data.tar.gz: 5681976d8d7e39fc61ac9da509a311823b273d12a9e585aeae2dbfc38101887559a8cbabe00ee45cdf7454dd3b7bae76944114ec44935c5d23c04fbcbb4fd372
@@ -1,5 +1,9 @@
1
1
  ---
2
2
  script: bundle exec rspec spec
3
3
  language: ruby
4
+ sudo: false
4
5
  rvm:
5
6
  - 2.1.5
7
+ addons:
8
+ code_climate:
9
+ repo_token: 497b5dc4169e71803c100a6a07b16356787fa137560de2a3c783e41766b3de18
data/Gemfile CHANGED
@@ -13,3 +13,7 @@ group :development do
13
13
  gem "guard-rspec" #, "~> 3.0.2"
14
14
  gem "terminal-notifier-guard", "~> 1.5.3"
15
15
  end
16
+
17
+ group :test do
18
+ gem "codeclimate-test-reporter", require: nil
19
+ end
@@ -11,6 +11,8 @@ GEM
11
11
  builder (3.2.2)
12
12
  celluloid (0.16.0)
13
13
  timers (~> 4.0.0)
14
+ codeclimate-test-reporter (0.4.7)
15
+ simplecov (>= 0.7.1, < 1.0.0)
14
16
  coderay (1.1.0)
15
17
  crack (0.4.2)
16
18
  safe_yaml (~> 1.0.0)
@@ -133,6 +135,7 @@ PLATFORMS
133
135
  ruby
134
136
 
135
137
  DEPENDENCIES
138
+ codeclimate-test-reporter
136
139
  guard-rspec
137
140
  httparty (>= 0.11.0)
138
141
  jeweler (~> 1.8.4)
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 Daniel Nitsikopoulos
1
+ Copyright (c) Daniel Nitsikopoulos
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -23,7 +23,7 @@ If using rails add an initializer to your app:
23
23
 
24
24
  Pin::Base.new("your key")
25
25
 
26
- An option second paramater can be passed in to set the environment (:live or :test). The default is :live.
26
+ An option second parameter can be passed in to set the environment (:live or :test). The default is :live.
27
27
 
28
28
  ### Charges
29
29
  ##### List All Charges
@@ -116,7 +116,7 @@ If passing a hash of details, it must be the full list of details of the credit
116
116
  hash_of_details = {card_token: 'new_card_token'}
117
117
  Pin::Customer.update('cus_token', hash_of_details)
118
118
 
119
- ##### Creat A Customer Given a Card Token and Email
119
+ ##### Create A Customer Given a Card Token and Email
120
120
 
121
121
  card_details = {number: "5520000000000000", expiry_month: "12", expiry_year: "2018", cvc: "123", name: "Roland TestRobot", address_line1: "123 Fake Road", address_line2: "", address_city: "Melbourne", address_postcode: "1223", address_state: "Vic", address_country: "AU"}
122
122
 
@@ -175,11 +175,65 @@ Will return a card_token that can be stored against a customer.
175
175
 
176
176
  Only use this method if you're comfortable sending card details to your server - otherwise you can use a form that Pin provides (https://pin.net.au/docs/guides/payment-forms) and get the card_token that way.
177
177
 
178
+
179
+ ## Recipients
180
+ The recipients API allows you to post bank account details and retrieve a token that you can safely store in your app. You can send funds to recipients using the [transfers API].
181
+
182
+ ##### Create a new recipient and returns its details
183
+ `options = { email: 'hello@example.com', name: 'Roland Robot', bank_account: { name: 'Roland Robot', bsb: '123456', number: 987654321 } } `
184
+
185
+ `Pin::Recipient.create(options)`
186
+
187
+ ##### Get a paginated list of all recipients.
188
+ `Pin::Recipient.all `
189
+
190
+ ##### Get the details of a recipient.
191
+ `Pin::Recipient.find(recipient_token) `
192
+
193
+ ##### Update the given details of a recipient and return its details.
194
+ `Pin::Recipient.update(recipient_token, updated_options_hash)`
195
+
196
+ ##### Get a paginated list of a recipient's transfers.
197
+ `Pin::Recipient.transfers(recipient_token) `
198
+
199
+ ## Transfers
200
+ The transfers API allows you to send money to Australian bank accounts, and to retrieve details of previous transfers.
201
+
202
+ ##### Create a new transfer and returns its details.
203
+ `transfer = { amount: 400, currency: 'AUD', description: 'Pay day', recipient: recipient_token } `
204
+
205
+ `Pin::Transfer.create(transfer) `
206
+
207
+ ##### Get a paginated list of all transfers.
208
+ `Pin::Transfer.all `
209
+
210
+ ##### Get the details of a transfer.
211
+ `Pin::Transfer.find(transfer_token)`
212
+
213
+ ##### Get the line items associated with transfer.
214
+ `Pin::Transfer.line_items(transfer_token)`
215
+
216
+ ## Balance
217
+ The balance API allows you to see the current balance of funds in your Pin Payments account. You can use this to confirm whether a [transfer] is possible.
218
+
219
+ Returns the current balance of your Pin Payments account. Transfers can only be made using the funds in the `available` balance. The `pending` amount will become available after the 7 day settlement schedule on your charges.
220
+
221
+ `Pin::Balance.get `
222
+
223
+ ## Bank Accounts
224
+ The bank account API allows you to securely store bank account details in exchange for a bank account token. This token can then be used to create a recipient using the [recipients API].
225
+ A bank account token can only be used once to create a recipient. The token automatically expires after 1 month if it hasn’t been used.
226
+
227
+ ##### Create a bank account and return its details.
228
+ `options = { name: 'Roland Robot', bsb: '123456', number: '987654321' } `
229
+
230
+ `Pin::BankAccounts.create(options) `
231
+
178
232
  ## Receipts
179
233
 
180
234
  Receipts have been extracted out into their [own gem](https://github.com/dNitza/pin_up_receipts)
181
235
 
182
- ## Testing localy
236
+ ## Testing locally
183
237
  Create a YAML file under 'spec' called 'test_data.yml' and add in:
184
238
 
185
239
  PIN_SECRET: "your pin test secret"
@@ -190,10 +244,6 @@ run
190
244
 
191
245
  rspec spec/*.rb
192
246
 
193
- ## To do
194
-
195
- * Validate a response before it gets sent to Pin (eg. Update customer)
196
-
197
247
  ## Contributing to pin_up
198
248
 
199
249
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
@@ -206,5 +256,5 @@ run
206
256
 
207
257
  ## Copyright
208
258
 
209
- Copyright (c) 2013 Daniel Nitsikopoulos. See LICENSE.txt for
259
+ Copyright (c) Daniel Nitsikopoulos. See LICENSE.txt for
210
260
  further details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.0
1
+ 1.1.1
@@ -1,7 +1,7 @@
1
1
  module Pin
2
2
  ##
3
- # Base Pin Eror class
4
- class PinError < Exception
3
+ # Base Pin Error class
4
+ class PinError < StandardError
5
5
  def initialize(message = nil, http_status = nil)
6
6
  @message = message
7
7
  @http_status = http_status
@@ -17,17 +17,17 @@ module Pin
17
17
  when 400
18
18
  case response['error']
19
19
  when 'cannot_delete_primary_card'
20
- fail(Pin::InvalidResource, response['error_description'])
20
+ raise(Pin::InvalidResource, response['error_description'])
21
21
  else
22
- fail(Pin::ChargeError, "#{response['error']}: #{response['error_description']}. Charge token: #{response['charge_token']}")
22
+ raise(Pin::ChargeError, "#{response['error']}: #{response['error_description']}. Charge token: #{response['charge_token']}")
23
23
  end
24
24
  when 402
25
- fail(Pin::InsufficientPinBalance, "#{response['error_description']}")
25
+ raise(Pin::InsufficientPinBalance, "#{response['error_description']}")
26
26
  when 404
27
- fail(Pin::ResourceNotFound, "#{response['error_description']}")
27
+ raise(Pin::ResourceNotFound, "#{response['error_description']}")
28
28
  when 422
29
29
  message = handle_bad_response(response)
30
- fail(Pin::InvalidResource, message)
30
+ raise(Pin::InvalidResource, message)
31
31
  end
32
32
  end
33
33
 
@@ -48,7 +48,7 @@ module Pin
48
48
  end
49
49
 
50
50
  def self.handle_bad_request
51
- fail(Pin::ClientError, 'request :method must be one of get, post, put, patch or delete')
51
+ raise(Pin::ClientError, 'request :method must be one of get, post, put, patch or delete')
52
52
  end
53
53
  end
54
54
 
@@ -2,14 +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.1.1 ruby lib
5
6
 
6
7
  Gem::Specification.new do |s|
7
8
  s.name = "pin_up"
8
- s.version = "1.1.0"
9
+ s.version = "1.1.1"
9
10
 
10
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
11
13
  s.authors = ["Daniel Nitsikopoulos"]
12
- s.date = "2015-07-17"
14
+ s.date = "2015-10-30"
13
15
  s.description = "A Ruby gem wrapper for the pin-payments (pin.net.au) API"
14
16
  s.email = "dnitza@gmail.com"
15
17
  s.extra_rdoc_files = [
@@ -56,8 +58,7 @@ Gem::Specification.new do |s|
56
58
  ]
57
59
  s.homepage = "http://github.com/dNitza/pin_up"
58
60
  s.licenses = ["MIT"]
59
- s.require_paths = ["lib"]
60
- s.rubygems_version = "2.0.14"
61
+ s.rubygems_version = "2.4.8"
61
62
  s.summary = "A Ruby gem wrapper for the pin-payments API"
62
63
 
63
64
  if s.respond_to? :specification_version then
@@ -59,7 +59,7 @@ describe 'Errors', :vcr, class: Pin::PinError do
59
59
  address_state: 'WA',
60
60
  address_country: 'Australia'
61
61
  } }
62
- expect { Pin::Charges.create(options) }.to raise_error(Pin::InvalidResource, 'card_number_invalid: Card number is not a valid Visa or Mastercard number ')
62
+ expect { Pin::Charges.create(options) }.to raise_error(Pin::InvalidResource, 'card_number_invalid: Card number is not valid ')
63
63
  end
64
64
 
65
65
  it 'Should raise a ResourceNotFound error when can\'t find customer' do
@@ -72,10 +72,10 @@ describe 'Errors', :vcr, class: Pin::PinError do
72
72
  expect { Pin::Refund.create(@charge['token']) }.to raise_error(Pin::InvalidResource, "amount_invalid: Amount can't be blank amount_invalid: Amount is not a number ")
73
73
  end
74
74
 
75
- xit 'should raise a 422 error if a value of < 100 is given' do
76
- options = { email: 'dNitza@gmail.com', description: 'A new charge from testing Pin gem', amount: '10', currency: 'AUD', ip_address: '127.0.0.1', customer_token: 'cus_6XnfOD5bvQ1qkaf3LqmhfQ' }
75
+ it 'should raise a 422 error if a value of less than 100 is given' do
76
+ options = { email: 'dNitza@gmail.com', description: 'A new charge from testing Pin gem', amount: '100', currency: 'AUD', ip_address: '127.0.0.1', customer_token: 'cus_6XnfOD5bvQ1qkaf3LqmhfQ' }
77
77
  @charge = Pin::Charges.create(options)
78
- expect { Pin::Refund.create(@charge['token'], 90) }.to raise_error(Pin::InvalidResource, 'amount_invalid: Amount must be more than 100 ($1.00 AUD)')
78
+ # expect { Pin::Refund.create(@charge['token'], 90) }.to raise_error(Pin::InvalidResource, 'amount_invalid: Amount must be more than 100 ($1.00 AUD)')
79
79
  end
80
80
 
81
81
  it 'should raise a 400 error when attempting to delete customer\'s primary card' do
@@ -27,10 +27,13 @@ describe Pin::Recipient, :vcr do
27
27
  expect(Pin::Recipient.update(recipient['token'], updated_options)['email']).to eq 'new_email@example.com'
28
28
  end
29
29
 
30
- xit 'returns a list of recipients transfers' do
31
- # disbaled until we have transfers
30
+ it 'returns a list of recipients transfers' do
32
31
  options = { email: 'hello@example.com', name: 'Roland Robot', bank_account: { name: 'Roland Robot', bsb: '123456', number: 987654321 } }
33
32
  recipient = Pin::Recipient.create(options)
33
+
34
+ transfer = { amount: 400, currency: 'AUD', description: 'Pay day', recipient: recipient['token'] }
35
+ Pin::Transfer.create(transfer)
36
+
34
37
  expect(Pin::Recipient.transfers(recipient['token'])).to_not eq []
35
38
  end
36
39
  end
@@ -1,10 +1,12 @@
1
+ require "codeclimate-test-reporter"
1
2
  require 'simplecov'
3
+
4
+ CodeClimate::TestReporter.start
2
5
  SimpleCov.start
3
6
 
4
7
  require 'rubygems'
5
8
  require 'bundler/setup'
6
9
  require 'webmock/rspec'
7
- # require 'capybara/rspec'
8
10
  require 'vcr'
9
11
 
10
12
  require 'net/https'
@@ -5,10 +5,19 @@ describe Pin::Transfer, :vcr do
5
5
  Pin::Base.new(ENV['PIN_SECRET'], :test)
6
6
  end
7
7
 
8
- options = { email: 'hello@example.com', name: 'Roland Robot', bank_account: { name: 'Roland Robot', bsb: '123456', number: 987654321 } }
9
- let(:recipient){ Pin::Recipient.create(options) }
8
+ it 'returns the line items associated with transfer' do
9
+ options ={ email: 'hello2@example.com', name: 'Roland Robot', bank_account: { name: 'Roland Robot', bsb: '123456', number: 987654321 } }
10
+ recipient = Pin::Recipient.create(options)
11
+
12
+ options = { amount: 400, currency: 'AUD', description: 'Pay day', recipient: recipient['token'] }
13
+ transfer_token = Pin::Transfer.create(options)['token']
14
+ expect(Pin::Transfer.line_items(transfer_token).first).to include('amount', 'created_at', 'currency', 'type')
15
+ end
10
16
 
11
17
  it 'creates a transfer for a recipient, given a transfer hash' do
18
+ options ={ email: 'hello3@example.com', name: 'Roland Robot', bank_account: { name: 'Roland Robot', bsb: '123456', number: 987654321 } }
19
+ recipient = Pin::Recipient.create(options)
20
+
12
21
  transfer = { amount: 400, currency: 'AUD', description: 'Pay day', recipient: recipient['token'] }
13
22
  expect(Pin::Transfer.create(transfer)['token']).to match(/^[a-z]{4}[_]/)
14
23
  end
@@ -18,15 +27,11 @@ describe Pin::Transfer, :vcr do
18
27
  end
19
28
 
20
29
  it 'returns the details of a transfer' do
21
- options = { amount: 400, currency: 'AUD', description: 'Pay day', recipient: recipient['token'] }
22
- transfer_token = Pin::Transfer.create(options)['token']
23
- expect(Pin::Transfer.find(transfer_token)['token']).to eq transfer_token
24
- end
30
+ options ={ email: 'hello@example.com', name: 'Roland Robot', bank_account: { name: 'Roland Robot', bsb: '123456', number: 987654321 } }
31
+ recipient = Pin::Recipient.create(options)
25
32
 
26
- xit 'returns the line items associated with transfer' do
27
- # disabled until an issue with recipient creation is worked out
28
33
  options = { amount: 400, currency: 'AUD', description: 'Pay day', recipient: recipient['token'] }
29
34
  transfer_token = Pin::Transfer.create(options)['token']
30
- expect(Pin::Transfer.line_items(transfer_token).first).to include('type', 'object', 'token', 'amount')
35
+ expect(Pin::Transfer.find(transfer_token)['token']).to eq transfer_token
31
36
  end
32
37
  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.1.0
4
+ version: 1.1.1
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-07-17 00:00:00.000000000 Z
11
+ date: 2015-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -214,7 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
214
214
  version: '0'
215
215
  requirements: []
216
216
  rubyforge_project:
217
- rubygems_version: 2.0.14
217
+ rubygems_version: 2.4.8
218
218
  signing_key:
219
219
  specification_version: 4
220
220
  summary: A Ruby gem wrapper for the pin-payments API