quickpay-ruby-client 1.2.0 → 2.0.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: 0db8d46e31a28416b4e0b7ade182b396ee10be52
4
- data.tar.gz: 9c4fd8fef2c3a3b64730ae8f62be8d9a00f71822
3
+ metadata.gz: b5cbbfa5f7a1d0ecd4004ed342f9be6c117685ac
4
+ data.tar.gz: 1e57b8ce8cfb0e37faffc843286d65ddad532e64
5
5
  SHA512:
6
- metadata.gz: c2690337637c7f098400ce849070d70fd6dbddc18fd55d49b3a8d20ef3902009a56eb7954c5364193e5ec3430b6867a6d32eba992dd8218521fe5d635b5dc560
7
- data.tar.gz: f35af9f1e711344682fedb0540f7f58093c051dde49cef89fb6ed8786dcb8922558ee2c775e7c41406bdc051dafe84130f6c449fca29f9803c5f897fe41a59e4
6
+ metadata.gz: 0e1e75a6652268e6343461d4b2e861a3d83f603c721582ca16f919c3cccaee29520384bbad883ef4a896487a40e022c6506ceb683247c0af41cc54c914ba9137
7
+ data.tar.gz: 76788896e3ff36f96a8e47bcea140b943ece98e6262dd418fa97225d6619a7e41f4f80775250c8212910f14585636ebad5bc321807d13685a2612dd815130a2a
data/.gitignore CHANGED
@@ -1,9 +1,3 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
1
+ .bundle/
2
+ coverage/
3
+ Gemfile.lock
data/.travis.yml CHANGED
@@ -1,8 +1,12 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1.2
3
+ - 2.1.10
4
+ - 2.2.10
5
+ - 2.3.7
6
+ - 2.4.4
7
+ - 2.5.1
4
8
  cache: bundler
5
- script: bundle exec rspec --format documentation --color
9
+ script: bundle exec ruby test/client.rb
6
10
  notifications:
7
11
  slack:
8
12
  secure: SixeTgiVsOaeWyKwICxLJ0GLN/C9j6qW1ZdaEytIDuZaBAn9oArrRGkJiehFdlzcPUHwzMWC0vl9GQzyBhZ7dbq+B53QY1mH9LTb9A53Y2d1OO1kBjJAkC5Yprvpjm52+x889Dwlz0bfLETvLsC2ej0NZDvSSLKFjpZZIZMOWkg=
data/CHANGELOG.md CHANGED
@@ -1,23 +1,21 @@
1
1
  # Changelog
2
2
 
3
-
4
3
  ## Unreleased
5
4
 
6
- ### Features:
7
-
8
- (your contribution here)
5
+ ## v2.0.0
9
6
 
