amazon-drs 0.0.1 → 0.0.2
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 +4 -0
- data/Rakefile +9 -2
- data/amazon-drs.gemspec +2 -0
- data/lib/amazon-drs/access_token.rb +15 -0
- data/lib/amazon-drs/base.rb +40 -0
- data/lib/amazon-drs/client.rb +52 -19
- data/lib/amazon-drs/deregistrate_device.rb +6 -0
- data/lib/amazon-drs/device_status.rb +7 -0
- data/lib/amazon-drs/error.rb +15 -0
- data/lib/amazon-drs/replenish.rb +20 -0
- data/lib/amazon-drs/slot_status.rb +7 -0
- data/lib/amazon-drs/subscription_info.rb +17 -0
- data/lib/amazon-drs/version.rb +1 -1
- metadata +39 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f6dddd1e7901f7b68d205c6c434eaf426b3bd4c1
|
4
|
+
data.tar.gz: df15a2b0f9de225a50e87dd1e84833d97862c4b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6372c95d4bbc790017082fffbb0fb722ec9a37aaa1268085634dde811310e8b77240a5002840286426797566ad7e6fbf1da4412633a9beffed1b00eb1f24f203
|
7
|
+
data.tar.gz: b7e54e17b3f5ee8cd6f5928fc9987c54ecff4ad47e1030dcdddf97917fc4e994625afb1c20f73ece70bc70e8e767299c769e9b083399eccf0eb2a129e585c14e
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
2
3
|
|
3
|
-
|
4
|
+
Rake::TestTask.new(:test) do |t|
|
5
|
+
t.libs << 'test'
|
6
|
+
t.libs << 'lib'
|
7
|
+
t.test_files = Dir[ 'test/**/*_test.rb' ]
|
8
|
+
end
|
9
|
+
|
10
|
+
task :default => :test
|
data/amazon-drs.gemspec
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'amazon-drs/base'
|
2
|
+
|
3
|
+
module AmazonDrs
|
4
|
+
class AccessToken < Base
|
5
|
+
attr_accessor :access_token, :refresh_token, :token_type, :expires_in
|
6
|
+
|
7
|
+
def parse_body(body)
|
8
|
+
json = JSON.parse(body)
|
9
|
+
@access_token = json['access_token']
|
10
|
+
@refresh_token = json['refresh_token']
|
11
|
+
@token_type = json['token_type']
|
12
|
+
@expires_in = json['expires_in']
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
3
|
+
module AmazonDrs
|
4
|
+
class Base
|
5
|
+
attr_accessor :status_code, :request_id, :date, :error_type, :error_description_url
|
6
|
+
|
7
|
+
def initialize(response)
|
8
|
+
@response = response
|
9
|
+
@status_code = response.code.to_i
|
10
|
+
parse_header(response.header)
|
11
|
+
parse_body(response.body)
|
12
|
+
end
|
13
|
+
|
14
|
+
def parse_header(headers)
|
15
|
+
headers.each do |key, value|
|
16
|
+
case key.downcase
|
17
|
+
when 'x-amzn-errortype'
|
18
|
+
# Value examples:
|
19
|
+
# InvalidTokenException:http://internal.amazon.com/coral/com.amazon.parkeraccioservice/
|
20
|
+
# OA2InvalidRequestException:http://internal.amazon.com/coral/com.amazon.panda/
|
21
|
+
@error_type, @error_description_url = value.split(':', 2)
|
22
|
+
when 'x-amzn-requestid'
|
23
|
+
# Example:
|
24
|
+
# X-Amzn-Requestid: d296d296-d1d1-1111-8c8c-0b43820b4382
|
25
|
+
@request_id = value
|
26
|
+
when 'x-amz-date'
|
27
|
+
# Example:
|
28
|
+
# X-Amz-Date: Mon, 02 Jan 2017 22:35:53 GMT
|
29
|
+
@date = Time.rfc2822(value)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
private :parse_header
|
34
|
+
|
35
|
+
def parse_body(body)
|
36
|
+
# abstract
|
37
|
+
end
|
38
|
+
private :parse_body
|
39
|
+
end
|
40
|
+
end
|
data/lib/amazon-drs/client.rb
CHANGED
@@ -4,9 +4,15 @@ require 'json'
|
|
4
4
|
require 'yaml'
|
5
5
|
require 'time'
|
6
6
|
require 'date'
|
7
|
+
require 'amazon-drs/deregistrate_device'
|
8
|
+
require 'amazon-drs/subscription_info'
|
9
|
+
require 'amazon-drs/replenish'
|
10
|
+
require 'amazon-drs/error'
|
11
|
+
require 'amazon-drs/slot_status'
|
12
|
+
require 'amazon-drs/access_token'
|
7
13
|
|
8
14
|
class Net::HTTPResponse
|
9
|
-
|
15
|
+
attr_accessor :json
|
10
16
|
end
|
11
17
|
|
12
18
|
module AmazonDrs
|
@@ -40,7 +46,12 @@ module AmazonDrs
|
|
40
46
|
'x-amzn-type-version': 'com.amazon.dash.replenishment.DrsDeregisterInput@1.0'
|
41
47
|
}
|
42
48
|
path = "/deviceModels/#{@device_model}/devices/#{@serial}/registration"
|
43
|
-
request_drs(:delete, path, headers: headers)
|
49
|
+
response = request_drs(:delete, path, headers: headers)
|
50
|
+
if response.code == '200'
|
51
|
+
::AmazonDrs::DeregistrateDevice.new(response)
|
52
|
+
else
|
53
|
+
::AmazonDrs::Error.new(response)
|
54
|
+
end
|
44
55
|
end
|
45
56
|
|
46
57
|
def device_status(most_recently_active_date)
|
@@ -50,6 +61,11 @@ module AmazonDrs
|
|
50
61
|
}
|
51
62
|
path = '/deviceStatus'
|
52
63
|
request_drs(:post, path, headers: headers, params: { 'mostRecentlyActiveDate' => convert_to_iso8601(most_recently_active_date) })
|
64
|
+
if response.code == '200'
|
65
|
+
::AmazonDrs::DeviceStatus.new(response)
|
66
|
+
else
|
67
|
+
::AmazonDrs::Error.new(response)
|
68
|
+
end
|
53
69
|
end
|
54
70
|
|
55
71
|
def subscription_info
|
@@ -58,7 +74,12 @@ module AmazonDrs
|
|
58
74
|
'x-amzn-type-version': 'com.amazon.dash.replenishment.DrsSubscriptionInfoInput@1.0'
|
59
75
|
}
|
60
76
|
path = '/subscriptionInfo'
|
61
|
-
request_drs(:get, path, headers: headers)
|
77
|
+
response = request_drs(:get, path, headers: headers)
|
78
|
+
if response.code == '200'
|
79
|
+
::AmazonDrs::SubscriptionInfo.new(response)
|
80
|
+
else
|
81
|
+
::AmazonDrs::Error.new(response)
|
82
|
+
end
|
62
83
|
end
|
63
84
|
|
64
85
|
def slot_status(slot_id, expected_replenishment_date, remaining_quantity_in_unit, original_quantity_in_unit, total_quantity_on_hand, last_use_date)
|
@@ -74,7 +95,12 @@ module AmazonDrs
|
|
74
95
|
'totalQuantityOnHand' => total_quantity_on_hand,
|
75
96
|
'lastUseDate' => convert_to_iso8601(last_use_date)
|
76
97
|
}
|
77
|
-
request_drs(:post, path, headers: headers, params: params)
|
98
|
+
response = request_drs(:post, path, headers: headers, params: params)
|
99
|
+
if response.code == '200'
|
100
|
+
::AmazonDrs::SlotStatus.new(response)
|
101
|
+
else
|
102
|
+
::AmazonDrs::Error.new(response)
|
103
|
+
end
|
78
104
|
end
|
79
105
|
|
80
106
|
def replenish(slot_id)
|
@@ -84,12 +110,11 @@ module AmazonDrs
|
|
84
110
|
}
|
85
111
|
path = "/replenish/#{slot_id}"
|
86
112
|
response = request_drs(:post, path, headers: headers)
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
# {"detailCode":"ORDER_INPROGRESS","eventInstanceId":"amzn1.dash.v2.o.xxxxxx......"}
|
113
|
+
if response.code == '200'
|
114
|
+
::AmazonDrs::Replenish.new(response)
|
115
|
+
else
|
116
|
+
::AmazonDrs::Error.new(response)
|
117
|
+
end
|
93
118
|
end
|
94
119
|
|
95
120
|
def get_token
|
@@ -98,11 +123,10 @@ module AmazonDrs
|
|
98
123
|
else
|
99
124
|
resp = request_token
|
100
125
|
process_token_response(resp)
|
126
|
+
resp
|
101
127
|
end
|
102
128
|
end
|
103
129
|
|
104
|
-
private
|
105
|
-
|
106
130
|
def convert_to_iso8601(input)
|
107
131
|
case input
|
108
132
|
when Date, Time
|
@@ -113,19 +137,19 @@ module AmazonDrs
|
|
113
137
|
input.to_s
|
114
138
|
end
|
115
139
|
end
|
140
|
+
private :convert_to_iso8601
|
116
141
|
|
117
142
|
def process_token_response(resp)
|
118
|
-
if resp.
|
119
|
-
puts resp.json['error']
|
120
|
-
puts resp.json['error_description']
|
143
|
+
if resp.kind_of?(AmazonDrs::Error)
|
121
144
|
nil
|
122
145
|
else
|
123
|
-
@access_token = resp.
|
124
|
-
@refresh_token = resp.
|
146
|
+
@access_token = resp.access_token
|
147
|
+
@refresh_token = resp.refresh_token
|
125
148
|
@on_new_token.call(@access_token, @refresh_token) if @on_new_token
|
126
149
|
@access_token
|
127
150
|
end
|
128
151
|
end
|
152
|
+
private :process_token_response
|
129
153
|
|
130
154
|
def request_drs(method, path, headers: {}, params: {})
|
131
155
|
url = "https://#{@drs_host}#{path}"
|
@@ -134,7 +158,7 @@ module AmazonDrs
|
|
134
158
|
end
|
135
159
|
if @access_token.nil?
|
136
160
|
token = get_token
|
137
|
-
if
|
161
|
+
if resp.kind_of?(AmazonDrs::Error)
|
138
162
|
raise 'Failed to get token'
|
139
163
|
end
|
140
164
|
end
|
@@ -147,6 +171,7 @@ module AmazonDrs
|
|
147
171
|
resp
|
148
172
|
end
|
149
173
|
end
|
174
|
+
private :request_drs
|
150
175
|
|
151
176
|
def refresh_access_token
|
152
177
|
params = {
|
@@ -158,6 +183,7 @@ module AmazonDrs
|
|
158
183
|
@access_token = nil
|
159
184
|
request(:post, "https://#{@amazon_host}/auth/o2/token", params: params)
|
160
185
|
end
|
186
|
+
private :refresh_access_token
|
161
187
|
|
162
188
|
def request_token
|
163
189
|
params = {
|
@@ -167,8 +193,14 @@ module AmazonDrs
|
|
167
193
|
client_secret: @client_secret,
|
168
194
|
redirect_uri: @redirect_uri
|
169
195
|
}
|
170
|
-
request(:post, "https://#{@amazon_host}/auth/o2/token", params: params)
|
196
|
+
response = request(:post, "https://#{@amazon_host}/auth/o2/token", params: params)
|
197
|
+
if response.code == '200'
|
198
|
+
::AmazonDrs::AccessToken.new(response)
|
199
|
+
else
|
200
|
+
::AmazonDrs::Error.new(response)
|
201
|
+
end
|
171
202
|
end
|
203
|
+
private :request_token
|
172
204
|
|
173
205
|
def request(method, url, headers: {}, params: {})
|
174
206
|
uri = URI.parse(url)
|
@@ -210,5 +242,6 @@ module AmazonDrs
|
|
210
242
|
response.json = JSON.parse(response.body)
|
211
243
|
response
|
212
244
|
end
|
245
|
+
private :request
|
213
246
|
end
|
214
247
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'amazon-drs/base'
|
2
|
+
|
3
|
+
module AmazonDrs
|
4
|
+
class Error < Base
|
5
|
+
attr_accessor :message, :error_description, :error
|
6
|
+
|
7
|
+
def parse_body(body)
|
8
|
+
json = JSON.parse(body)
|
9
|
+
@message = json['message'] if json['message']
|
10
|
+
@error = json['error'] if json['error']
|
11
|
+
@error_description = json['error_description'] if json['error_description']
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'amazon-drs/base'
|
2
|
+
|
3
|
+
module AmazonDrs
|
4
|
+
class Replenish < Base
|
5
|
+
attr_accessor :event_instance_id, :detail_code, :message
|
6
|
+
|
7
|
+
def parse_body(body)
|
8
|
+
json = JSON.parse(body)
|
9
|
+
@event_instance_id = json['eventInstanceId'] if json['eventInstanceId']
|
10
|
+
if json['detailCode']
|
11
|
+
# STANDARD_ORDER_PLACED, TEST_ORDER_PLACED or ORDER_INPROGRESS
|
12
|
+
@detail_code = json['detailCode']
|
13
|
+
else
|
14
|
+
@detail_code = 'ERROR'
|
15
|
+
end
|
16
|
+
@message = json['message'] if json['message']
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'amazon-drs/base'
|
3
|
+
|
4
|
+
module AmazonDrs
|
5
|
+
class SubscriptionInfo < Base
|
6
|
+
attr_accessor :slots
|
7
|
+
|
8
|
+
def parse_body(body)
|
9
|
+
json = JSON.parse(body)
|
10
|
+
@slots = {}
|
11
|
+
json['slotsSubscriptionStatus'].each_pair do |slot_id, available|
|
12
|
+
@slots[slot_id] = available
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
data/lib/amazon-drs/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: amazon-drs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code Ass
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,34 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '12.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: test-unit
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: webmock
|
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'
|
41
69
|
description: |-
|
42
70
|
amazon-drs is for Amazon Dash Replenishment Service.
|
43
71
|
You can use this after authorized by Login with Amazon.
|
@@ -58,7 +86,15 @@ files:
|
|
58
86
|
- bin/setup
|
59
87
|
- data/client
|
60
88
|
- lib/amazon-drs.rb
|
89
|
+
- lib/amazon-drs/access_token.rb
|
90
|
+
- lib/amazon-drs/base.rb
|
61
91
|
- lib/amazon-drs/client.rb
|
92
|
+
- lib/amazon-drs/deregistrate_device.rb
|
93
|
+
- lib/amazon-drs/device_status.rb
|
94
|
+
- lib/amazon-drs/error.rb
|
95
|
+
- lib/amazon-drs/replenish.rb
|
96
|
+
- lib/amazon-drs/slot_status.rb
|
97
|
+
- lib/amazon-drs/subscription_info.rb
|
62
98
|
- lib/amazon-drs/version.rb
|
63
99
|
homepage: https://github.com/aycabta/amazon-drs
|
64
100
|
licenses:
|
@@ -80,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
80
116
|
version: '0'
|
81
117
|
requirements: []
|
82
118
|
rubyforge_project:
|
83
|
-
rubygems_version: 2.
|
119
|
+
rubygems_version: 2.6.8
|
84
120
|
signing_key:
|
85
121
|
specification_version: 4
|
86
122
|
summary: amazon-drs is for Amazon Dash Replenishment Service
|