genba-ruby 0.1.11 → 0.2.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 +4 -4
- data/Gemfile.lock +35 -6
- data/README.md +25 -216
- data/genba.gemspec +2 -1
- data/lib/genba.rb +16 -8
- data/lib/genba/action_request.rb +16 -0
- data/lib/genba/activation_request.rb +35 -0
- data/lib/genba/client.rb +67 -37
- data/lib/genba/client/direct_entitlement.rb +20 -0
- data/lib/genba/client/direct_entitlements/activations.rb +40 -0
- data/lib/genba/client/direct_entitlements/redemptions.rb +40 -0
- data/lib/genba/client/orders.rb +37 -0
- data/lib/genba/client/ping.rb +16 -0
- data/lib/genba/client/prices.rb +6 -5
- data/lib/genba/client/products.rb +13 -21
- data/lib/genba/client/promotions.rb +22 -0
- data/lib/genba/client/reservations.rb +27 -0
- data/lib/genba/order_request.rb +31 -0
- data/lib/genba/redemption_request.rb +21 -0
- data/lib/genba/reservation_request.rb +30 -0
- data/lib/genba/version.rb +1 -1
- metadata +34 -12
- data/lib/genba/client/direct_entitlements.rb +0 -58
- data/lib/genba/client/keys.rb +0 -69
- data/lib/genba/client/reports.rb +0 -19
- data/lib/genba/client/restrictions.rb +0 -21
- data/lib/genba/key_black_list_request.rb +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 836249770fcbc24938245ca6e86dad29e46d1988e448e1f97da0bd0d73f5e7e6
|
4
|
+
data.tar.gz: 4e151d88eaee7b974e996e9cd3f296e533d9de5c5dc985a1d2b499c1d8ca603f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bdae84519ddbd6fa380311b7f685c548b53411733503be70705142352ee8a4fb01ca5dd3506e8e48ab2e12a38057de459b149e45eddd4007cf175f7003e23d42
|
7
|
+
data.tar.gz: 8aa1f6a946b26336b523b93e770f2f2d80fe065968f0000c0aa7e3a0f9178bbc5e19fd40e70b4242be59745d75583a7a4d2e8d4073131cd56268fcb8a5e3a367
|
data/Gemfile.lock
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
genba
|
4
|
+
genba (0.2.0)
|
5
|
+
dry-validation (~> 0.11.0)
|
6
|
+
jwt (~> 1.5)
|
5
7
|
oj (~> 3.5)
|
6
8
|
rest-client (~> 2.0)
|
7
|
-
ruby-mcrypt (= 0.2.0)
|
8
9
|
|
9
10
|
GEM
|
10
11
|
remote: https://rubygems.org/
|
@@ -20,17 +21,46 @@ GEM
|
|
20
21
|
public_suffix (>= 2.0.2, < 4.0)
|
21
22
|
byebug (10.0.2)
|
22
23
|
coderay (1.1.2)
|
23
|
-
concurrent-ruby (1.
|
24
|
+
concurrent-ruby (1.1.5)
|
24
25
|
crack (0.4.3)
|
25
26
|
safe_yaml (~> 1.0.0)
|
26
27
|
diff-lcs (1.3)
|
27
|
-
domain_name (0.5.
|
28
|
+
domain_name (0.5.20190701)
|
28
29
|
unf (>= 0.0.5, < 1.0.0)
|
30
|
+
dry-configurable (0.7.0)
|
31
|
+
concurrent-ruby (~> 1.0)
|
32
|
+
dry-container (0.6.0)
|
33
|
+
concurrent-ruby (~> 1.0)
|
34
|
+
dry-configurable (~> 0.1, >= 0.1.3)
|
35
|
+
dry-core (0.4.8)
|
36
|
+
concurrent-ruby (~> 1.0)
|
37
|
+
dry-equalizer (0.2.2)
|
38
|
+
dry-logic (0.4.2)
|
39
|
+
dry-container (~> 0.2, >= 0.2.6)
|
40
|
+
dry-core (~> 0.2)
|
41
|
+
dry-equalizer (~> 0.2)
|
42
|
+
dry-types (0.12.3)
|
43
|
+
concurrent-ruby (~> 1.0)
|
44
|
+
dry-configurable (~> 0.1)
|
45
|
+
dry-container (~> 0.3)
|
46
|
+
dry-core (~> 0.2, >= 0.2.1)
|
47
|
+
dry-equalizer (~> 0.2)
|
48
|
+
dry-logic (~> 0.4, >= 0.4.2)
|
49
|
+
inflecto (~> 0.0.0, >= 0.0.2)
|
50
|
+
dry-validation (0.11.2)
|
51
|
+
concurrent-ruby (~> 1.0)
|
52
|
+
dry-configurable (~> 0.1, >= 0.1.3)
|
53
|
+
dry-core (~> 0.2, >= 0.2.1)
|
54
|
+
dry-equalizer (~> 0.2)
|
55
|
+
dry-logic (~> 0.4.2)
|
56
|
+
dry-types (~> 0.12.0)
|
29
57
|
hashdiff (0.3.7)
|
30
58
|
http-cookie (1.0.3)
|
31
59
|
domain_name (~> 0.5)
|
32
60
|
i18n (1.0.1)
|
33
61
|
concurrent-ruby (~> 1.0)
|
62
|
+
inflecto (0.0.2)
|
63
|
+
jwt (1.5.6)
|
34
64
|
method_source (0.9.0)
|
35
65
|
mime-types (3.2.2)
|
36
66
|
mime-types-data (~> 3.2015)
|
@@ -63,7 +93,6 @@ GEM
|
|
63
93
|
diff-lcs (>= 1.2.0, < 2.0)
|
64
94
|
rspec-support (~> 3.7.0)
|
65
95
|
rspec-support (3.7.1)
|
66
|
-
ruby-mcrypt (0.2.0)
|
67
96
|
safe_yaml (1.0.4)
|
68
97
|
thread_safe (0.3.6)
|
69
98
|
tzinfo (1.2.5)
|
@@ -84,7 +113,7 @@ DEPENDENCIES
|
|
84
113
|
activemodel
|
85
114
|
bundler (~> 1.16)
|
86
115
|
byebug
|
87
|
-
genba
|
116
|
+
genba!
|
88
117
|
pry
|
89
118
|
pry-byebug
|
90
119
|
rake
|
data/README.md
CHANGED
@@ -4,234 +4,43 @@
|
|
4
4
|
[](https://circleci.com/gh/iscreen/genba-ruby)
|
5
5
|
[](https://badge.fury.io/rb/genba-ruby)
|
6
6
|
|
7
|
-
The Genba Library provides convenient access to the [Genba API](https://
|
7
|
+
The Genba Library provides convenient access to the [Genba API V3](https://sandbox.genbadigital.io/doc) from applications written in the Ruby language.
|
8
|
+
* [Genba Digital](https://genbadigital.com/)
|
9
|
+
* [Genba API V2](https://api.genbagames.com/doc/)
|
10
|
+
* [Genba API V3 Sandbox](https://sandbox.genbadigital.io/doc/)
|
11
|
+
* [Genba API V3 Production](https://unknown.genbadigital.io/doc)
|
8
12
|
|
9
13
|
## Basic Usage
|
10
14
|
|
11
15
|
```ruby
|
12
|
-
|
16
|
+
require 'genba-ruby'
|
13
17
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
## Products
|
23
|
-
[Genba Products API](https://api.genbagames.com/doc/#api-Product)
|
24
|
-
|
25
|
-
### Product - Changes
|
26
|
-
|
27
|
-
Return a list of products which have changed since a given date, including basic or advanced metadata.
|
28
|
-
|
29
|
-
```ruby
|
30
|
-
payload = {
|
31
|
-
from_date: DateTime.now - 1,
|
32
|
-
country_iso: 'US',
|
33
|
-
include_meta: false
|
34
|
-
}
|
35
|
-
|
36
|
-
response = genba_client.products.get_changes(payload)
|
37
|
-
```
|
38
|
-
|
39
|
-
```ruby
|
40
|
-
payload = {
|
41
|
-
include_meta: false
|
42
|
-
}
|
43
|
-
|
44
|
-
response = genba_client.products.get_changes(payload)
|
45
|
-
```
|
46
|
-
|
47
|
-
### Product - Get
|
48
|
-
|
49
|
-
Return a list of product objects, including basic or advanced metadata.
|
50
|
-
|
51
|
-
```ruby
|
52
|
-
payload = {
|
53
|
-
include_meta: false
|
54
|
-
}
|
55
|
-
|
56
|
-
response = genba_client.products.get_products(payload)
|
57
|
-
```
|
58
|
-
|
59
|
-
Return a list of product objects with countryISO
|
60
|
-
|
61
|
-
```ruby
|
62
|
-
payload = {
|
63
|
-
country_iso: 'US',
|
64
|
-
include_meta: false
|
65
|
-
}
|
66
|
-
|
67
|
-
response = genba_client.products.get_products(payload)
|
68
|
-
```
|
69
|
-
|
70
|
-
Retrieve an existing product
|
71
|
-
|
72
|
-
```ruby
|
73
|
-
payload = {
|
74
|
-
sku_id: '79cf9bb2-e7f5-448f-b996-c52e4b2bb351',
|
75
|
-
include_meta: true
|
76
|
-
}
|
77
|
-
|
78
|
-
product = genba_client.products.get_products(payload)
|
18
|
+
GENBA = Genba.client(
|
19
|
+
resource: 'resource-0000-0000-0000-000000000000',
|
20
|
+
account_id: 'account0-0000-0000-0000-000000000000',
|
21
|
+
cert: 'your.domain.crt',
|
22
|
+
key: 'your.domain.key',
|
23
|
+
sandbox: true # default: false
|
24
|
+
)
|
79
25
|
```
|
80
26
|
|
81
|
-
|
82
|
-
|
83
|
-
Return a list of products which have been removed since a given date.
|
84
|
-
|
85
|
-
```ruby
|
86
|
-
payload = {
|
87
|
-
from_date: DateTime.now - 1,
|
88
|
-
country_iso: 'US',
|
89
|
-
include_meta: false
|
90
|
-
}
|
27
|
+
## Ping
|
28
|
+
[Genba Ping API](https://sandbox.genbadigital.io/doc/#/Ping)
|
91
29
|
|
92
|
-
|
93
|
-
|
30
|
+
## Products
|
31
|
+
[Genba Products API](https://sandbox.genbadigital.io/doc/#/Products)
|
94
32
|
|
95
33
|
## Prices
|
96
|
-
[Genba Prices API](https://
|
97
|
-
|
98
|
-
Get latest prices for all of your available products. It is recommended that you call this daily to get accurate pricing.
|
99
|
-
|
100
|
-
```ruby
|
101
|
-
response = genba_client.prices.get_prices
|
102
|
-
```
|
103
|
-
|
104
|
-
## Restrictions
|
105
|
-
[Genba Restrictions API](https://api.genbagames.com/doc/#api-Restrictions)
|
106
|
-
|
107
|
-
### Restrictions - Get
|
108
|
-
|
109
|
-
Returns a list of product sku restrictions, whitelist - can only sold in countries, blacklist - cannot be sold in countries.
|
110
|
-
|
111
|
-
Returns a list of product sku restrictions by countryISO
|
34
|
+
[Genba Prices API](https://sandbox.genbadigital.io/doc/#/Prices)
|
112
35
|
|
113
|
-
|
114
|
-
|
115
|
-
country_iso: 'US'
|
116
|
-
}
|
117
|
-
|
118
|
-
response = genba_client.restrictions.get_restrictions(payload)
|
119
|
-
response[:productRestriction]
|
120
|
-
```
|
121
|
-
|
122
|
-
Returns a list of product sku restrictions by countryISO, productID and fromDate
|
123
|
-
|
124
|
-
```ruby
|
125
|
-
payload = {
|
126
|
-
product_id: '84d90a06-f458-4ed8-8f3d-91aa84cc6577',
|
127
|
-
from_date: 1.days.ago.strftime('%FT%T'),
|
128
|
-
country_iso: 'US'
|
129
|
-
}
|
130
|
-
|
131
|
-
response = genba_client.restrictions.get_restrictions(payload)
|
132
|
-
response[:productRestriction]
|
133
|
-
```
|
134
|
-
|
135
|
-
## Keys
|
136
|
-
[Genba Keys API](https://api.genbagames.com/doc/#api-Keys)
|
137
|
-
|
138
|
-
### Keys - Get Test Keys
|
139
|
-
|
140
|
-
Request Product Test Keys for a SKU
|
141
|
-
|
142
|
-
```ruby
|
143
|
-
response = genba_client.keys.get_test_keys('84d90a06-f458-4ed8-8f3d-91aa84cc6577')
|
144
|
-
|
145
|
-
response[:status]
|
146
|
-
response[:keys]
|
147
|
-
```
|
148
|
-
|
149
|
-
Request Product Keys for a SKU
|
150
|
-
|
151
|
-
```ruby
|
152
|
-
|
153
|
-
response = genba_client.keys.get_keys('84d90a06-f458-4ed8-8f3d-91aa84cc6577', 1, customerAccountId)
|
154
|
-
|
155
|
-
response[:status]
|
156
|
-
response[:keys]
|
157
|
-
```
|
36
|
+
## Promotions
|
37
|
+
[Genba Promotions API](https://sandbox.genbadigital.io/doc/#/Promotions)
|
158
38
|
|
159
|
-
|
39
|
+
## Reservations
|
40
|
+
[Genba Reservations API](https://sandbox.genbadigital.io/doc/#/Reservations)
|
160
41
|
|
161
|
-
|
162
|
-
|
163
|
-
```ruby
|
164
|
-
key = KeyReportRequest.new(
|
165
|
-
key: '00000000000000000000000000000000',
|
166
|
-
country_iso: 'US',
|
167
|
-
sale_date: DateTime.now,
|
168
|
-
user_ip_address: '182.212.212.22',
|
169
|
-
e_tailer_buying_price: 3.8,
|
170
|
-
e_tailer_buying_price_currency_code: 'USD',
|
171
|
-
e_tailer_selling_price_net: 3.2,
|
172
|
-
e_tailer_selling_price_gross: 3.8,
|
173
|
-
e_tailer_selling_price_currency_code: 'USD'
|
174
|
-
)
|
175
|
-
|
176
|
-
response = genba_client.keys.get_report_usage([key])
|
177
|
-
|
178
|
-
response[:acceptedCount]
|
179
|
-
response[:rejectedCount]
|
180
|
-
```
|
181
|
-
|
182
|
-
Report usage with key
|
183
|
-
```ruby
|
184
|
-
key = KeyReportRequest.new(
|
185
|
-
key_id: '00000000-ffff-2222-3333-444444444444',
|
186
|
-
country_iso: 'US',
|
187
|
-
sale_date: DateTime.now,
|
188
|
-
user_ip_address: '182.212.212.22',
|
189
|
-
e_tailer_buying_price: 3.8,
|
190
|
-
e_tailer_buying_price_currency_code: 'USD',
|
191
|
-
e_tailer_selling_price_net: 3.2,
|
192
|
-
e_tailer_selling_price_gross: 3.8,
|
193
|
-
e_tailer_selling_price_currency_code: 'USD'
|
194
|
-
)
|
195
|
-
key_res = @client.keys.get_report_usage([key])
|
196
|
-
response = genba_client.keys.get_report_usage([key])
|
197
|
-
|
198
|
-
response[:acceptedCount]
|
199
|
-
response[:rejectedCount]
|
200
|
-
```
|
42
|
+
## Orders
|
43
|
+
[Genba Orders API](https://sandbox.genbadigital.io/doc/#/Orders)
|
201
44
|
|
202
45
|
## DirectEntitlement
|
203
|
-
|
204
|
-
### DirectEntitlement - Activate
|
205
|
-
|
206
|
-
Use this method to get and activate keys for a Direct Entitlement SKU. You will be charged at the point of calling this method.
|
207
|
-
|
208
|
-
```ruby
|
209
|
-
payload = {
|
210
|
-
sku_id: 'd972e0c7-5ddb-4e0d-9138-a78a6b269e99',
|
211
|
-
country_iso: 'US',
|
212
|
-
end_user_ip_address: '182.212.212.22',
|
213
|
-
sale_date: DateTime.now,
|
214
|
-
end_user_id: '0000001',
|
215
|
-
end_user_ticket: 'ticket0000001',
|
216
|
-
e_tailer_buying_price: 18.29,
|
217
|
-
e_tailer_buying_price_currency_code: 'USD',
|
218
|
-
e_tailer_selling_price_net: 19.89,
|
219
|
-
e_tailer_selling_price_gross: 20.29,
|
220
|
-
e_tailer_selling_price_currency_code: 'USD',
|
221
|
-
}
|
222
|
-
key_res = @client.direct_entitlements.activate(payload)
|
223
|
-
```
|
224
|
-
|
225
|
-
### DirectEntitlement - Redeem
|
226
|
-
|
227
|
-
Use this method to redeem keys already sold for a Direct Entitlement SKU and link them to the end-user's account. You will not be charged at the point of calling this method.
|
228
|
-
|
229
|
-
```ruby
|
230
|
-
payload = {
|
231
|
-
sku_id: 'd972e0c7-5ddb-4e0d-9138-a78a6b269e99',
|
232
|
-
key_id: '00000000-0000-0000-0000-000000000000',
|
233
|
-
end_user_id: '00001',
|
234
|
-
end_user_ticket: 'ticket00001'
|
235
|
-
}
|
236
|
-
key_res = @client.direct_entitlements.redeem(payload)
|
237
|
-
```
|
46
|
+
[Genba DirectEntitlement API](https://sandbox.genbadigital.io/doc/#/DirectEntitlement)
|
data/genba.gemspec
CHANGED
@@ -32,7 +32,8 @@ Gem::Specification.new do |spec|
|
|
32
32
|
|
33
33
|
spec.add_runtime_dependency 'oj', '~> 3.5'
|
34
34
|
spec.add_runtime_dependency 'rest-client', '~> 2.0'
|
35
|
-
spec.add_runtime_dependency '
|
35
|
+
spec.add_runtime_dependency 'jwt', '~> 1.5'
|
36
|
+
spec.add_runtime_dependency 'dry-validation', '~> 0.11.0'
|
36
37
|
|
37
38
|
spec.add_development_dependency 'bundler', '~> 1.16'
|
38
39
|
spec.add_development_dependency 'rake', '~> 10.0'
|
data/lib/genba.rb
CHANGED
@@ -1,21 +1,29 @@
|
|
1
1
|
require 'base64'
|
2
2
|
require 'digest'
|
3
|
-
require '
|
3
|
+
require 'jwt'
|
4
4
|
require 'rest-client'
|
5
5
|
require 'logger'
|
6
6
|
require 'oj'
|
7
7
|
require 'active_model'
|
8
|
+
require 'dry-validation'
|
8
9
|
|
9
10
|
require 'genba/version'
|
10
|
-
require 'genba/
|
11
|
-
require 'genba/
|
11
|
+
require 'genba/reservation_request'
|
12
|
+
require 'genba/order_request'
|
13
|
+
require 'genba/action_request'
|
14
|
+
require 'genba/activation_request'
|
15
|
+
require 'genba/redemption_request'
|
16
|
+
|
12
17
|
require 'genba/util'
|
13
|
-
require 'genba/client/
|
14
|
-
require 'genba/client/keys'
|
15
|
-
require 'genba/client/prices'
|
18
|
+
require 'genba/client/ping'
|
16
19
|
require 'genba/client/products'
|
17
|
-
require 'genba/client/
|
18
|
-
require 'genba/client/
|
20
|
+
require 'genba/client/prices'
|
21
|
+
require 'genba/client/promotions'
|
22
|
+
require 'genba/client/reservations'
|
23
|
+
require 'genba/client/orders'
|
24
|
+
require 'genba/client/direct_entitlement'
|
25
|
+
require 'genba/client/direct_entitlements/activations'
|
26
|
+
require 'genba/client/direct_entitlements/redemptions'
|
19
27
|
require 'genba/client'
|
20
28
|
|
21
29
|
# Genba API module
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Genba
|
4
|
+
class ActionRequest
|
5
|
+
def initialize
|
6
|
+
@schema = Dry::Validation.Schema do
|
7
|
+
required(:Action).filled(:str?)
|
8
|
+
optional(:Reason).filled(:str?)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(data)
|
13
|
+
@schema.call(data)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Genba
|
4
|
+
class ActivationRequest
|
5
|
+
def initialize
|
6
|
+
@schema = Dry::Validation.Schema do
|
7
|
+
required(:ClientTransactionID).filled(:str?)
|
8
|
+
optional(:EtailerID).filled(:str?)
|
9
|
+
required(:Activation).schema do
|
10
|
+
required(:Sku).filled(:str?)
|
11
|
+
required(:CountryCode).filled(:str?)
|
12
|
+
optional(:ConsumerIP).maybe(:str?)
|
13
|
+
optional(:BuyingPrice).schema do
|
14
|
+
required(:Amount).filled(:float?)
|
15
|
+
required(:CurrencyCode).filled(:str?)
|
16
|
+
end
|
17
|
+
required(:SellingPrice).schema do
|
18
|
+
required(:NetAmount).filled(:float?)
|
19
|
+
required(:GrossAmount).filled(:float?)
|
20
|
+
required(:CurrencyCode).filled(:str?)
|
21
|
+
end
|
22
|
+
optional(:EtailerID).filled(:str?)
|
23
|
+
end
|
24
|
+
optional(:Redemption).schema do
|
25
|
+
required(:EndUserID).filled(:str?)
|
26
|
+
required(:EndUserTicket).filled(:str?)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def call(data)
|
32
|
+
@schema.call(data)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/genba/client.rb
CHANGED
@@ -6,7 +6,8 @@ module Genba
|
|
6
6
|
attr_accessor :customer_account_id,
|
7
7
|
:open_timeout, :read_timeout, :max_retry, :retry_delay
|
8
8
|
|
9
|
-
|
9
|
+
SANDBOX_API_URL = 'https://sandbox.genbadigital.io/api/v3-0'.freeze
|
10
|
+
PRODUCTION_API_URL = 'https://api.genbadigital.io/api/v3-0'.freeze
|
10
11
|
|
11
12
|
@expires_on = nil
|
12
13
|
@id_token = nil
|
@@ -18,11 +19,16 @@ module Genba
|
|
18
19
|
# * +config+ - Genba API credential attribute
|
19
20
|
#
|
20
21
|
# ==== Options
|
21
|
-
def initialize(
|
22
|
-
@
|
23
|
-
@
|
24
|
-
@
|
25
|
-
@
|
22
|
+
def initialize(resource:, account_id:, cert:, key:, sandbox: false, options: {})
|
23
|
+
@api_url = sandbox ? SANDBOX_API_URL : PRODUCTION_API_URL
|
24
|
+
@resource = resource
|
25
|
+
@account_id = account_id
|
26
|
+
@cert = cert
|
27
|
+
@key = key
|
28
|
+
@tenant = 'aad.genbadigital.io'
|
29
|
+
@authority_url = "https://login.microsoftonline.com/#{@tenant}"
|
30
|
+
@client_id = "https://aad-snd.genbadigital.io/#{@account_id}"
|
31
|
+
|
26
32
|
@open_timeout = options[:open_timeout] || 15
|
27
33
|
@read_timeout = options[:read_timeout] || 60
|
28
34
|
@max_retry = options[:max_retry] || 0
|
@@ -31,22 +37,42 @@ module Genba
|
|
31
37
|
|
32
38
|
def generate_token
|
33
39
|
unless token_valid?
|
34
|
-
|
40
|
+
certificate = OpenSSL::X509::Certificate.new File.open(@cert)
|
41
|
+
x5t = Base64.encode64 OpenSSL::Digest::SHA1.new(certificate.to_der).digest
|
42
|
+
payload = {
|
43
|
+
exp: (Time.now + 60*60*24).to_i,
|
44
|
+
aud: "#{@authority_url}/oauth2/token",
|
45
|
+
iss: @client_id,
|
46
|
+
sub: @client_id,
|
47
|
+
}
|
48
|
+
rsa_private = OpenSSL::PKey::RSA.new File.open(@key)
|
49
|
+
token = JWT.encode payload, rsa_private, 'RS256', { x5t: x5t }
|
50
|
+
|
51
|
+
body = {
|
52
|
+
resource: @resource,
|
53
|
+
client_id: @client_id,
|
54
|
+
grant_type: 'client_credentials',
|
55
|
+
scope: 'https://graph.microsoft.com/.default',
|
56
|
+
client_assertion_type: 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer',
|
57
|
+
client_assertion: token,
|
58
|
+
tenant: @tenant
|
59
|
+
}
|
60
|
+
|
35
61
|
response = RestClient.post(
|
36
|
-
"#{
|
62
|
+
"#{@authority_url}/oauth2/token",
|
37
63
|
body,
|
38
64
|
headers: { accept: 'application/json', 'Content-Type': 'application/json' }
|
39
65
|
)
|
40
66
|
parsed_response = decode_json(response.body)
|
41
|
-
@id_token = parsed_response['
|
42
|
-
@expires_on = Time.
|
67
|
+
@id_token = parsed_response['access_token']
|
68
|
+
@expires_on = Time.at(parsed_response['expires_on'].to_i)
|
43
69
|
end
|
44
70
|
raw_token
|
45
71
|
end
|
46
72
|
|
47
73
|
def rest_get_with_token(path, query_params = {}, headers = {}, options = {})
|
48
74
|
genba_headers = token.merge(headers)
|
49
|
-
api_url = "#{
|
75
|
+
api_url = "#{@api_url}#{path}"
|
50
76
|
api_url += "?#{query_params.to_query}" unless query_params.empty?
|
51
77
|
response = execute_request(method: :get, url: api_url,
|
52
78
|
headers: genba_headers, options: options)
|
@@ -55,14 +81,14 @@ module Genba
|
|
55
81
|
|
56
82
|
def rest_put_with_token(path, body = {}, headers = {}, options = {})
|
57
83
|
genba_headers = token.merge(headers)
|
58
|
-
response = execute_request(method: :put, url: "#{
|
84
|
+
response = execute_request(method: :put, url: "#{@api_url}#{path}",
|
59
85
|
payload: encode_json(body), headers: genba_headers, options: options)
|
60
86
|
from_rest_client_response(response)
|
61
87
|
end
|
62
88
|
|
63
89
|
def rest_post_with_token(path, body = {}, headers = {}, options = {})
|
64
90
|
genba_headers = token.merge(headers)
|
65
|
-
response = execute_request(method: :post, url: "#{
|
91
|
+
response = execute_request(method: :post, url: "#{@api_url}#{path}",
|
66
92
|
payload: encode_json(body), headers: genba_headers, options: options)
|
67
93
|
from_rest_client_response(response)
|
68
94
|
end
|
@@ -93,7 +119,13 @@ module Genba
|
|
93
119
|
num_try = 0
|
94
120
|
begin
|
95
121
|
response = RestClient::Request.execute(request_opts)
|
96
|
-
rescue
|
122
|
+
rescue RestClient::Exception, SocketError, Errno::ECONNREFUSED, NoMethodError => e
|
123
|
+
if e.class.parent == RestClient && valid_json?(e.http_body)
|
124
|
+
Genba::Util.log_error "#{e.class} => #{e.message}\n#{e.http_body}"
|
125
|
+
raise e
|
126
|
+
# response = OpenStruct.new(code: e.http_code, body: e.http_body, headers: {})
|
127
|
+
# return response
|
128
|
+
end
|
97
129
|
Genba::Util.log_error "#{e.class} => #{e.message}"
|
98
130
|
|
99
131
|
num_try += 1
|
@@ -109,6 +141,17 @@ module Genba
|
|
109
141
|
response
|
110
142
|
end
|
111
143
|
|
144
|
+
def valid_json?(json)
|
145
|
+
JSON.parse(json)
|
146
|
+
return true
|
147
|
+
rescue JSON::ParserError => e
|
148
|
+
return false
|
149
|
+
end
|
150
|
+
|
151
|
+
def ping
|
152
|
+
Ping.new(self)
|
153
|
+
end
|
154
|
+
|
112
155
|
def products
|
113
156
|
Products.new(self)
|
114
157
|
end
|
@@ -117,20 +160,20 @@ module Genba
|
|
117
160
|
Prices.new(self)
|
118
161
|
end
|
119
162
|
|
120
|
-
def
|
121
|
-
|
163
|
+
def promotions
|
164
|
+
Promotions.new(self)
|
122
165
|
end
|
123
166
|
|
124
|
-
def
|
125
|
-
|
167
|
+
def reservations
|
168
|
+
Reservations.new(self)
|
126
169
|
end
|
127
170
|
|
128
|
-
def
|
129
|
-
|
171
|
+
def orders
|
172
|
+
Orders.new(self)
|
130
173
|
end
|
131
174
|
|
132
|
-
def
|
133
|
-
|
175
|
+
def direct_entitlement
|
176
|
+
DirectEntitlement.new(self)
|
134
177
|
end
|
135
178
|
|
136
179
|
private
|
@@ -143,22 +186,10 @@ module Genba
|
|
143
186
|
Oj.load(json)
|
144
187
|
end
|
145
188
|
|
146
|
-
def genba_signature
|
147
|
-
cipher = Mcrypt.new(
|
148
|
-
:rijndael_256,
|
149
|
-
:cbc,
|
150
|
-
Digest::SHA256.digest(@username),
|
151
|
-
Digest::SHA256.digest(@app_id)
|
152
|
-
)
|
153
|
-
encrypted = cipher.encrypt(@api_key)
|
154
|
-
Base64.strict_encode64(encrypted)
|
155
|
-
end
|
156
|
-
|
157
189
|
def raw_token
|
158
190
|
if token_valid?
|
159
191
|
{
|
160
|
-
|
161
|
-
appId: @app_id,
|
192
|
+
Authorization: "Bearer #{@id_token}",
|
162
193
|
accept: 'application/json',
|
163
194
|
'Content-Type': 'application/json'
|
164
195
|
}
|
@@ -177,8 +208,7 @@ module Genba
|
|
177
208
|
end
|
178
209
|
|
179
210
|
def from_rest_client_response(response)
|
180
|
-
if response.code < 200
|
181
|
-
response.code >= 400
|
211
|
+
if response.code < 200
|
182
212
|
Genba::Util.log_error "Invalid response object from API: #{response.body}" \
|
183
213
|
"(HTTP response code was #{response.code})"
|
184
214
|
raise "Invalid response object from API: #{response.body}" \
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Genba
|
4
|
+
class Client
|
5
|
+
# DirectEntitlements client
|
6
|
+
class DirectEntitlement
|
7
|
+
def initialize(client)
|
8
|
+
@client = client
|
9
|
+
end
|
10
|
+
|
11
|
+
def activations
|
12
|
+
DirectEntitlement::Activations.new(@client)
|
13
|
+
end
|
14
|
+
|
15
|
+
def redemptions
|
16
|
+
DirectEntitlement::Redemptions.new(@client)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Genba
|
4
|
+
class Client
|
5
|
+
class DirectEntitlement
|
6
|
+
# DirectEntitlement Activations client
|
7
|
+
class Activations
|
8
|
+
def initialize(client)
|
9
|
+
@client = client
|
10
|
+
end
|
11
|
+
|
12
|
+
# Perform a direct entitlement activation
|
13
|
+
def perform(activation_request, headers: {}, options: {})
|
14
|
+
errors = Genba::ActivationRequest.new.call(activation_request).messages
|
15
|
+
raise errors.inspect unless errors.empty?
|
16
|
+
|
17
|
+
@client.rest_post_with_token('/directentitlement/activations', activation_request, headers, options)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Retrieve a direct entitlement activation
|
21
|
+
def get(activation_id, headers: {})
|
22
|
+
@client.rest_get_with_token("/directentitlement/activations/#{activation_id}", {}, headers)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Perform an action on an activation
|
26
|
+
def perform_action(activation_id, action_request, headers: {}, options: {})
|
27
|
+
errors = Genba::ActionRequest.new.call(action_request).messages
|
28
|
+
raise errors.inspect unless errors.empty?
|
29
|
+
|
30
|
+
@client.rest_post_with_token("/directentitlement/activations/#{activation_id}", action_request, headers)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Retrieve a direct entitlement activation by its Client Transaction ID
|
34
|
+
def get_by_ctid(ctid, headers: {})
|
35
|
+
@client.rest_get_with_token("/directentitlement/activations/ctid/#{ctid}", {}, headers)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Genba
|
4
|
+
class Client
|
5
|
+
class DirectEntitlement
|
6
|
+
# DirectEntitlement Redemptions client
|
7
|
+
class Redemptions
|
8
|
+
def initialize(client)
|
9
|
+
@client = client
|
10
|
+
end
|
11
|
+
|
12
|
+
# Perform a direct entitlement redemption
|
13
|
+
def perform(redemption_request, headers: {}, options: {})
|
14
|
+
errors = Genba::RedemptionRequest.new.call(redemption_request).messages
|
15
|
+
raise errors.inspect unless errors.empty?
|
16
|
+
|
17
|
+
@client.rest_post_with_token('/directentitlement/redemptions', redemption_request, headers, options)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Retrieve a direct entitlement redemption
|
21
|
+
def get(redemption_id, headers: {})
|
22
|
+
@client.rest_get_with_token("/directentitlement/redemptions/#{redemption_id}", {}, headers)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Perform an action on an redemption
|
26
|
+
def perform_action(redemption_id, action_request, headers: {}, options: {})
|
27
|
+
errors = Genba::ActionRequest.new.call(action_request).messages
|
28
|
+
raise errors.inspect unless errors.empty?
|
29
|
+
|
30
|
+
@client.rest_post_with_token("/directentitlement/redemptions/#{redemption_id}", action_request, headers)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Retrieve a direct entitlement redemption by its Client Transaction ID
|
34
|
+
def get_by_ctid(ctid, headers: {})
|
35
|
+
@client.rest_get_with_token("/directentitlement/redemptions/ctid/#{ctid}", {}, headers)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Genba
|
4
|
+
class Client
|
5
|
+
class Orders
|
6
|
+
def initialize(client)
|
7
|
+
@client = client
|
8
|
+
end
|
9
|
+
|
10
|
+
# Order a product key
|
11
|
+
def perform(order_request, headers: {}, options: {})
|
12
|
+
errors = Genba::OrderRequest.new.call(order_request).messages
|
13
|
+
raise errors.inspect unless errors.empty?
|
14
|
+
|
15
|
+
@client.rest_post_with_token('/orders', order_request, headers, options)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Retrieve an order
|
19
|
+
def get(order_id, headers: {})
|
20
|
+
@client.rest_get_with_token("/orders/#{order_id}", {}, headers)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Perform an action on a product, like ‘Return’
|
24
|
+
def perform_action(order_id, action_request, headers: {}, options: {})
|
25
|
+
errors = Genba::ActionRequest.new.call(action_request).messages
|
26
|
+
raise errors.inspect unless errors.empty?
|
27
|
+
|
28
|
+
@client.rest_post_with_token("/orders/#{order_id}", action_request, headers)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Retrieve and order based on your Client transaction ID
|
32
|
+
def get_by_ctid(ctid, headers: {})
|
33
|
+
@client.rest_get_with_token("/orders/ctid/#{ctid}", {}, headers)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Genba
|
4
|
+
class Client
|
5
|
+
class Ping
|
6
|
+
def initialize(client)
|
7
|
+
@client = client
|
8
|
+
end
|
9
|
+
|
10
|
+
# Test connection to the API
|
11
|
+
def perform
|
12
|
+
@client.rest_get_with_token('/ping', {}, {})
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/genba/client/prices.rb
CHANGED
@@ -2,16 +2,17 @@
|
|
2
2
|
|
3
3
|
module Genba
|
4
4
|
class Client
|
5
|
-
# Prices client
|
6
5
|
class Prices
|
7
6
|
def initialize(client)
|
8
7
|
@client = client
|
9
8
|
end
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
# Gets a collection of prices
|
11
|
+
def list(continuation_token: nil, params: {}, headers: {})
|
12
|
+
payload = {
|
13
|
+
continuationtoken: continuation_token
|
14
|
+
}.select { |_, v| !v.nil? }.merge(params)
|
15
|
+
|
15
16
|
@client.rest_get_with_token('/prices', payload, headers)
|
16
17
|
end
|
17
18
|
end
|
@@ -2,38 +2,30 @@
|
|
2
2
|
|
3
3
|
module Genba
|
4
4
|
class Client
|
5
|
-
# Products client
|
6
5
|
class Products
|
7
6
|
def initialize(client)
|
8
7
|
@client = client
|
9
8
|
end
|
10
9
|
|
11
|
-
|
10
|
+
# Return information about a product
|
11
|
+
def get(sku_id, headers: {})
|
12
12
|
payload = {
|
13
|
-
skuId: sku_id,
|
14
|
-
countryISO: country_iso,
|
15
|
-
includeMeta: include_meta
|
16
13
|
}.select { |_, v| !v.nil? }
|
17
14
|
|
18
|
-
@client.rest_get_with_token(
|
15
|
+
@client.rest_get_with_token("/products/#{sku_id}", payload, headers)
|
19
16
|
end
|
20
17
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
18
|
+
# Gets a collection of available products
|
19
|
+
def list(country_code: nil, include_meta: nil, from_date: nil, deleted: nil, continuation_token: nil, headers: {})
|
20
|
+
payload = {
|
21
|
+
countryCode: country_code,
|
22
|
+
includeMeta: include_meta,
|
23
|
+
fromDate: from_date,
|
24
|
+
deleted: deleted,
|
25
|
+
continuationtoken: continuation_token
|
26
|
+
}.select { |_, v| !v.nil? }
|
29
27
|
|
30
|
-
|
31
|
-
payload = params.merge(
|
32
|
-
countryISO: country_iso,
|
33
|
-
customerAccountId: @client.customer_account_id
|
34
|
-
).select { |_, v| !v.nil? }
|
35
|
-
payload[:fromDate] = from_date.strftime('%FT%T') if from_date
|
36
|
-
@client.rest_get_with_token('/product/removed', payload, headers)
|
28
|
+
@client.rest_get_with_token('/products', payload, headers)
|
37
29
|
end
|
38
30
|
end
|
39
31
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Genba
|
4
|
+
class Client
|
5
|
+
class Promotions
|
6
|
+
def initialize(client)
|
7
|
+
@client = client
|
8
|
+
end
|
9
|
+
|
10
|
+
# Gets a collection of available promotions
|
11
|
+
def list(from_date: nil, to_date: nil, continuation_token: nil, headers: {})
|
12
|
+
payload = {
|
13
|
+
fromDate: from_date,
|
14
|
+
toDate: to_date,
|
15
|
+
continuationtoken: continuation_token
|
16
|
+
}.select { |_, v| !v.nil? }
|
17
|
+
|
18
|
+
@client.rest_get_with_token('/promotions', payload, headers)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Genba
|
4
|
+
class Client
|
5
|
+
class Reservations
|
6
|
+
def initialize(client)
|
7
|
+
@client = client
|
8
|
+
end
|
9
|
+
|
10
|
+
# Place a reservation for a product
|
11
|
+
def perform(reservation_request, headers: {}, options: {})
|
12
|
+
errors = Genba::ReservationRequest.new.call(reservation_request).messages
|
13
|
+
raise errors.inspect unless errors.empty?
|
14
|
+
|
15
|
+
@client.rest_post_with_token('/reservations', reservation_request, headers, options)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Retrieve a reservation
|
19
|
+
def get(reservation_id, headers: {})
|
20
|
+
payload = {
|
21
|
+
}.select { |_, v| !v.nil? }
|
22
|
+
|
23
|
+
@client.rest_get_with_token("/reservations/#{reservation_id}", payload, headers)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Genba
|
4
|
+
class OrderRequest
|
5
|
+
def initialize
|
6
|
+
@schema = Dry::Validation.Schema do
|
7
|
+
required(:ClientTransactionID).filled(:str?)
|
8
|
+
optional(:Properties).schema do
|
9
|
+
required(:Sku).filled(:str?)
|
10
|
+
optional(:BuyingPrice).schema do
|
11
|
+
required(:Amount).filled(:float?)
|
12
|
+
required(:CurrencyCode).filled(:str?)
|
13
|
+
end
|
14
|
+
required(:SellingPrice).schema do
|
15
|
+
required(:NetAmount).filled(:float?)
|
16
|
+
required(:GrossAmount).filled(:float?)
|
17
|
+
required(:CurrencyCode).filled(:str?)
|
18
|
+
end
|
19
|
+
optional(:ConsumerIP).maybe(:str?)
|
20
|
+
required(:CountryCode).filled(:str?)
|
21
|
+
optional(:EtailerID).filled(:str?)
|
22
|
+
end
|
23
|
+
optional(:ReservationID).filled(:str?)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def call(data)
|
28
|
+
@schema.call(data)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Genba
|
4
|
+
class RedemptionRequest
|
5
|
+
def initialize
|
6
|
+
@schema = Dry::Validation.Schema do
|
7
|
+
required(:ClientTransactionID).filled(:str?)
|
8
|
+
optional(:EtailerID).filled(:str?)
|
9
|
+
required(:ActivationID).filled(:str?)
|
10
|
+
required(:Redemption).schema do
|
11
|
+
required(:EndUserID).filled(:str?)
|
12
|
+
required(:EndUserTicket).filled(:str?)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def call(data)
|
18
|
+
@schema.call(data)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Genba
|
4
|
+
class ReservationRequest
|
5
|
+
def initialize
|
6
|
+
@schema = Dry::Validation.Schema do
|
7
|
+
required(:ClientTransactionID).filled(:str?)
|
8
|
+
required(:Properties).schema do
|
9
|
+
required(:Sku).filled(:str?)
|
10
|
+
optional(:BuyingPrice).schema do
|
11
|
+
required(:Amount).filled(:float?)
|
12
|
+
required(:CurrencyCode).filled(:str?)
|
13
|
+
end
|
14
|
+
required(:SellingPrice).schema do
|
15
|
+
required(:NetAmount).filled(:float?)
|
16
|
+
required(:GrossAmount).filled(:float?)
|
17
|
+
required(:CurrencyCode).filled(:str?)
|
18
|
+
end
|
19
|
+
optional(:ConsumerIP).maybe(:str?)
|
20
|
+
required(:CountryCode).filled(:str?)
|
21
|
+
optional(:EtailerID).filled(:str?)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def call(data)
|
27
|
+
@schema.call(data)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/genba/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: genba-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dean Lin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-08-
|
11
|
+
date: 2019-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oj
|
@@ -39,19 +39,33 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '2.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: jwt
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: '1.5'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: dry-validation
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.11.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
68
|
+
version: 0.11.0
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -116,17 +130,25 @@ files:
|
|
116
130
|
- circle.yml
|
117
131
|
- genba.gemspec
|
118
132
|
- lib/genba.rb
|
133
|
+
- lib/genba/action_request.rb
|
134
|
+
- lib/genba/activation_request.rb
|
119
135
|
- lib/genba/client.rb
|
120
|
-
- lib/genba/client/
|
121
|
-
- lib/genba/client/
|
136
|
+
- lib/genba/client/direct_entitlement.rb
|
137
|
+
- lib/genba/client/direct_entitlements/activations.rb
|
138
|
+
- lib/genba/client/direct_entitlements/redemptions.rb
|
139
|
+
- lib/genba/client/orders.rb
|
140
|
+
- lib/genba/client/ping.rb
|
122
141
|
- lib/genba/client/prices.rb
|
123
142
|
- lib/genba/client/products.rb
|
124
|
-
- lib/genba/client/
|
125
|
-
- lib/genba/client/
|
126
|
-
- lib/genba/key_black_list_request.rb
|
143
|
+
- lib/genba/client/promotions.rb
|
144
|
+
- lib/genba/client/reservations.rb
|
127
145
|
- lib/genba/key_report_request.rb
|
146
|
+
- lib/genba/order_request.rb
|
147
|
+
- lib/genba/redemption_request.rb
|
148
|
+
- lib/genba/reservation_request.rb
|
128
149
|
- lib/genba/util.rb
|
129
150
|
- lib/genba/version.rb
|
151
|
+
- tmp/.gitkeep
|
130
152
|
homepage: https://api.genbagames.com/doc/
|
131
153
|
licenses:
|
132
154
|
- MIT
|
@@ -1,58 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Genba
|
4
|
-
class Client
|
5
|
-
# DirectEntitlements client
|
6
|
-
class DirectEntitlements
|
7
|
-
def initialize(client)
|
8
|
-
@client = client
|
9
|
-
end
|
10
|
-
|
11
|
-
def activate(
|
12
|
-
sku_id:,
|
13
|
-
country_iso:,
|
14
|
-
end_user_ip_address:,
|
15
|
-
sale_date: DateTime.now,
|
16
|
-
end_user_id: nil,
|
17
|
-
end_user_ticket: nil,
|
18
|
-
e_tailer_buying_price:,
|
19
|
-
e_tailer_buying_price_currency_code:,
|
20
|
-
e_tailer_selling_price_net:,
|
21
|
-
e_tailer_selling_price_gross:,
|
22
|
-
e_tailer_selling_price_currency_code:,
|
23
|
-
headers: {},
|
24
|
-
options: {}
|
25
|
-
)
|
26
|
-
params = {
|
27
|
-
skuId: sku_id,
|
28
|
-
customerAccountId: @client.customer_account_id,
|
29
|
-
countryISO: country_iso,
|
30
|
-
endUserIpAddress: end_user_ip_address,
|
31
|
-
endUserId: end_user_id,
|
32
|
-
endUserTicket: end_user_ticket,
|
33
|
-
ETailerBuyingPrice: e_tailer_buying_price,
|
34
|
-
ETailerBuyingPriceCurrencyCode: e_tailer_buying_price_currency_code,
|
35
|
-
ETailerSellingPriceNet: e_tailer_selling_price_net,
|
36
|
-
ETailerSellingPriceGross: e_tailer_selling_price_gross,
|
37
|
-
ETailerSellingPriceCurrencyCode: e_tailer_selling_price_currency_code
|
38
|
-
}.select { |_, v| !v.nil? }
|
39
|
-
params[:saleDate] = sale_date.strftime('%FT%T') if sale_date
|
40
|
-
Genba::Util.log_debug "DirectEntitlements activate payload: #{params.inspect}"
|
41
|
-
@client.rest_get_with_token('/directentitlement/activate', params, headers, options)
|
42
|
-
end
|
43
|
-
|
44
|
-
# Use this method to redeem keys already sold for a Direct Entitlement SKU and link them to the
|
45
|
-
# end-user's account. You will not be charged at the point of calling this method.
|
46
|
-
def redeem(sku_id:, key_id:, end_user_id:, end_user_ticket:, headers: {}, options: {})
|
47
|
-
params = {
|
48
|
-
customerAccountId: @client.customer_account_id,
|
49
|
-
skuId: sku_id,
|
50
|
-
keyId: key_id,
|
51
|
-
endUserId: end_user_id,
|
52
|
-
endUserTicket: end_user_ticket
|
53
|
-
}
|
54
|
-
@client.rest_get_with_token('/directentitlement/redeem', params, headers, options)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
data/lib/genba/client/keys.rb
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Genba
|
4
|
-
class Client
|
5
|
-
# Keys client
|
6
|
-
class Keys
|
7
|
-
def initialize(client)
|
8
|
-
@client = client
|
9
|
-
end
|
10
|
-
|
11
|
-
def get_test_keys(sku_id, headers = {})
|
12
|
-
params = {
|
13
|
-
skuId: sku_id
|
14
|
-
}
|
15
|
-
@client.rest_get_with_token('/testKeys', params, headers)
|
16
|
-
end
|
17
|
-
|
18
|
-
def get_keys(sku_id, quantity = 1, params = {}, headers = {}, options: {})
|
19
|
-
payload = params.merge(
|
20
|
-
skuId: sku_id,
|
21
|
-
quantity: quantity,
|
22
|
-
customerAccountId: @client.customer_account_id
|
23
|
-
)
|
24
|
-
@client.rest_get_with_token('/keys', payload, headers, options)
|
25
|
-
end
|
26
|
-
|
27
|
-
def get_key_code_status(key_code, params = {}, headers = {}, options: {})
|
28
|
-
payload = params.merge(
|
29
|
-
keyCode: key_code
|
30
|
-
)
|
31
|
-
@client.rest_get_with_token('/keys', payload, headers, options)
|
32
|
-
end
|
33
|
-
|
34
|
-
def get_key_status(key_id, params = {}, headers = {}, options: {})
|
35
|
-
@client.rest_get_with_token("/keys/#{key_id}", params, headers, options)
|
36
|
-
end
|
37
|
-
|
38
|
-
def get_report_usage(keys = nil, headers = {}, options: {})
|
39
|
-
raise 'ReportUsage keys should be array' unless keys.is_a?(Array)
|
40
|
-
raise 'ReportUseag keys should be a KeyReportRequest class' unless key_report_request?(keys)
|
41
|
-
payload = keys.map(&:to_genba_json_payload)
|
42
|
-
Genba::Util.log_debug "get_report_usage payload: #{payload.inspect}"
|
43
|
-
@client.rest_post_with_token('/keyReport', payload, headers, options)
|
44
|
-
end
|
45
|
-
|
46
|
-
def black_list(keys = nil, headers = {}, options: {})
|
47
|
-
raise 'Blacklist keys should be array' unless keys.is_a?(Array)
|
48
|
-
raise 'Blacklist keys should be a KeyBlackListRequest class' unless key_black_list_request?(keys)
|
49
|
-
|
50
|
-
keys.each do |k|
|
51
|
-
raise k.errors.full_messages.to_s unless k.valid?
|
52
|
-
end
|
53
|
-
|
54
|
-
payload = keys.map(&:to_genba_json_payload)
|
55
|
-
@client.rest_post_with_token('/blackListKeys', payload, headers, options)
|
56
|
-
end
|
57
|
-
|
58
|
-
private
|
59
|
-
|
60
|
-
def key_report_request?(keys)
|
61
|
-
(keys.map { |k| k.is_a?(KeyReportRequest) } & [false]).empty?
|
62
|
-
end
|
63
|
-
|
64
|
-
def key_black_list_request?(keys)
|
65
|
-
(keys.map { |k| k.is_a?(KeyBlackListRequest) } & [false]).empty?
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
data/lib/genba/client/reports.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Genba
|
4
|
-
class Client
|
5
|
-
# Reports client
|
6
|
-
class Reports
|
7
|
-
def initialize(client)
|
8
|
-
@client = client
|
9
|
-
end
|
10
|
-
|
11
|
-
def publisher_raw_data(year = nil, params = {}, headers = {})
|
12
|
-
payload = params.merge({
|
13
|
-
Year: year || Time.now.strftime('%Y')
|
14
|
-
})
|
15
|
-
@client.rest_get_with_token('/report/publisher/rawdata', payload, headers)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Genba
|
4
|
-
class Client
|
5
|
-
# Restrictions client
|
6
|
-
class Restrictions
|
7
|
-
def initialize(client)
|
8
|
-
@client = client
|
9
|
-
end
|
10
|
-
|
11
|
-
def get_restrictions(product_id: nil, country_iso: nil, from_date: nil, params: {}, headers: {})
|
12
|
-
payload = params.merge(
|
13
|
-
productId: product_id,
|
14
|
-
countryISO: country_iso
|
15
|
-
).select { |_, v| !v.nil? }
|
16
|
-
payload[:fromDate] = from_date.strftime('%FT%T') if from_date
|
17
|
-
@client.rest_get_with_token('/restrictions', payload, headers)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# keyBlackListRequest
|
4
|
-
class KeyBlackListRequest
|
5
|
-
include ActiveModel::Validations
|
6
|
-
attr_accessor :key_id, :reason_text
|
7
|
-
|
8
|
-
validates :key_id, presence: true, allow_blank: false
|
9
|
-
validates :reason_text, presence: true, allow_blank: false
|
10
|
-
|
11
|
-
def initialize(key_id, reason_text)
|
12
|
-
@key_id = key_id
|
13
|
-
@reason_text = reason_text
|
14
|
-
end
|
15
|
-
|
16
|
-
def to_genba_json_payload
|
17
|
-
{
|
18
|
-
keyId: @key_id,
|
19
|
-
reasonText: @reason_text
|
20
|
-
}.select { |_, v| !v.nil? }
|
21
|
-
end
|
22
|
-
end
|