10
- ### Bugfixes
11
-
12
- (your contribution here)
7
+ * This is a total rewrite and while the code is cleaner, simpler and faster, it does present some **breaking changes compared to v1.X.X**:
8
+ * The client now accepts arguements `username` instead of `password` and `api_key` has been removed. To authenticate with an API key, simply set `password: <key>` and omit username.
9
+ * The request methods now accepts request body as an named option (`client.post(<endpoint>, body: { amount: 100 })`) rather than a hash of body params (`client.post(<endpoint>, amount: 100)`).
10
+ * Replace the following dependencies - which reduces the total number of dependencies to 5 (was 27):
11
+ * HTTParty => Excon (https://github.com/excon/excon) - which luckily means no more partying hard.
12
+ * Rspec => Minitest
13
13
 
14
14
  ## v1.2.0 (2016-10-25)
15
15
 
16
- - Can now HEAD (https://github.com/QuickPay/quickpay-ruby-client/pull/21)
16
+ * Can now HEAD (https://github.com/QuickPay/quickpay-ruby-client/pull/21)
17
17
 
18
18
  ## v1.1.0 (2016-01-11)
19
19
 
20
- ### Features:
21
-
22
- - Send options to the underlaying HTTParty (https://github.com/QuickPay/quickpay-ruby-client/pull/16)
23
- - Be able to upload files (https://github.com/QuickPay/quickpay-ruby-client/pull/17<Paste>)
20
+ * Send options to the underlaying HTTParty (https://github.com/QuickPay/quickpay-ruby-client/pull/16)
21
+ * Be able to upload files (https://github.com/QuickPay/quickpay-ruby-client/pull/17<Paste>)
data/README.md CHANGED
@@ -1,18 +1,24 @@
1
- quickpay-ruby-client
2
- ======================
1
+ # QuickPay::API::Client
2
+
3
3
  [![Build Status](https://travis-ci.org/QuickPay/quickpay-ruby-client.svg)](https://travis-ci.org/QuickPay/quickpay-ruby-client)
4
4
 
5
- `quickpay-ruby-client` is a official client for [QuickPay API](http://tech.quickpay.net/api). The Quickpay API enables you to accept payments in a secure and reliable manner. This gem currently support QuickPay `v10` api.
5
+ The `quickpay-ruby-client` gem is a official client for [QuickPay API](http://tech.quickpay.net/api). The Quickpay API enables you to accept payments in a secure and reliable manner.
6
+
7
+ This gem currently support QuickPay `v10` api.
6
8
 
7
9
  ## Installation
8
10
 
9
11
  Add to your Gemfile
10
-
11
- $ gem 'quickpay-ruby-client'
12
+
13
+ ```ruby
14
+ gem "quickpay-ruby-client"
15
+ ```
12
16
 
13
17
  or install from Rubygems:
14
-
15
- $ gem install quickpay-ruby-client
18
+
19
+ ```
20
+ $ gem install quickpay-ruby-client
21
+ ```
16
22
 
17
23
  It is currently tested with Ruby ( >= 2.1.x)
18
24
 
@@ -25,59 +31,79 @@ Before doing anything you should register yourself with QuickPay and get access
25
31
 
26
32
  ### Create a new API client
27
33
 
28
- First you should create a client instance that is anonymous or authorized with `api_key` or login credentials provided by QuickPay.
34
+ First you should create a client instance that is anonymous or authorized with your API key or login credentials provided by QuickPay.
29
35
 
30
36
  To initialise an anonymous client:
31
37
 
32
- ```
33
- require 'quickpay/api/client'
38
+ ```ruby
39
+ require "quickpay/api/client"
34
40
  client = QuickPay::API::Client.new
35
41
  ```
36
42
 
37
- To initialise a client with QuickPay Api Key:
43
+ To initialise a client with QuickPay API Key:
38
44
 
39
- ```
40
- require 'quickpay/api/client'
41
- client = QuickPay::API::Client.new(api_key: ENV['QUICKPAY_API_KEY'])
45
+ ```ruby
46
+ require "quickpay/api/client"
47
+ client = QuickPay::API::Client.new(password: ENV["QUICKPAY_API_KEY"])
42
48
  ```
43
49
 
44
50
  Or you can provide login credentials like:
45
51
 
46
- ```
47
- require 'quickpay/api/client'
48
- client = QuickPay::API::Client.new(email: ENV['QUICKPAY_LOGIN'], password: ENV['QUICKPAY_PASSWORD'])
52
+ ```ruby
53
+ require "quickpay/api/client"
54
+ client = QuickPay::API::Client.new(username: ENV["QUICKPAY_LOGIN"], password: ENV["QUICKPAY_PASSWORD"])
49
55
  ```
50
56
 
51
- To pass request specific headers:
57
+ You can also set some connection specific options (default values shown):
52
58
 
53
- ```
54
- client = Quickpay::API::Client.new({ email: ENV['QUICKPAY_LOGIN'], password: ENV['QUICKPAY_PASSWORD'] },
55
- :headers => { 'QuickPay-Callback-URL' => 'https://webshop.com' })
59
+ ```ruby
60
+ client = Quickpay::API::Client.new(
61
+ read_timeout: 60,
62
+ write_timeout: 60,
63
+ connect_timeout: 60,
64
+ )
56
65
  ```
57
66
 
58
67
 
59
- ### API Calls
68
+ ### Sending request
60
69
 
61
- You can afterwards call any method described in QuickPay api with corresponding http method and endpoint. These methods are supported currently: `get`, `post`, `put`, `patch` and `delete`.
70
+ You can afterwards call any method described in QuickPay API with corresponding http method and endpoint. These methods are supported currently: `get`, `post`, `put`, `patch`, `delete` and `head`.
62
71
 
63
- ```
72
+ ```ruby
64
73
  client.get("/activity").each do |activity|
65
74
  puts activity["id"]
66
75
  end
76
+ ```
77
+
78
+ Beyond the endpoint, the client accepts the following options (default values shown):
79
+
80
+ * `body: ""`
81
+ * `headers: {}`
82
+ * `query: {}`
83
+ * `raw: false`
84
+
85
+ ```ruby
86
+ response = client.post(
87
+ "/payments/1/capture",
88
+ body: { amount: 100 }.to_json,
89
+ headers: { "Content-Type" => "application/json" },
90
+ query: { "synchronized" => "" }
91
+ raw: false
92
+ )
67
93
 
68
94
  ```
69
95
 
70
96
  If you want raw http response, headers Please add `:raw => true` parameter:
71
97
 
72
- ```
73
- status, body, headers = client.get("/activity", :raw => true)
98
+ ```ruby
99
+ status, body, headers = client.get("/activity", raw: true)
74
100
 
75
101
  if status == 200
76
102
  JSON.parse(body).each do |activity|
77
103
  puts activity["id"]
78
104
  end
79
105
  else
80
- puts "Error: #{body}"
106
+ # do something else
81
107
  end
82
108
 
83
109
  ```
@@ -98,26 +124,28 @@ Response status | Error |
98
124
  `406` | `QuickPay::API::NotAcceptable`
99
125
  `409` | `QuickPay::API::Conflict`
100
126
  `500` | `QuickPay::API::ServerError`
127
+ `502` | `QuickPay::API::BadGateway`
128
+ `503` | `QuickPay::API::ServiceUnavailable`
129
+ `504` | `QuickPay::API::GatewayTimeout`
101
130
 
102
131
  All exceptions inherits `QuickPay::API::Error`, so you can listen for any api error like:
103
132
 
104
- ```
133
+ ```ruby
105
134
  begin
106
- client.post("/payments", :currency => :DKK, :order_id => '1212')
107
- ...
135
+ client.post("/payments", body: { currency: "DKK", order_id: "1212" })
108
136
  rescue QuickPay::API::Error => e
109
137
  puts e.body
110
138
  end
111
139
  ```
112
140
 
113
- You can read more about api responses at [http://tech.quickpay.net/api/](http://tech.quickpay.net/api).
141
+ You can read more about QuickPay API responses at [http://tech.quickpay.net/api/](http://tech.quickpay.net/api).
114
142
 
115
143
  ## Contributions
116
144
 
117
145
  To contribute:
118
146
 
119
- 1. Write a spec that fails
120
- 2. Fix spec by adding/changing code
147
+ 1. Write a test that fails
148
+ 2. Fix test by adding/changing code
121
149
  3. Add feature or bugfix to changelog in the "Unreleased" section
122
150
  4. Submit a pull request
123
151
  5. World is now a better place! :)
@@ -125,5 +153,5 @@ To contribute:
125
153
  ### Running the specs
126
154
 
127
155
  ```
128
- bundle exec rspec
156
+ $ bundle exec ruby test/client.rb
129
157
  ```
@@ -1,34 +1,58 @@
1
- require 'quickpay'
2
- require 'quickpay/api/request'
3
- require 'quickpay/api/errors'
1
+ require "excon"
2
+ require "json"
3
+ require "quickpay/api/error"
4
+ require "quickpay/api/version"
4
5
 
5
6
  module QuickPay
6
- class << self
7
- attr_accessor :base_uri
8
- end
9
-
10
7
  module API
11
8
  class Client
12
- attr_accessor :options
13
-
14
- def initialize(auth_params = {}, opts = {})
15
- opts[:secret] ||= extract_auth(auth_params)
16
- opts[:base_uri] ||= (QuickPay.base_uri || QuickPay::BASE_URI)
9
+ DEFAULT_HEADERS = {
10
+ "User-Agent" => "quickpay-ruby-client, v#{QuickPay::API::VERSION}",
11
+ "Accept-Version" => "v10"
12
+ }.freeze
17
13
 
18
- @options = opts.dup
19
- end
20
-
21
- def extract_auth params
22
- if params[:email] and params[:password]
23
- "#{params[:email]}:#{params[:password]}"
24
- elsif params[:api_key]
25
- ":#{params[:api_key]}"
26
- end
14
+ def initialize(username: nil, password: nil, base_uri: "https://api.quickpay.net", options: {})
15
+ opts = {
16
+ read_timeout: options.fetch(:read_timeout, 60),
17
+ write_timeout: options.fetch(:write_timeout, 60),
18
+ connect_timeout: options.fetch(:connect_timeout, 60),
19
+ }
20
+
21
+ opts[:username] = Excon::Utils.escape_uri(username) if username
22
+ opts[:password] = Excon::Utils.escape_uri(password) if password
23
+
24
+ @connection = Excon.new(base_uri, opts)
27
25
  end
28
26
 
29
27
  [:get, :post, :patch, :put, :delete, :head].each do |method|
30
- define_method(method) do |*args|
31
- Request.new(options).request(method, *args)
28
+ define_method(method) do |path, options = {}|
29
+ headers = DEFAULT_HEADERS.merge(options.fetch(:headers, {}))
30
+ body = begin
31
+ data = options.fetch(:body, "")
32
+ if headers["Content-Type"] == "application/json" && data.instance_of?(Hash)
33
+ data.to_json
34
+ else
35
+ data
36
+ end
37
+ end
38
+
39
+ res = @connection.__send__(
40
+ method,
41
+ path: path,
42
+ body: body,
43
+ headers: headers,
44
+ query: options.fetch(:query, {})
45
+ )
46
+
47
+ if options.fetch(:raw, false)
48
+ [res.status, res.body, res.headers]
49
+ else
50
+ if res.status >= 400
51
+ raise QuickPay::API::Error.by_status_code(res.status, res.body, res.headers)
52
+ end
53
+
54
+ res.headers["Content-Type"] == "application/json" ? JSON.parse(res.body) : res.body
55
+ end
32
56
  end
33
57
  end
34
58
  end
@@ -0,0 +1,52 @@
1
+ module QuickPay
2
+ module API
3
+ class Error < StandardError
4
+ class BadRequest < Error; end
5
+ class Unauthorized < Error; end
6
+ class PaymentRequired < Error; end
7
+ class Forbidden < Error; end
8
+ class NotFound < Error; end
9
+ class MethodNotAllowed < Error; end
10
+ class NotAcceptable < Error; end
11
+ class Conflict < Error; end
12
+ class TooManyRequest < Error; end
13
+ class InternalServerError < Error; end
14
+ class BadGateway < Error; end
15
+ class ServiceUnavailable < Error; end
16
+ class GatewayTimeout < Error; end
17
+
18
+ CLASS_MAP = {
19
+ 400 => "BadRequest",
20
+ 401 => "Unauthorized",
21
+ 402 => "PaymentRequired",
22
+ 403 => "Forbidden",
23
+ 404 => "NotFound",
24
+ 405 => "MethodNotAllowed",
25
+ 406 => "NotAcceptable",
26
+ 409 => "Conflict",
27
+ 429 => "TooManyRequest",
28
+ 500 => "InternalServerError",
29
+ 502 => "BadGateway",
30
+ 503 => "ServiceUnavailable",
31
+ 504 => "GatewayTimeout"
32
+ }.freeze
33
+
34
+ attr_reader :status, :body, :headers
35
+
36
+ def initialize(status, body, headers)
37
+ @status = status
38
+ @body = body
39
+ @headers = headers
40
+ end
41
+
42
+ def self.by_status_code(status, body, headers)
43
+ if CLASS_MAP[status]
44
+ klass = QuickPay::API::Error.const_get(CLASS_MAP[status])
45
+ fail klass.new(status, body, headers)
46
+ else
47
+ fail QuickPay::API::Error.new(status, body, headers)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -1,7 +1,5 @@
1
-
2
1
  module QuickPay
3
2
  module API
4
- class Conflict < Error
5
- end
3
+ VERSION = "2.0.0".freeze
6
4
  end
7
5
  end
@@ -1,16 +1,16 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
2
+ lib = File.expand_path("lib", __dir__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'quickpay/version'
4
+ require "quickpay/api/version"
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "quickpay-ruby-client"
8
- spec.version = QuickPay::VERSION
8
+ spec.version = QuickPay::API::VERSION
9
9
  spec.authors = ["QuickPay Developers"]
10
10
  spec.email = ["support@quickpay.net"]
11
11
 
12
12
  spec.summary = "Ruby client for QuickPay API"
13
- spec.description = "Embed QuickPay's secure payments directly into your Ruby applications. more at https://tech.quickpay.net"
13
+ spec.description = "Embed QuickPay's secure payments directly into your Ruby applications. Learn more at https://tech.quickpay.net"
14
14
  spec.homepage = "https://github.com/QuickPay/quickpay-ruby-client"
15
15
  spec.license = "MIT"
16
16
 
@@ -19,11 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "bundler"
22
- spec.add_development_dependency "rake", "~> 10.0"
23
- spec.add_development_dependency "rspec", "~> 3.2"
24
- spec.add_development_dependency "rspec-mocks"
25
- spec.add_development_dependency "webmock", "~> 1.24"
26
- spec.add_development_dependency "pry-byebug"
22
+ spec.add_development_dependency "rake", "~> 12.3.2"
23
+ spec.add_development_dependency "minitest", "~> 5.11.3"
27
24
 
28
- spec.add_dependency "httmultiparty", "~> 0.3.16"
25
+ spec.add_dependency "excon", "~> 0.62.0"
29
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quickpay-ruby-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - QuickPay Developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-25 00:00:00.000000000 Z
11
+ date: 2019-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,86 +30,44 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: 12.3.2
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: 12.3.2
41
41
  - !ruby/object:Gem::Dependency
42
- name: rspec
42
+ name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.2'
47
+ version: 5.11.3
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.2'
54
+ version: 5.11.3
55
55
  - !ruby/object:Gem::Dependency
56
- name: rspec-mocks
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: webmock
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '1.24'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '1.24'
83
- - !ruby/object:Gem::Dependency
84
- name: pry-byebug
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: httmultiparty
56
+ name: excon
99
57
  requirement: !ruby/object:Gem::Requirement
100
58
  requirements:
101
59
  - - "~>"
102
60
  - !ruby/object:Gem::Version
103
- version: 0.3.16
61
+ version: 0.62.0
104
62
  type: :runtime
105
63
  prerelease: false
106
64
  version_requirements: !ruby/object:Gem::Requirement
107
65
  requirements:
108
66
  - - "~>"
109
67
  - !ruby/object:Gem::Version
110
- version: 0.3.16
68
+ version: 0.62.0
111
69
  description: Embed QuickPay's secure payments directly into your Ruby applications.
112
- more at https://tech.quickpay.net
70
+ Learn more at https://tech.quickpay.net
113
71
  email:
114
72
  - support@quickpay.net
115
73
  executables: []
@@ -117,30 +75,15 @@ extensions: []
117
75
  extra_rdoc_files: []
118
76
  files:
119
77
  - ".gitignore"
120
- - ".rspec"
121
78
  - ".travis.yml"
122
79
  - CHANGELOG.md
123
80
  - Gemfile
124
81
  - LICENSE.txt
125
82
  - README.md
126
83
  - Rakefile
127
- - lib/quickpay.rb
128
84
  - lib/quickpay/api/client.rb
129
- - lib/quickpay/api/errors.rb
130
- - lib/quickpay/api/errors/bad_request.rb
131
- - lib/quickpay/api/errors/conflict.rb
132
- - lib/quickpay/api/errors/forbidden.rb
133
- - lib/quickpay/api/errors/method_not_allowed.rb
134
- - lib/quickpay/api/errors/not_acceptable.rb
135
- - lib/quickpay/api/errors/not_found.rb
136
- - lib/quickpay/api/errors/payment_required.rb
137
- - lib/quickpay/api/errors/quickpay_error.rb
138
- - lib/quickpay/api/errors/server_error.rb
139
- - lib/quickpay/api/errors/unauthorized.rb
140
- - lib/quickpay/api/request.rb
141
- - lib/quickpay/constants.rb
142
- - lib/quickpay/logger.rb
143
- - lib/quickpay/version.rb
85
+ - lib/quickpay/api/error.rb
86
+ - lib/quickpay/api/version.rb
144
87
  - quickpay-ruby-client.gemspec
145
88
  homepage: https://github.com/QuickPay/quickpay-ruby-client
146
89
  licenses:
@@ -162,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
105
  version: '0'
163
106
  requirements: []
164
107
  rubyforge_project:
165
- rubygems_version: 2.6.6
108
+ rubygems_version: 2.5.2.3
166
109
  signing_key:
167
110
  specification_version: 4
168
111
  summary: Ruby client for QuickPay API
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --format documentation
2
- --color
data/lib/quickpay.rb DELETED
@@ -1,4 +0,0 @@
1
- require 'json'
2
- require 'quickpay/version'
3
- require 'quickpay/logger'
4
- require 'quickpay/constants'
@@ -1,10 +0,0 @@
1
-
2
- [:quickpay_error, :bad_request, :unauthorized, :payment_required,
3
- :forbidden, :not_found, :method_not_allowed, :not_acceptable,
4
- :conflict, :server_error].each do |err_code|
5
- require "quickpay/api/errors/#{err_code}"
6
- end
7
-
8
-
9
-
10
-
@@ -1,7 +0,0 @@
1
-
2
- module QuickPay
3
- module API
4
- class BadRequest < Error
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
-
2
- module QuickPay
3
- module API
4
- class Forbidden < Error
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
-
2
- module QuickPay
3
- module API
4
- class MethodNotAllowed < Error
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
-
2
- module QuickPay
3
- module API
4
- class NotAcceptable < Error
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
-
2
- module QuickPay
3
- module API
4
- class NotFound < Error
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
-
2
- module QuickPay
3
- module API
4
- class PaymentRequired < Error
5
- end
6
- end
7
- end
@@ -1,13 +0,0 @@
1
- module QuickPay
2
- module API
3
- class Error < StandardError
4
- attr_reader :code, :status, :body
5
-
6
- def initialize(code, status, body)
7
- @code = code
8
- @status = status
9
- @body = body
10
- end
11
- end
12
- end
13
- end
@@ -1,7 +0,0 @@
1
-
2
- module QuickPay
3
- module API
4
- class ServerError < Error
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
-
2
- module QuickPay
3
- module API
4
- class Unauthorized < Error
5
- end
6
- end
7
- end
@@ -1,98 +0,0 @@
1
- require 'httmultiparty'
2
-
3
- module QuickPay
4
- module API
5
- class Request
6
- include HTTMultiParty
7
-
8
- attr_reader :options, :secret
9
-
10
- def initialize (options = {})
11
- @options = options.dup
12
- @secret = @options.delete(:secret)
13
- self.class.base_uri(options[:base_uri] || BASE_URI)
14
- end
15
-
16
- def request method, path, data = {}
17
- raw = data.delete(:raw)
18
- req_headers = headers.merge(data.delete(:headers) || {})
19
-
20
- http_options = options.dup
21
- if data.any? { |_key, value| value.is_a?(File) }
22
- http_options[:body] = data
23
- http_options[:detect_mime_type] = true
24
- else
25
- case method
26
- when :get, :delete, :head
27
- http_options[:query] = data
28
- when :post, :patch, :put
29
- http_options[:body] = data.to_json
30
- req_headers["Content-Type"] = "application/json"
31
- end
32
- end
33
-
34
- http_options[:headers] = headers.merge(req_headers)
35
- QuickPay.logger.debug { "#{method.to_s.upcase} #{base_uri}#{path} #{http_options}" }
36
- create_response(raw, self.class.send(method, path, http_options))
37
- end
38
-
39
- def create_response raw, res
40
- if raw
41
- [res.code, res.body, res.headers]
42
- else
43
- response = res.parsed_response
44
- raise_error(response, res.code) if res.code >= 400
45
- response
46
- end
47
- end
48
-
49
- def raise_error body, status
50
- code = API_STATUS_CODES[status].to_s
51
- args = [code, status, body]
52
-
53
- klass =
54
- begin
55
- require "quickpay/api/errors/#{code}"
56
- class_name = code.split('_').map(&:capitalize).join('')
57
- QuickPay::API.const_get(class_name)
58
- rescue LoadError, NameError
59
- QuickPay::API::Error
60
- end
61
-
62
- fail klass.new(*args), error_description(body)
63
- end
64
-
65
- private
66
-
67
- def base_uri
68
- self.class.default_options[:base_uri]
69
- end
70
-
71
- def error_description msg
72
- msg
73
- end
74
-
75
- def headers
76
- heads = {
77
- 'User-Agent' => user_agent,
78
- 'Accept-Version' => "v#{QuickPay::API_VERSION}"
79
- }
80
- heads['Authorization'] = "Basic #{authorization}" if secret != nil
81
- heads
82
- end
83
-
84
- def user_agent
85
- user_agent = "quickpay-ruby-client, v#{QuickPay::VERSION}"
86
- user_agent += ", #{RUBY_VERSION}, #{RUBY_PLATFORM}, #{RUBY_PATCHLEVEL}"
87
- if defined?(RUBY_ENGINE)
88
- user_agent += ", #{RUBY_ENGINE}"
89
- end
90
- user_agent
91
- end
92
-
93
- def authorization
94
- Base64.strict_encode64(secret)
95
- end
96
- end
97
- end
98
- end
@@ -1,21 +0,0 @@
1
-
2
- module QuickPay
3
- BASE_URI = 'https://api.quickpay.net'
4
- API_VERSION = 10
5
-
6
- API_STATUS_CODES = {
7
- 200 => :ok,
8
- 201 => :created,
9
- 202 => :accepted,
10
- 400 => :bad_request,
11
- 401 => :unauthorized,
12
- 402 => :payment_required,
13
- 403 => :forbidden,
14
- 404 => :not_found,
15
- 405 => :method_not_allowed,
16
- 406 => :not_acceptable,
17
- 409 => :conflict,
18
- 500 => :server_error
19
- }
20
- end
21
-
@@ -1,16 +0,0 @@
1
- require 'logger'
2
-
3
- module QuickPay
4
- class << self
5
- attr_writer :logger
6
-
7
- def logger
8
- @logger ||= lambda {
9
- logger = Logger.new($stdout)
10
- logger.level = Logger::INFO
11
- logger
12
- }.call
13
- end
14
-
15
- end
16
- end
@@ -1,3 +0,0 @@
1
- module QuickPay
2
- VERSION = "1.2.0"
3
- end