everypay 0.0.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.
@@ -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