whalestack_sdk 1.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 +7 -0
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/lib/whalestack_sdk/client.rb +184 -0
- data/lib/whalestack_sdk/config.rb +11 -0
- data/lib/whalestack_sdk.rb +3 -0
- data/whalestack_sdk.gemspec +23 -0
- metadata +89 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 39a9edcd754a06acfaa517bca1ab842f45c4de90bc3b24ffd209f1b0c290c3a3
|
4
|
+
data.tar.gz: d855b3652542a288ece87335d85b00d7b028dfac85abe7a47dfeeaf86b890339
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 05ae3d879275ebff8a772266372609bbcb320201772ca11244dc96583687e825cdcf25d9493d5c54d5655f51a39aeb3979b0d652725340fc96860d79ec530db0
|
7
|
+
data.tar.gz: 8b2eea8419491598926ebb4d3ffa9656bd500806be1845bd50783441f7454b61a5e44aade20027e1920bd366167a4e377197495edcafbaae589a8b2831d0ab80
|
data/.gitignore
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,184 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
require 'json'
|
3
|
+
require 'time'
|
4
|
+
require 'whalestack_sdk/config'
|
5
|
+
require 'uri'
|
6
|
+
require 'openssl'
|
7
|
+
|
8
|
+
# Ruby implementation of a REST client for the Whalestack Payments API
|
9
|
+
# see https://www.whalestack.com/en/api-docs
|
10
|
+
module WhalestackSDK
|
11
|
+
|
12
|
+
class Client
|
13
|
+
|
14
|
+
# Merchant API client constructor, initialize this with the API key and secret as given by https://www.whalestack.com/en/api-settings
|
15
|
+
# @param key; as given by https://www.whalestack.com/en/api-settings
|
16
|
+
# @param secret; as given by https://www.whalestack.com/en/api-settings
|
17
|
+
# @param log_file; optional log file path
|
18
|
+
# @constructor
|
19
|
+
def initialize(key, secret, log_file = nil)
|
20
|
+
|
21
|
+
# @string The API Key as given by https://www.whalestack.com/en/api-settings
|
22
|
+
@key = key
|
23
|
+
|
24
|
+
# @string The API Secret as given by https://www.whalestack.com/en/api-settings
|
25
|
+
@secret = secret
|
26
|
+
|
27
|
+
# @string The API version to which we connect (leave it as is)
|
28
|
+
@api_version = WhalestackSDK::API_VERSION
|
29
|
+
|
30
|
+
# @string Used in the HTTP user agent (leave it as is)
|
31
|
+
@client_name = WhalestackSDK::CLIENT_NAME
|
32
|
+
|
33
|
+
# @string The current version of this SDK, used in the HTTP user agent (leave it as is)
|
34
|
+
@client_version = WhalestackSDK::CLIENT_VERSION
|
35
|
+
|
36
|
+
# @string Whalestack connect url
|
37
|
+
@connect_url = WhalestackSDK::CONNECT_URL
|
38
|
+
|
39
|
+
# @string|nil Specifies the log file to which to write, if any.
|
40
|
+
@log_file = log_file ? log_file : nil
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
# Use this method to communicate with GET endpoints
|
45
|
+
# @param endpoint (string), e.g. GET /customer
|
46
|
+
# @param params (hash), a list of GET parameters to be included in the request
|
47
|
+
# @return RestClient::Response, https://github.com/rest-client/rest-client/blob/2c72a2e77e2e87d25ff38feba0cf048d51bd5eca/lib/restclient/response.rb
|
48
|
+
def get(endpoint, params = {})
|
49
|
+
|
50
|
+
path = build_connect_url(endpoint) + '?' + URI.encode_www_form(params)
|
51
|
+
headers = build_headers(endpoint, 'GET', params)
|
52
|
+
|
53
|
+
log "GET " + path
|
54
|
+
log headers.to_s
|
55
|
+
|
56
|
+
begin
|
57
|
+
response = RestClient::Request.execute(method: :get, url: path, headers: headers, timeout: 180)
|
58
|
+
rescue RestClient::ExceptionWithResponse => e
|
59
|
+
log e.http_code.to_s + " " + e.response.to_s
|
60
|
+
return e.response
|
61
|
+
end
|
62
|
+
|
63
|
+
log response.code.to_s + " " + response.to_s
|
64
|
+
|
65
|
+
response
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
# Use this method to communicate with POST endpoints
|
70
|
+
# @param endpoint (string), e.g. POST /checkout/hosted
|
71
|
+
# @param params (hash), a list of GET parameters to be included in the request
|
72
|
+
# @return RestClient::Response, https://github.com/rest-client/rest-client/blob/2c72a2e77e2e87d25ff38feba0cf048d51bd5eca/lib/restclient/response.rb
|
73
|
+
def post(endpoint, params = {})
|
74
|
+
|
75
|
+
path = build_connect_url(endpoint)
|
76
|
+
headers = build_headers(endpoint, 'POST', params)
|
77
|
+
|
78
|
+
log "POST " + path + " " + params.to_s
|
79
|
+
log headers.to_s
|
80
|
+
|
81
|
+
begin
|
82
|
+
response = RestClient::Request.execute(method: :post, url: path, payload: params.to_json, headers: headers, timeout: 180)
|
83
|
+
rescue RestClient::ExceptionWithResponse => e
|
84
|
+
log e.http_code.to_s + " " + e.response.to_s
|
85
|
+
return e.response
|
86
|
+
end
|
87
|
+
|
88
|
+
log response.code.to_s + " " + response.to_s
|
89
|
+
|
90
|
+
response
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
# Use this method to communicate with PUT endpoints
|
95
|
+
# @param endpoint (string), e.g. PUT /customer
|
96
|
+
# @param params (hash), a list of GET parameters to be included in the request
|
97
|
+
# @return RestClient::Response, https://github.com/rest-client/rest-client/blob/2c72a2e77e2e87d25ff38feba0cf048d51bd5eca/lib/restclient/response.rb
|
98
|
+
def put(endpoint, params = {})
|
99
|
+
|
100
|
+
path = build_connect_url(endpoint)
|
101
|
+
headers = build_headers(endpoint, 'PUT', params)
|
102
|
+
|
103
|
+
log "PUT " + path + " " + params.to_s
|
104
|
+
log headers.to_s
|
105
|
+
|
106
|
+
begin
|
107
|
+
response = RestClient::Request.execute(method: :put, url: path, payload: params.to_json, headers: headers, timeout: 180)
|
108
|
+
rescue RestClient::ExceptionWithResponse => e
|
109
|
+
log e.http_code.to_s + " " + e.response.to_s
|
110
|
+
return e.response
|
111
|
+
end
|
112
|
+
|
113
|
+
log response.code.to_s + " " + response.to_s
|
114
|
+
|
115
|
+
response
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
# Use this method to communicate with PUT endpoints
|
120
|
+
# @param endpoint (string), e.g. PUT /customer
|
121
|
+
# @param params (hash), a list of GET parameters to be included in the request
|
122
|
+
# @return RestClient::Response, https://github.com/rest-client/rest-client/blob/2c72a2e77e2e87d25ff38feba0cf048d51bd5eca/lib/restclient/response.rb
|
123
|
+
def delete(endpoint, params = {})
|
124
|
+
|
125
|
+
path = build_connect_url(endpoint)
|
126
|
+
headers = build_headers(endpoint, 'DELETE', params)
|
127
|
+
|
128
|
+
log "DELETE " + path + " " + params.to_s
|
129
|
+
log headers.to_s
|
130
|
+
|
131
|
+
begin
|
132
|
+
response = RestClient::Request.execute(method: :delete, url: path, payload: params.to_json, headers: headers, timeout: 180)
|
133
|
+
rescue RestClient::ExceptionWithResponse => e
|
134
|
+
log e.http_code.to_s + " " + e.response.to_s
|
135
|
+
return e.response
|
136
|
+
end
|
137
|
+
|
138
|
+
log response.code.to_s + " " + response.to_s
|
139
|
+
|
140
|
+
response
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
# private class to generate connect url on Whalestack servers
|
145
|
+
private
|
146
|
+
def build_connect_url(endpoint)
|
147
|
+
@connect_url + @api_version + endpoint
|
148
|
+
end
|
149
|
+
|
150
|
+
# private class to generate authentication headers
|
151
|
+
private
|
152
|
+
def build_headers(endpoint, method, params)
|
153
|
+
|
154
|
+
timestamp = Time.now.to_i
|
155
|
+
body = nil
|
156
|
+
if method != 'GET'
|
157
|
+
body = params.length > 0 ? params.to_json : nil
|
158
|
+
end
|
159
|
+
data = endpoint + timestamp.to_s + method + body.to_s
|
160
|
+
|
161
|
+
{
|
162
|
+
:"X-Digest-Key" => @key,
|
163
|
+
:"X-Digest-Signature" => OpenSSL::HMAC.hexdigest('sha256', @secret, data),
|
164
|
+
:"X-Digest-Timestamp" => timestamp,
|
165
|
+
:"User-Agent" => @client_name + " " + @client_version
|
166
|
+
}
|
167
|
+
|
168
|
+
end
|
169
|
+
|
170
|
+
|
171
|
+
private
|
172
|
+
def log(text)
|
173
|
+
|
174
|
+
if @log_file == nil
|
175
|
+
return
|
176
|
+
end
|
177
|
+
|
178
|
+
File.open(@log_file, 'a') { |f| f.write(Time.now.utc.rfc822 + " [WhalestackSDK] " + text + "\n") }
|
179
|
+
|
180
|
+
end
|
181
|
+
|
182
|
+
end
|
183
|
+
|
184
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'whalestack_sdk/config'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'whalestack_sdk'
|
7
|
+
s.version = WhalestackSDK::CLIENT_VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ['Whalestack LLC']
|
10
|
+
s.email = ['service@whalestack.com']
|
11
|
+
s.homepage = 'https://www.whalestack.com'
|
12
|
+
s.summary = %q{Whalestack SDK. Programmatically accept and settle payments in digital currencies.}
|
13
|
+
s.licenses = ['Apache-2.0']
|
14
|
+
s.required_ruby_version = '>= 2.0.0'
|
15
|
+
|
16
|
+
s.add_runtime_dependency 'rest-client', '~> 2.1', '>= 2.1.0'
|
17
|
+
s.add_runtime_dependency 'json', '~> 2.3', '>= 2.3.0'
|
18
|
+
|
19
|
+
s.files = `git ls-files`.split("\n")
|
20
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
21
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
22
|
+
s.require_paths = ['lib']
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: whalestack_sdk
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Whalestack LLC
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-10-05 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: 2.1.0
|
20
|
+
- - "~>"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '2.1'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 2.1.0
|
30
|
+
- - "~>"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '2.1'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: json
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 2.3.0
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '2.3'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 2.3.0
|
50
|
+
- - "~>"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '2.3'
|
53
|
+
description:
|
54
|
+
email:
|
55
|
+
- service@whalestack.com
|
56
|
+
executables: []
|
57
|
+
extensions: []
|
58
|
+
extra_rdoc_files: []
|
59
|
+
files:
|
60
|
+
- ".gitignore"
|
61
|
+
- Gemfile
|
62
|
+
- lib/whalestack_sdk.rb
|
63
|
+
- lib/whalestack_sdk/client.rb
|
64
|
+
- lib/whalestack_sdk/config.rb
|
65
|
+
- whalestack_sdk.gemspec
|
66
|
+
homepage: https://www.whalestack.com
|
67
|
+
licenses:
|
68
|
+
- Apache-2.0
|
69
|
+
metadata: {}
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options: []
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 2.0.0
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
requirements: []
|
85
|
+
rubygems_version: 3.0.3.1
|
86
|
+
signing_key:
|
87
|
+
specification_version: 4
|
88
|
+
summary: Whalestack SDK. Programmatically accept and settle payments in digital currencies.
|
89
|
+
test_files: []
|