muffin_man 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 82c3118e9e61b82872329714fbfbaf80fd7613ff98ce126992f2ac3b834e3a51
4
- data.tar.gz: 201afe55ba25967d8e519ff5f6a0ac9a66e452462cc4fe805ab2a34b61edec9a
3
+ metadata.gz: 1034d149292cba5172729ff270ccb038a70c6dcf1b5a9d460add8b7b370f0dea
4
+ data.tar.gz: 4d99306ee66d36d0df05bcd46e4d71a4af2db29b3a2d5562b37d5634b7722469
5
5
  SHA512:
6
- metadata.gz: 9411d153ce20efc02882b456a9b6be233cf88e691472d35bbca5b8890fc422395d5a925a66996c129a1a5835883ac66153415043a94e37ad2d9c6e7e3b17baf5
7
- data.tar.gz: 7859bc864e708516ce37087a32791a1fbbae140af2307fbc8d7c530933517e1d914faf704151b7269c290853cfa3a44c741c552a8aadf06bf605cc5ba2745d28
6
+ metadata.gz: 9e0faedca6d800deb56277c05103859cbdc2ceaebb80ec811ecab69e49d280913e37ecd09630d35bb95ae291e446b71d054877e4b7a6ca245c59b6797e1988a0
7
+ data.tar.gz: 34a92f83302a0f1945f1887bbac28e97c2150d734efffcdba648f91fa42aa5ba89e164f1005460694676c100d6ead10eee9177ca1df88055066acb5efb49e204
data/.gitignore CHANGED
@@ -14,3 +14,4 @@
14
14
  Gemfile.lock
15
15
  *.gem
16
16
  .ruby-version
17
+ .byebug_history
data/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ # 1.4.0
2
+
3
+ - Pass cache key to client for caching access tokens [#11](https://github.com/patterninc/muffin_man/pull/11)
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 = -> (client_id, token) do
59
- @@redis.set("SP-TOKEN-#{client_id}", token['access_token'], ex: token['expires_in'])
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 = -> (client_id) { @@redis.get("SP-TOKEN-#{client_id}") }
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, :region, :request_type,
11
- :local_var_path, :query_params, :request_body, :scope
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 defined?(config.get_access_token)
68
+ return request_lwa_access_token["access_token"] unless use_cache?
67
69
 
68
- stored_token = config.get_access_token.call(client_id)
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(client_id, new_token) if defined?(config.save_access_token)
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",
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MuffinMan
4
- VERSION = "1.3.0"
4
+ VERSION = "1.4.0"
5
5
  end
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.3.0
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-02 00:00:00.000000000 Z
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.1.6
169
+ rubygems_version: 3.2.22
155
170
  signing_key:
156
171
  specification_version: 4
157
172
  summary: Amazon Selling Partner API client