everypay 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bdc2a27a9ef4ac847bd2d63a1ff60739331a0d54
4
+ data.tar.gz: e47719cff0b7acbf94cd7741f0297a86825977f2
5
+ SHA512:
6
+ metadata.gz: 6f093e30cbf7cb70dab1933cd60e1cb663d53a7992dd9205f592cf00cdb15e10287a8ee82275e96a4de29bc42af1e7f212b8316cae0acb4f9770282bfeaf0870
7
+ data.tar.gz: 86a54ed5aecfdcee3a06ce2088eacb54268c11b3343262435022725e7aeef84ff2d60d326483f6a7099f26bdca80d1e4c47b277de060a454a5d80bec25d855b0
@@ -0,0 +1,4 @@
1
+ /everypay-*.gem
2
+ /Gemfile.lock
3
+ Gemfile.lock
4
+ .vim.custom
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "https://rubygems.org"
2
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012-2015 Everypay
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
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,5 @@
1
+ # Everypay ruby library
2
+
3
+ ## Documentation
4
+
5
+ Please see https://www.everypay.gr/api/ for up to date documentation.
@@ -0,0 +1,7 @@
1
+ require 'rake/testtask'
2
+
3
+ task :default => [:test]
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.pattern = './test/**/*_test.rb'
7
+ end
@@ -0,0 +1,24 @@
1
+ # vim: set expandtab tabstop=2 shiftwidth=2 softtabstop=2:
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = 'everypay'
5
+ s.version = '0.0.1'
6
+ s.date = '2015-10-21'
7
+ s.summary = 'Everypay api library for ruby.'
8
+ s.description = 'Everypay payment gateway. See https://www.everypay.gr for details.'
9
+ s.authors = ['Andreas Kollaros']
10
+ s.email = 'akl@everypay.gr'
11
+ s.homepage = 'https://www.everypay.gr/api'
12
+ s.license = 'MIT'
13
+
14
+ s.add_dependency('rest-client', '~> 1.8')
15
+ s.add_dependency('json', '~> 1.8')
16
+
17
+ s.add_development_dependency('mocha', '~> 1.1')
18
+ s.add_development_dependency('test-unit', '~> 3.1')
19
+ s.add_development_dependency('rake')
20
+
21
+ s.files = `git ls-files`.split("\n")
22
+ s.test_files = `git ls-files -- test/*`.split("\n")
23
+ s.require_paths = ['lib']
24
+ end
@@ -0,0 +1,31 @@
1
+ # vim: set expandtab tabstop=2 shiftwidth=2 softtabstop=2:
2
+
3
+ require 'rest-client'
4
+ require 'json'
5
+
6
+ require 'everypay/errors/not_available_method_error'
7
+ require 'everypay/resource'
8
+ require 'everypay/payment'
9
+ require 'everypay/customer'
10
+ require 'everypay/token'
11
+
12
+ module Everypay
13
+
14
+ @test = false
15
+ @verify_ssl = true
16
+ @api_uri = 'https://api.everypay.gr'
17
+ @sandbox_uri = 'https://sandbox-api.everypay.gr'
18
+
19
+ class << self
20
+ attr_accessor :api_key, :test, :verify_ssl
21
+ attr_reader :api_uri, :sandbox_uri
22
+ end
23
+
24
+ def self.test?
25
+ @test == true
26
+ end
27
+
28
+ def self.uri
29
+ test? ? @sandbox_uri : @api_uri
30
+ end
31
+ end
@@ -0,0 +1,49 @@
1
+ # vim: set expandtab tabstop=2 shiftwidth=2 softtabstop=2:
2
+
3
+ module Everypay
4
+
5
+ class Customer < Resource
6
+
7
+ class << self
8
+
9
+ # Create a new customer.
10
+ #
11
+ # Available payload parameters are:
12
+ #
13
+ # For customers from credit / debit cards, card info are required.
14
+ # - card_number: A valid credit /debit card number. [Required]
15
+ # - expiration_month: Integer representation of month. [Required]
16
+ # - expiration_year: Integer represantation of a valid expiration year. [Required]
17
+ # - cvv: Card verification value. Three or four (American express) digits. [Required]
18
+ # - holder_name: First and last name of the card holder. [Required]
19
+ #
20
+ # For customers from card token, a valid card token required. Card tokens
21
+ # can be obtained from Token::create api calls.
22
+ # - token [Required].
23
+ #
24
+ # Optional params.
25
+ # - description: A decription for this customer max 255 chars. [Optional]
26
+ # - email: Customer email. [Optional]
27
+ # - full_name: Customer full name. [Optional]
28
+ def create payload
29
+ super
30
+ end
31
+
32
+ def update token, payload
33
+ super
34
+ end
35
+
36
+ def delete token
37
+ super
38
+ end
39
+
40
+ protected
41
+
42
+ def resource
43
+ 'customers'
44
+ end
45
+ end
46
+
47
+ end
48
+
49
+ end
@@ -0,0 +1,6 @@
1
+ # vim: set expandtab tabstop=2 shiftwidth=2 softtabstop=2:
2
+
3
+ module Everypay
4
+ class NotAvailableMethodError < RuntimeError
5
+ end
6
+ end
@@ -0,0 +1,78 @@
1
+ # vim: set expandtab tabstop=2 shiftwidth=2 softtabstop=2:
2
+
3
+ module Everypay
4
+
5
+ class Payment < Resource
6
+
7
+ class << self
8
+
9
+ # Create a new payment.
10
+ #
11
+ # Available payload parameters are:
12
+ # - amount: The amount in cents for the payment. [Required]
13
+ #
14
+ # For direct payment with credit / debit cards, card info are required.
15
+ # - card_number: A valid credit /debit card number. [Required]
16
+ # - expiration_month: Integer representation of month. [Required]
17
+ # - expiration_year: Integer represantation of a valid expiration year. [Required]
18
+ # - cvv: Card verification value. Three or four (American express) digits. [Required]
19
+ # - holder_name: First and last name of the card holder. [Required]
20
+ #
21
+ # For payments with card token, a valid card token required. Card tokens
22
+ # can be obtained from Token::create api calls.
23
+ # - token [Required].
24
+ #
25
+ # Optional params.
26
+ # - currency: The ISO 4217 code currency used for this payment. [Optional]
27
+ # - description: A decription for this payment max 255 chars. [Optional]
28
+ # - payee_email: Customer email. [Optional]
29
+ # - payee_phone: Customer phone number. [Optional]
30
+ # - capture: Integer Whether to capture a payment or just authorize it.
31
+ # To authorize a payment this value must be 0.
32
+ # - create_customer: Integer(0,1) Whether to create a customer and store its
33
+ # card or not.
34
+ # - installments: Integer(0,1) The number of installments for this payment.
35
+ # Can only be used for credit card payments.
36
+ # - max_installments: Integer Used for payments with token, to validate
37
+ # max installments set by the merchant from
38
+ # everypay Button.
39
+ #
40
+ def create payload
41
+ super
42
+ end
43
+
44
+ def capture token
45
+ invoke(:put, {:namespace => 'capture', :token => token})
46
+ end
47
+
48
+ # Refund a payment.
49
+ #
50
+ # Available payload parameters are:
51
+ # - amount: The amount to refund. The amount must not exceed the maximum
52
+ # amount of Payment. Can be used for partial refunds. If ommited
53
+ # then a full refund will be created. [Optional]
54
+ # - description: A description for this refund max 255 chars. [Optional]
55
+ #
56
+ def refund token, payload={}
57
+ payload.merge! :namespace => 'refund', :token => token
58
+ invoke :put, payload
59
+ end
60
+
61
+ def update token, payload
62
+ raise NotAvailableMethodError.new("resource #{resource} does not support #{__method__} method.")
63
+ end
64
+
65
+ def delete token
66
+ raise NotAvailableMethodError.new("resource #{resource} does not support #{__method__} method.")
67
+ end
68
+
69
+ protected
70
+
71
+ def resource
72
+ 'payments'
73
+ end
74
+ end
75
+
76
+ end
77
+
78
+ end
@@ -0,0 +1,73 @@
1
+ # vim: set expandtab tabstop=2 shiftwidth=2 softtabstop=2:
2
+
3
+ module Everypay
4
+
5
+ class Resource
6
+
7
+ class << self
8
+
9
+ def create payload
10
+ invoke :post, payload
11
+ end
12
+
13
+ def retrieve token
14
+ invoke :get, {:token => token}
15
+ end
16
+
17
+ def list filters={}
18
+ invoke :get, filters
19
+ end
20
+
21
+ def update token, payload
22
+ payload.merge! :token => token
23
+ invoke :put, payload
24
+ end
25
+
26
+ def delete token
27
+ invoke :delete, {:token => token}
28
+ end
29
+
30
+ protected
31
+
32
+ def resource
33
+ raise NotImplementedError.new('resource method must return a resource name ex payment, customer, token etc')
34
+ end
35
+
36
+
37
+ def invoke method, payload={}
38
+ url = endpoint
39
+ url = url + '/' + payload[:namespace] if payload[:namespace]
40
+ url = url + '/' + payload.delete(:token) if payload[:token]
41
+
42
+ opts = {:method => method,
43
+ :verify_ssl => Everypay.verify_ssl,
44
+ :url => url,
45
+ :user => Everypay.api_key}
46
+ request opts, payload
47
+ end
48
+
49
+ private
50
+
51
+ def endpoint
52
+ Everypay.uri + '/' + resource
53
+ end
54
+
55
+ def request opts, payload
56
+ opts[:payload] = payload
57
+ response = nil
58
+ begin
59
+ response = RestClient::Request.execute opts
60
+ rescue RestClient::ExceptionWithResponse => e
61
+ response = e.response if e.response
62
+ rescue RestClient::SSLCertificateNotVerified => e
63
+ response = JSON.generate({:error => {:code => 400, :status=>400, :message => e.message}})
64
+ end
65
+
66
+ hash = JSON.parse response
67
+ end
68
+
69
+ end
70
+
71
+ end
72
+
73
+ end
@@ -0,0 +1,43 @@
1
+ # vim: set expandtab tabstop=2 shiftwidth=2 softtabstop=2:
2
+
3
+ module Everypay
4
+
5
+ class Token < Resource
6
+
7
+ class << self
8
+
9
+ # Create a new card token.
10
+ #
11
+ # Available payload parameters are a valid card info data.
12
+ # - card_number: A valid credit /debit card number. [Required]
13
+ # - expiration_month: Integer representation of month. [Required]
14
+ # - expiration_year: Integer represantation of a valid expiration year. [Required]
15
+ # - cvv: Card verification value. Three or four (American express) digits. [Required]
16
+ # - holder_name: First and last name of the card holder. [Required]
17
+ #
18
+ def create payload
19
+ super
20
+ end
21
+
22
+ def update token, payload
23
+ raise NotAvailableMethodError.new("resource #{resource} does not support #{__method__} method.")
24
+ end
25
+
26
+ def delete token
27
+ raise NotAvailableMethodError.new("resource #{resource} does not support #{__method__} method.")
28
+ end
29
+
30
+ def list filters={}
31
+ raise NotAvailableMethodError.new("resource #{resource} does not support #{__method__} method.")
32
+ end
33
+
34
+ protected
35
+
36
+ def resource
37
+ 'tokens'
38
+ end
39
+ end
40
+
41
+ end
42
+
43
+ end
@@ -0,0 +1,47 @@
1
+ # vim: set expandtab tabstop=2 shiftwidth=2 softtabstop=2:
2
+
3
+ require File.expand_path('../../test_helper', __FILE__)
4
+
5
+ module Everypay
6
+
7
+ class PaymentTest < Test::Unit::TestCase
8
+
9
+ def test_payment_retrieve
10
+ token = 'pmt_4KQ2DD15gs2w8RS4M2MhBz1Q'
11
+ Payment.expects(:invoke).returns(success_payment_retrieve_response)
12
+ payment = Payment.retrieve token
13
+ assert_payment_attributes payment
14
+ end
15
+
16
+ def test_payment_create
17
+ Payment.expects(:invoke).returns(success_payment_create_response)
18
+ payload = {:amount => 1000,
19
+ :capture => 0,
20
+ :card_number => '4111111111111111',
21
+ :expiration_month => 01,
22
+ :expiration_year => 2016,
23
+ :cvv => 123,
24
+ :holder_name => 'John Doe'}
25
+ payment = Payment.create payload
26
+
27
+ assert_payment_attributes payment
28
+ assert_equal 'Captured', payment['status']
29
+ end
30
+
31
+ def success_payment_retrieve_response
32
+ JSON.parse '{ "token": "pmt_4KQ2DD15gs2w8RS4M2MhBz1Q", "date_created": "2015-07-06T18:05:01+0300", "description": "payment for item #222", "currency": "EUR", "status": "Captured", "amount": 50, "refund_amount": 0, "fee_amount": 21, "payee_email": null, "payee_phone": null, "refunded": false, "refunds": [], "card": { "expiration_month": "10", "expiration_year": "2017", "last_four": "9610", "type": "Visa", "holder_name": "John Doe" } }'
33
+ end
34
+
35
+ def success_payment_create_response
36
+ JSON.parse '{ "token": "pmt_guLEyWbxfj9zosdIeyUIWOWP", "date_created": "2015-07-08T18:05:50+0300", "description": null, "currency": "EUR", "status": "Captured", "amount": 100, "refund_amount": 0, "fee_amount": 22, "payee_email": null, "payee_phone": null, "refunded": false, "refunds": [], "card": { "expiration_month": "01", "expiration_year": "2016", "last_four": "1111", "type": "Visa", "holder_name": "John Doe" } }'
37
+ end
38
+
39
+ def assert_payment_attributes payment
40
+ assert_boolean true, payment.key?('token')
41
+ assert_boolean true, payment.key?('status')
42
+ assert_boolean true, payment.key?('amount')
43
+ assert_boolean true, payment.key?('fee_amount')
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,18 @@
1
+ # vim: set expandtab tabstop=2 shiftwidth=2 softtabstop=2:
2
+
3
+ require 'everypay'
4
+ require 'test/unit'
5
+ require 'mocha/setup'
6
+ require 'json'
7
+
8
+ class Test::Unit::TestCase
9
+ include Mocha
10
+
11
+ setup do
12
+ Everypay.api_key="foo"
13
+ end
14
+
15
+ teardown do
16
+ Everypay.api_key=nil
17
+ end
18
+ end
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: everypay
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Andreas Kollaros
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.8'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.8'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mocha
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: test-unit
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Everypay payment gateway. See https://www.everypay.gr for details.
84
+ email: akl@everypay.gr
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - ".gitignore"
90
+ - Gemfile
91
+ - LICENSE
92
+ - README.md
93
+ - Rakefile
94
+ - everypay.gemspec
95
+ - lib/everypay.rb
96
+ - lib/everypay/customer.rb
97
+ - lib/everypay/errors/not_available_method_error.rb
98
+ - lib/everypay/payment.rb
99
+ - lib/everypay/resource.rb
100
+ - lib/everypay/token.rb
101
+ - test/everypay/payment_test.rb
102
+ - test/test_helper.rb
103
+ homepage: https://www.everypay.gr/api
104
+ licenses:
105
+ - MIT
106
+ metadata: {}
107
+ post_install_message:
108
+ rdoc_options: []
109
+ require_paths:
110
+ - lib
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ required_rubygems_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ requirements: []
122
+ rubyforge_project:
123
+ rubygems_version: 2.4.8
124
+ signing_key:
125
+ specification_version: 4
126
+ summary: Everypay api library for ruby.
127
+ test_files:
128
+ - test/everypay/payment_test.rb
129
+ - test/test_helper.rb