pin_payment 0.0.5

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0c7b070b4634a8b7e1db258cf2453aed51f23393
4
+ data.tar.gz: 25fb4b21844ee2142355082d11ea250beea9fec0
5
+ SHA512:
6
+ metadata.gz: df77eb656111fea702bf69ee97840b97cfd4e39f90663a9045f4e6c4b93ec1695523d764453630ef8fa213406110f3744ff29073e2ee0bf2212d677fdf66f628
7
+ data.tar.gz: e1d6ae83373cf53c7f9ef981496eca10cb97e5e447dbc510fcb4fba6850156f277c1abae798ca155b492768cdc87705420bcb0d501336a7eb1a5411dc0db17e9
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ /.bundle
2
+ /gems
3
+ /pkg
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,18 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ pin_payment (0.0.5)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ fakeweb (1.3.0)
10
+ rake (10.0.4)
11
+
12
+ PLATFORMS
13
+ ruby
14
+
15
+ DEPENDENCIES
16
+ fakeweb
17
+ pin_payment!
18
+ rake
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ (The MIT License)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ 'Software'), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,93 @@
1
+ # PinPayment
2
+
3
+ Ruby interface to the http://pin.net.au/ API.
4
+
5
+ ## Installation
6
+
7
+ Using bundler you can add the gem to your Gemfile.
8
+
9
+ gem 'pin_payment'
10
+
11
+ Or you can clone the repo and build them gem yourself:
12
+
13
+ bundle install --path gems
14
+ bundle exec rake build
15
+ gem install pkg/pin*.gem
16
+
17
+ ## Usage
18
+
19
+ First you will need to set your `public_key`, `secret_key`, and the `api_url`.
20
+ These can be found on your pin.net.au dashboard (under the "Account" section).
21
+ If you're using rails, this is best done in an initializer such as
22
+ `config/initializers/pin_payment.rb`, and you will need different keys for different
23
+ environments, e.g. wrap them around `if Rails.env.development?`.
24
+
25
+ ```ruby
26
+ PinPayment.public_key = 'super nintendo chalmers'
27
+ PinPayment.secret_key = 'purple monkey dishwasher'
28
+ PinPayment.api_url = 'http://api.pin.net.au' # Live endpoint, the default is the test endpoint
29
+ ```
30
+
31
+ Creating the customer on pin.net.au is only required if you want to bill the
32
+ customer in future (e.g. recurring billing, where writing the background
33
+ task is up to you), if you are only doing a single transaction, this step is
34
+ not required (but recommended).
35
+
36
+ ```ruby
37
+ customer = PinPayment::Customer.create(email: 'foo@example.com', card_token: params[:card_token])
38
+ ```
39
+
40
+ The important information from the returned object is `customer.token`. You
41
+ will need this for future billing. Store it in your own application
42
+ somewhere.
43
+
44
+ Now you can create charges.
45
+
46
+ ```ruby
47
+ charge = PinPayment::Charge.create(
48
+ customer_token: customer.token, # you can optionally pass a card_token instead
49
+ email: customer.email,
50
+ amount: 1000,
51
+ currency: 'USD',
52
+ description: 'Widgets',
53
+ ip_address: request.ip
54
+ )
55
+
56
+ if charge.success?
57
+ # You would now store charge.token as a reference for this payment
58
+ end
59
+ ```
60
+
61
+ ## TODO
62
+
63
+ * `PinPayment::Card` is non existent. I haven't had a use for it myself as yet, it
64
+ would be easy to build and will do so if I ever see the need. But as per the
65
+ [guide in the documentation](https://pin.net.au/docs/guides/payment-forms),
66
+ for a web interface it is much better to have the `card_token` created in
67
+ the javascript and never have the responsibility of credit card info being
68
+ sent directly to your server.
69
+ * Neither of the models support being handed a `card` hash. The API supports
70
+ doing so, but as above, I've not yet had the need and have always had a
71
+ `card_token` handy to pass in.
72
+
73
+ ## Testing
74
+
75
+ I'm just using the `fakeweb` gem at the moment with a bunch of pre-defined
76
+ responses that I know the API gives. We're not really here to test the output of
77
+ the API, I think we can safely assume it will always give the same output for
78
+ the same input, and I don't really want to spam their service every time someone
79
+ runs the test suite. Nor do I want to hard code my test API keys or expect every
80
+ developer to create a pin account. Suggestions on improvement here are welcome
81
+ though.
82
+
83
+ ## Contributing
84
+
85
+ Fork it and send me pull requests. I'll happily merge it or tell you what I
86
+ think in no uncertain terms :-)
87
+
88
+ Do not bother sending me a pull request for ruby 1.8 support though. I will tell
89
+ you where to go, and it involves a bridge.
90
+
91
+ ## Maintainer(s)
92
+
93
+ * Danial Pearce (git@tigris.id.au)
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rake/testtask'
5
+ Rake::TestTask.new do |t|
6
+ t.libs << 'test'
7
+ end
8
+
9
+ task default: :test
@@ -0,0 +1,36 @@
1
+ require 'pin_payment/base'
2
+ require 'pin_payment/charge'
3
+ require 'pin_payment/customer'
4
+ require 'pin_payment/error'
5
+ require 'pin_payment/refund'
6
+ require 'pin_payment/version'
7
+
8
+ module PinPayment
9
+ @@api_url = 'https://test-api.pin.net.au'
10
+ @@secret_key = nil
11
+ @@public_key = nil
12
+
13
+ def self.api_url
14
+ @@api_url
15
+ end
16
+
17
+ def self.api_url=(url)
18
+ @@api_url = url
19
+ end
20
+
21
+ def self.secret_key
22
+ @@secret_key
23
+ end
24
+
25
+ def self.secret_key=(key)
26
+ @@secret_key = key
27
+ end
28
+
29
+ def self.public_key
30
+ @@public_key
31
+ end
32
+
33
+ def self.public_key=(key)
34
+ @@public_key = key
35
+ end
36
+ end
@@ -0,0 +1,43 @@
1
+ require 'json'
2
+ require 'pin_payment/error'
3
+
4
+ module PinPayment
5
+ class Base
6
+
7
+ protected
8
+
9
+ def self.post uri, options
10
+ fetch Net::HTTP::Post, uri, options
11
+ end
12
+
13
+ def self.put uri, options
14
+ fetch Net::HTTP::Put, uri, options
15
+ end
16
+
17
+ def self.get uri, options
18
+ fetch Net::HTTP::Get, uri, options
19
+ end
20
+
21
+ # TODO: Accept card as a hash that would create the card at the same time as the charge
22
+ def self.fetch klass, uri, options
23
+ client = Net::HTTP.new(uri.host, uri.port)
24
+ client.use_ssl = true
25
+ client.verify_mode = OpenSSL::SSL::VERIFY_PEER
26
+ response = client.request(
27
+ klass.new(uri.request_uri).tap do |http|
28
+ http.basic_auth(PinPayment.secret_key, '')
29
+ http['User-Agent'] = "#{self}/#{PinPayment::Version::STRING}"
30
+ http.set_form_data options
31
+ end
32
+ )
33
+ begin
34
+ response = JSON.parse(response.body)
35
+ rescue JSON::ParserError => e
36
+ raise Error::InvalidResponse.new(e.message)
37
+ end
38
+ raise(Error.create(response['error'], response['error_description'], response['messages'])) if response['error']
39
+ response['response']
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,30 @@
1
+ module PinPayment
2
+ class Charge < Base
3
+ attr_reader :token, :amount, :currency, :description, :email, :ip_address, :created_at, :card_token
4
+
5
+ def self.create options
6
+ response = self.post(
7
+ URI.parse(PinPayment.api_url).tap{|uri| uri.path = '/1/charges' },
8
+ options.select{|k| %w(amount currency description email ip_address card_token customer_token).include?(k.to_s) }
9
+ )
10
+ self.new.tap do |charge|
11
+ charge.instance_variable_set('@card_token', response['card']['token']) if response['card']
12
+ %w(token amount currency description email ip_address created_at error_message success).each do |key|
13
+ charge.instance_variable_set("@#{key}", response[key])
14
+ end
15
+ end
16
+ end
17
+
18
+ def refund!
19
+ Refund.create(charge_token: token)
20
+ end
21
+
22
+ def success?
23
+ @success == true
24
+ end
25
+
26
+ def errors
27
+ @error_message
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,33 @@
1
+ module PinPayment
2
+ class Customer < Base
3
+ attr_reader :token, :email, :created_at, :card_token
4
+
5
+ def self.create options
6
+ response = post(
7
+ URI.parse(PinPayment.api_url).tap{|uri| uri.path = '/1/customers' },
8
+ options.select{|k| %w(email card_token).include?(k.to_s) }
9
+ )
10
+ new.tap do |customer|
11
+ customer.instance_variable_set('@card_token', response['card']['token']) if response['card']
12
+ %w(token email created_at).each do |key|
13
+ customer.instance_variable_set("@#{key}", response[key])
14
+ end
15
+ end
16
+ end
17
+
18
+ def self.update options
19
+ # PUT /1/customers/cus_XZg1ULpWaROQCOT5PdwLkQ
20
+ response = put(
21
+ URI.parse(PinPayment.api_url).tap{|uri| uri.path = "/1/customers/#{options[:token] || options['token']}" },
22
+ options.select{|k| %w(email card_token).include?(k.to_s) }
23
+ )
24
+ new.tap do |customer|
25
+ customer.instance_variable_set('@card_token', response['card']['token']) if response['card']
26
+ %w(token email created_at).each do |key|
27
+ customer.instance_variable_set("@#{key}", response[key])
28
+ end
29
+ end
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,25 @@
1
+ module PinPayment
2
+ class Error < Exception
3
+
4
+ def self.create type, description, messages = nil
5
+ klass = case type
6
+ when 'token_already_used'; TokenAlreadyUsed
7
+ when 'invalid_resource'; InvalidResource
8
+ when 'resource_not_found'; ResourceNotFound
9
+ else self
10
+ end
11
+ if messages.is_a?(Array)
12
+ description = description + ' ' + messages.map{|x| "(#{x['message']})" }.join(' & ')
13
+ elsif messages.is_a?(Hash)
14
+ description = description + ' ' + messages.values.flatten.map{|x| "(#{x})" }.join(' & ')
15
+ end
16
+ klass.new(description)
17
+ end
18
+
19
+ class InvalidResponse < Error; end
20
+ class InvalidResource < Error; end
21
+ class ResourceNotFound < Error; end
22
+ class TokenAlreadyUsed < Error; end
23
+
24
+ end
25
+ end
@@ -0,0 +1,32 @@
1
+ module PinPayment
2
+ class Refund < Base
3
+ attr_reader :token, :amount, :currency, :charge_token, :created_at
4
+
5
+ def self.create options
6
+ response = self.post(
7
+ URI.parse(PinPayment.api_url).tap{|uri| uri.path = "/1/charges/#{options[:charge_token] || options['charge_token']}/refunds" },
8
+ {}
9
+ )
10
+ self.new.tap do |charge|
11
+ %w(token amount currency created_at error_message status_message).each do |key|
12
+ charge.instance_variable_set("@#{key}", response[key])
13
+ end
14
+ end
15
+ end
16
+
17
+ # TODO: API documentation only shows success as being "null" in the JSON
18
+ # response, so not sure this is possible. All my refunds on the test site
19
+ # end up in a "Pending" state so not entirely sure on this one.
20
+ def success?
21
+ @success == true
22
+ end
23
+
24
+ def status
25
+ @status_message
26
+ end
27
+
28
+ def errors
29
+ @error_message
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,8 @@
1
+ module PinPayment
2
+ module Version
3
+ MAJOR = 0
4
+ MINOR = 0
5
+ PATCH = 5
6
+ STRING = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
+ end
8
+ end
@@ -0,0 +1,24 @@
1
+ $:.unshift(File.join(File.dirname(__FILE__), 'lib'))
2
+
3
+ require 'pin_payment/version'
4
+
5
+ spec = Gem::Specification.new do |s|
6
+ s.name = 'pin_payment'
7
+ s.version = PinPayment::Version::STRING
8
+ s.summary = 'Ruby bindings for the Pin API'
9
+ s.description = 'Pin is the easiest way to accept payments online. See https://pin.net.au/ for details.'
10
+ s.authors = ['Danial Pearce']
11
+ s.email = ['git@tigris.id.au']
12
+ s.licenses = ['MIT']
13
+ s.homepage = 'https://github.com/tigris/pin_payment'
14
+
15
+ s.add_development_dependency('fakeweb')
16
+ s.add_development_dependency('rake')
17
+
18
+ s.required_ruby_version = '>= 1.9.2'
19
+
20
+ s.files = `git ls-files`.split("\n")
21
+ s.test_files = `git ls-files -- test/*`.split("\n")
22
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ s.require_paths = ['lib']
24
+ end
@@ -0,0 +1,15 @@
1
+ ---
2
+ charge:
3
+ token_already_used: '{"error":"token_already_used","error_description":"Token already used. Card tokens can only be used once, to create a charge or assign a card to a customer."}'
4
+ invalid_amount: '{"error":"invalid_resource","error_description":"One or more parameters were missing or invalid.","messages":[{"param":"amount","code":"amount_invalid","message":"Amount must be an integer"},{"param":"amount","code":"amount_invalid","message":"Amount must be more than 1 USD"}]}'
5
+ success: '{"response":{"token":"ch_BjGW-S6WUisI6mOgpDRimg","success":true,"amount":1000,"currency":"USD","description":"Widgets","email":"foo@example.com","ip_address":"127.0.0.1","created_at":"2013-06-12T23:55:38Z","status_message":"Success!","error_message":null,"card":{"token":"card_qMwnMfpG-olOhfJeyxmrcg","display_number":"XXXX-XXXX-XXXX-0000","scheme":"master","address_line1":"123 Main St","address_line2":"","address_city":"Melbourne","address_postcode":"3000","address_state":"Victoria","address_country":"Australia"},"transfer":[],"amount_refunded":0,"total_fees":null,"merchant_entitlement":null,"refund_pending":false}}'
6
+ update_customer:
7
+ blank_email: '{"error":"invalid_resource","error_description":"One or more parameters were missing or invalid.","messages":[{"param":"email","code":"email_invalid","message":"Email can''t be blank"}]}'
8
+ blank_token: '{"error":"resource_not_found","error_description":"No resource was found at this URL. See https://pin.net.au/docs/api for API documentation and a list of valid URLs."}'
9
+ success: '{"response":{"token":"cus__03Cn1lSk3offZ0IGkwpCg","email":"foo@example.com","created_at":"2013-06-12T10:08:30Z","card":{"token":"card_qMwnMfpG-olOhfJeyxmrcg","display_number":"XXXX-XXXX-XXXX-0000","scheme":"master","address_line1":"123 Main St","address_line2":"","address_city":"Melbourne","address_postcode":"3000","address_state":"Victoria","address_country":"Australia"}}}'
10
+ create_customer:
11
+ blank_email: '{"error":"invalid_resource","error_description":"One or more parameters were missing or invalid.","messages":[{"param":"email","code":"email_invalid","message":"Email can''t be blank"}]}'
12
+ success: '{"response":{"token":"cus__03Cn1lSk3offZ0IGkwpCg","email":"foo@example.com","created_at":"2013-06-12T10:08:30Z","card":{"token":"card_qMwnMfpG-olOhfJeyxmrcg","display_number":"XXXX-XXXX-XXXX-0000","scheme":"master","address_line1":"123 Main St","address_line2":"","address_city":"Melbourne","address_postcode":"3000","address_state":"Victoria","address_country":"Australia"}}}'
13
+ refund:
14
+ success: '{"response":{"token":"rf_wMYx5YHKaZAwQgj5rtNuTg","success":null,"amount":1000,"currency":"USD","charge":"ch_BjGW-S6WUisI6mOgpDRimg","created_at":"2013-06-25T03:16:33Z","error_message":null,"status_message":"Pending"}}'
15
+ duplicate: '{"error":"invalid_resource","error_description":"One or more parameters were missing or invalid.","messages":{"charge":["You have tried to refund more than the original charge"]}}'
@@ -0,0 +1,11 @@
1
+ require 'fakeweb'
2
+ require 'minitest/autorun'
3
+ require 'pin_payment'
4
+ require 'yaml'
5
+
6
+ def fixtures
7
+ return @fixtures if @fixtures
8
+ @fixtures = {}.tap do |f|
9
+ f['responses'] = YAML.load(File.read File.join(File.dirname(__FILE__), 'fixtures', 'responses.yml'))
10
+ end
11
+ end
@@ -0,0 +1,20 @@
1
+ require 'test_helper'
2
+
3
+ class TestPinCharge < MiniTest::Unit::TestCase
4
+ def setup
5
+ FakeWeb.allow_net_connect = false
6
+ end
7
+
8
+ def test_invalid_amount
9
+ FakeWeb.register_uri(:post, 'https://test-api.pin.net.au/1/charges', body: fixtures['responses']['charge']['invalid_amount'])
10
+ assert_raises PinPayment::Error::InvalidResource do
11
+ PinPayment::Charge.create(customer_token: 'cus__03Cn1lSk3offZ0IGkwpCg', amount: 10.0)
12
+ end
13
+ end
14
+
15
+ def test_successful_charge
16
+ FakeWeb.register_uri(:post, 'https://test-api.pin.net.au/1/charges', body: fixtures['responses']['charge']['success'])
17
+ charge = PinPayment::Charge.create(customer_token: 'cus__03Cn1lSk3offZ0IGkwpCg', amount: 1000)
18
+ assert_equal true, charge.success?
19
+ end
20
+ end
@@ -0,0 +1,40 @@
1
+ require 'test_helper'
2
+
3
+ class TestPinCustomer < MiniTest::Unit::TestCase
4
+ def setup
5
+ FakeWeb.allow_net_connect = false
6
+ end
7
+
8
+ def test_update_with_blank_email
9
+ FakeWeb.register_uri(:put, 'https://test-api.pin.net.au/1/customers/cus__03Cn1lSk3offZ0IGkwpCg', body: fixtures['responses']['update_customer']['blank_email'])
10
+ assert_raises PinPayment::Error::InvalidResource do
11
+ PinPayment::Customer.update(token: 'cus__03Cn1lSk3offZ0IGkwpCg', email: nil)
12
+ end
13
+ end
14
+
15
+ def test_update_with_blank_token
16
+ FakeWeb.register_uri(:put, 'https://test-api.pin.net.au/1/customers/', body: fixtures['responses']['update_customer']['blank_token'])
17
+ assert_raises PinPayment::Error::ResourceNotFound do
18
+ PinPayment::Customer.update(email: 'foo@example.com')
19
+ end
20
+ end
21
+
22
+ def test_create_with_blank_email
23
+ FakeWeb.register_uri(:post, 'https://test-api.pin.net.au/1/customers', body: fixtures['responses']['create_customer']['blank_email'])
24
+ assert_raises PinPayment::Error::InvalidResource do
25
+ PinPayment::Customer.create(email: nil)
26
+ end
27
+ end
28
+
29
+ def test_create_success
30
+ FakeWeb.register_uri(:post, 'https://test-api.pin.net.au/1/customers', body: fixtures['responses']['create_customer']['success'])
31
+ customer = PinPayment::Customer.create(email: 'foo@example.com')
32
+ assert_equal customer.token, 'cus__03Cn1lSk3offZ0IGkwpCg'
33
+ end
34
+
35
+ def test_update_success
36
+ FakeWeb.register_uri(:put, 'https://test-api.pin.net.au/1/customers/cus__03Cn1lSk3offZ0IGkwpCg', body: fixtures['responses']['update_customer']['success'])
37
+ customer = PinPayment::Customer.update(token: 'cus__03Cn1lSk3offZ0IGkwpCg', email: 'foo@example.com')
38
+ assert_equal customer.token, 'cus__03Cn1lSk3offZ0IGkwpCg'
39
+ end
40
+ end
@@ -0,0 +1,31 @@
1
+ require 'test_helper'
2
+
3
+ class TestPinRefund < MiniTest::Unit::TestCase
4
+ def setup
5
+ FakeWeb.allow_net_connect = false
6
+ end
7
+
8
+ def test_duplicate_refund
9
+ token = 'ch_BjGW-S6WUisI6mOgpDRimg'
10
+ FakeWeb.register_uri(:post, "https://test-api.pin.net.au/1/charges/#{token}/refunds", body: fixtures['responses']['refund']['duplicate'])
11
+ assert_raises PinPayment::Error::InvalidResource do
12
+ PinPayment::Refund.create(charge_token: token)
13
+ end
14
+ end
15
+
16
+ def test_manual_refund
17
+ token = 'ch_BjGW-S6WUisI6mOgpDRimg'
18
+ FakeWeb.register_uri(:post, "https://test-api.pin.net.au/1/charges/#{token}/refunds", body: fixtures['responses']['refund']['success'])
19
+ refund = PinPayment::Refund.create(charge_token: token)
20
+ assert_equal 'Pending', refund.status
21
+ end
22
+
23
+ def test_charge_refund
24
+ FakeWeb.register_uri(:post, 'https://test-api.pin.net.au/1/charges', body: fixtures['responses']['charge']['success'])
25
+ charge = PinPayment::Charge.create(customer_token: 'cus__03Cn1lSk3offZ0IGkwpCg', amount: 1000)
26
+
27
+ FakeWeb.register_uri(:post, "https://test-api.pin.net.au/1/charges/#{charge.token}/refunds", body: fixtures['responses']['refund']['success'])
28
+ refund = charge.refund!
29
+ assert_equal 'Pending', refund.status
30
+ end
31
+ end
@@ -0,0 +1,21 @@
1
+ require 'test_helper'
2
+
3
+ class TestPinSetup < MiniTest::Unit::TestCase
4
+ def test_setting_public_key
5
+ assert_equal nil, PinPayment.public_key
6
+ PinPayment.public_key = 'foo'
7
+ assert_equal 'foo', PinPayment.public_key
8
+ end
9
+
10
+ def test_setting_secret_key
11
+ assert_equal nil, PinPayment.secret_key
12
+ PinPayment.secret_key = 'foo'
13
+ assert_equal 'foo', PinPayment.secret_key
14
+ end
15
+
16
+ def test_api_url
17
+ assert_equal 'https://test-api.pin.net.au', PinPayment.api_url
18
+ PinPayment.api_url = 'foo'
19
+ assert_equal 'foo', PinPayment.api_url
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pin_payment
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Danial Pearce
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-06-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: fakeweb
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Pin is the easiest way to accept payments online. See https://pin.net.au/
42
+ for details.
43
+ email:
44
+ - git@tigris.id.au
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - .gitignore
50
+ - Gemfile
51
+ - Gemfile.lock
52
+ - LICENSE
53
+ - README.md
54
+ - Rakefile
55
+ - lib/pin_payment.rb
56
+ - lib/pin_payment/base.rb
57
+ - lib/pin_payment/charge.rb
58
+ - lib/pin_payment/customer.rb
59
+ - lib/pin_payment/error.rb
60
+ - lib/pin_payment/refund.rb
61
+ - lib/pin_payment/version.rb
62
+ - pin_payment.gemspec
63
+ - test/fixtures/responses.yml
64
+ - test/test_helper.rb
65
+ - test/test_pin_charge.rb
66
+ - test/test_pin_customer.rb
67
+ - test/test_pin_refund.rb
68
+ - test/test_pin_setup.rb
69
+ homepage: https://github.com/tigris/pin_payment
70
+ licenses:
71
+ - MIT
72
+ metadata: {}
73
+ post_install_message:
74
+ rdoc_options: []
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - '>='
80
+ - !ruby/object:Gem::Version
81
+ version: 1.9.2
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ requirements: []
88
+ rubyforge_project:
89
+ rubygems_version: 2.0.2
90
+ signing_key:
91
+ specification_version: 4
92
+ summary: Ruby bindings for the Pin API
93
+ test_files:
94
+ - test/fixtures/responses.yml
95
+ - test/test_helper.rb
96
+ - test/test_pin_charge.rb
97
+ - test/test_pin_customer.rb
98
+ - test/test_pin_refund.rb
99
+ - test/test_pin_setup.rb