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 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