muffin_man 1.3.0 → 1.4.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/.gitignore +1 -0
- data/CHANGELOG.md +3 -0
- data/README.md +6 -3
- data/lib/muffin_man/sp_api_client.rb +11 -5
- data/lib/muffin_man/version.rb +1 -1
- data/muffin_man.gemspec +1 -0
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1034d149292cba5172729ff270ccb038a70c6dcf1b5a9d460add8b7b370f0dea
|
4
|
+
data.tar.gz: 4d99306ee66d36d0df05bcd46e4d71a4af2db29b3a2d5562b37d5634b7722469
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e0faedca6d800deb56277c05103859cbdc2ceaebb80ec811ecab69e49d280913e37ecd09630d35bb95ae291e446b71d054877e4b7a6ca245c59b6797e1988a0
|
7
|
+
data.tar.gz: 34a92f83302a0f1945f1887bbac28e97c2150d734efffcdba648f91fa42aa5ba89e164f1005460694676c100d6ead10eee9177ca1df88055066acb5efb49e204
|
data/.gitignore
CHANGED
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -40,6 +40,7 @@ credentials = {
|
|
40
40
|
aws_secret_access_key: AWS_SECRET_ACCESS_KEY,
|
41
41
|
region: REGION, # This can be one of ['na', 'eu', 'fe'] and defaults to 'na'
|
42
42
|
sts_iam_role_arn: STS_IAM_ROLE_ARN, # Optional
|
43
|
+
access_token_cache_key: SELLING_PARTNER_ID, # Optional if you want access token caching
|
43
44
|
}
|
44
45
|
client = MuffinMan::Solicitations::V1.new(credentials)
|
45
46
|
response = client.create_product_review_and_seller_feedback_solicitation(amazon_order_id, marketplace_ids)
|
@@ -48,6 +49,8 @@ JSON.parse(response.body)
|
|
48
49
|
|
49
50
|
You can optionally use Amazon's sandbox environment by specifying `client = MuffinMan::Solicitations.new(credentials, sandbox = true)`
|
50
51
|
|
52
|
+
### Access Token Caching
|
53
|
+
|
51
54
|
You can save and retrieve the LWA refresh token by defining a lambda in your initializers.
|
52
55
|
|
53
56
|
For example, if you are using Redis as your cache you could define:
|
@@ -55,11 +58,11 @@ For example, if you are using Redis as your cache you could define:
|
|
55
58
|
```ruby
|
56
59
|
@@redis = Redis.new
|
57
60
|
MuffinMan.configure do |config|
|
58
|
-
config.save_access_token = -> (
|
59
|
-
@@redis.set("SP-TOKEN-#{
|
61
|
+
config.save_access_token = -> (access_token_cache_key, token) do
|
62
|
+
@@redis.set("SP-TOKEN-#{access_token_cache_key}", token['access_token'], ex: token['expires_in'])
|
60
63
|
end
|
61
64
|
|
62
|
-
config.get_access_token = -> (
|
65
|
+
config.get_access_token = -> (access_token_cache_key) { @@redis.get("SP-TOKEN-#{access_token_cache_key}") }
|
63
66
|
end
|
64
67
|
```
|
65
68
|
|
@@ -7,8 +7,9 @@ require "securerandom"
|
|
7
7
|
module MuffinMan
|
8
8
|
class SpApiClient
|
9
9
|
attr_reader :refresh_token, :client_id, :client_secret, :aws_access_key_id,
|
10
|
-
:aws_secret_access_key, :sts_iam_role_arn, :sandbox, :config,
|
11
|
-
:
|
10
|
+
:aws_secret_access_key, :sts_iam_role_arn, :sandbox, :config,
|
11
|
+
:region, :request_type, :local_var_path, :query_params,
|
12
|
+
:request_body, :scope, :access_token_cache_key
|
12
13
|
|
13
14
|
ACCESS_TOKEN_URL = "https://api.amazon.com/auth/o2/token".freeze
|
14
15
|
SERVICE_NAME = "execute-api".freeze
|
@@ -27,6 +28,7 @@ module MuffinMan
|
|
27
28
|
@sts_iam_role_arn = credentials[:sts_iam_role_arn]
|
28
29
|
@region = credentials[:region] || "na"
|
29
30
|
@scope = credentials[:scope]
|
31
|
+
@access_token_cache_key = credentials[:access_token_cache_key]
|
30
32
|
@sandbox = sandbox
|
31
33
|
Typhoeus::Config.user_agent = ""
|
32
34
|
@config = MuffinMan.configuration
|
@@ -63,18 +65,22 @@ module MuffinMan
|
|
63
65
|
end
|
64
66
|
|
65
67
|
def retrieve_lwa_access_token
|
66
|
-
return request_lwa_access_token["access_token"] unless
|
68
|
+
return request_lwa_access_token["access_token"] unless use_cache?
|
67
69
|
|
68
|
-
stored_token = config.get_access_token.call(
|
70
|
+
stored_token = config.get_access_token.call(access_token_cache_key)
|
69
71
|
if stored_token.nil?
|
70
72
|
new_token = request_lwa_access_token
|
71
|
-
config.save_access_token.call(
|
73
|
+
config.save_access_token.call(access_token_cache_key, new_token)
|
72
74
|
new_token["access_token"]
|
73
75
|
else
|
74
76
|
stored_token
|
75
77
|
end
|
76
78
|
end
|
77
79
|
|
80
|
+
def use_cache?
|
81
|
+
defined?(config.save_access_token) && defined?(config.get_access_token) && access_token_cache_key
|
82
|
+
end
|
83
|
+
|
78
84
|
def request_lwa_access_token
|
79
85
|
body = {
|
80
86
|
grant_type: "refresh_token",
|
data/lib/muffin_man/version.rb
CHANGED
data/muffin_man.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency "rspec", "~> 3.2"
|
22
22
|
spec.add_development_dependency 'webmock', '~> 2.1'
|
23
|
+
spec.add_development_dependency 'byebug'
|
23
24
|
spec.add_development_dependency 'mock_redis', '>=0.14'
|
24
25
|
spec.add_runtime_dependency 'typhoeus', '~> 1.0', '>= 1.0.1'
|
25
26
|
spec.add_runtime_dependency 'aws-sigv4', '>= 1.1'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: muffin_man
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gavin
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-05-
|
13
|
+
date: 2022-05-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
@@ -40,6 +40,20 @@ dependencies:
|
|
40
40
|
- - "~>"
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: '2.1'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: byebug
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
type: :development
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
43
57
|
- !ruby/object:Gem::Dependency
|
44
58
|
name: mock_redis
|
45
59
|
requirement: !ruby/object:Gem::Requirement
|
@@ -115,6 +129,7 @@ files:
|
|
115
129
|
- ".gitignore"
|
116
130
|
- ".rspec"
|
117
131
|
- ".rubocop.yml"
|
132
|
+
- CHANGELOG.md
|
118
133
|
- CODE_OF_CONDUCT.md
|
119
134
|
- Gemfile
|
120
135
|
- LICENSE.txt
|
@@ -151,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
151
166
|
- !ruby/object:Gem::Version
|
152
167
|
version: '0'
|
153
168
|
requirements: []
|
154
|
-
rubygems_version: 3.
|
169
|
+
rubygems_version: 3.2.22
|
155
170
|
signing_key:
|
156
171
|
specification_version: 4
|
157
172
|
summary: Amazon Selling Partner API client
|