muffin_man 1.3.0 → 1.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 82c3118e9e61b82872329714fbfbaf80fd7613ff98ce126992f2ac3b834e3a51
4
- data.tar.gz: 201afe55ba25967d8e519ff5f6a0ac9a66e452462cc4fe805ab2a34b61edec9a
3
+ metadata.gz: 623d2023a06aac6fb6afa8c44477b42cdbdaf80083008234ae1c546aa9605370
4
+ data.tar.gz: 34c9ecfa7100b68554aa5a760eef87cca0f7f08e71f19582b8473b0b9d343e5e
5
5
  SHA512:
6
- metadata.gz: 9411d153ce20efc02882b456a9b6be233cf88e691472d35bbca5b8890fc422395d5a925a66996c129a1a5835883ac66153415043a94e37ad2d9c6e7e3b17baf5
7
- data.tar.gz: 7859bc864e708516ce37087a32791a1fbbae140af2307fbc8d7c530933517e1d914faf704151b7269c290853cfa3a44c741c552a8aadf06bf605cc5ba2745d28
6
+ metadata.gz: 69d1c9e33cd59a40b0d6a90d4f6e1de60b1e54dffad10a9fd464a951962629d9f869d2e8a25984efe08a4fdef1bc4241366e32eb7d10a465af50129690773ccf
7
+ data.tar.gz: cde4c8a95769487da510b0aaff47dad10cbd25ab526f4a62de077e85fca91f7e9ee622b5672e37255ca551428a5594c0c1972e8fcddf8285a240f64c31598e1c
data/.gitignore CHANGED
@@ -14,3 +14,6 @@
14
14
  Gemfile.lock
15
15
  *.gem
16
16
  .ruby-version
17
+ .byebug_history
18
+
19
+ .DS_store
data/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # 1.4.2
2
+
3
+ - Support for getOrders and getOrderItems [#15](https://github.com/patterninc/muffin_man/pull/15)
4
+
5
+ # 1.4.0
6
+
7
+ - 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
 
@@ -0,0 +1,44 @@
1
+ module MuffinMan
2
+ module Orders
3
+ class V0 < SpApiClient
4
+
5
+ GET_ORDERS_PARAMS = %w[
6
+ CreatedAfter
7
+ CreatedBefore
8
+ LastUpdatedAfter
9
+ LastUpdatedBefore
10
+ OrderStatuses
11
+ FulfillmentChannels
12
+ PaymentMethods
13
+ BuyerEmail
14
+ SellerOrderId
15
+ MaxResultsPerPage
16
+ EasyShipShipmentStatuses
17
+ NextToken
18
+ AmazonOrderIds
19
+ ActualFulfillmentSupplySourceId
20
+ IsISPU
21
+ StoreChainStoreId
22
+ ].freeze
23
+
24
+ GET_ORDER_ITEMS_PARAMS = %w[
25
+ NextToken
26
+ ].freeze
27
+
28
+ def get_orders(marketplace_ids, params = {})
29
+ @local_var_path = "/orders/v0/orders"
30
+ @query_params = params.slice(*GET_ORDERS_PARAMS)
31
+ @query_params["MarketplaceIds"] = marketplace_ids
32
+ @request_type = "GET"
33
+ call_api
34
+ end
35
+
36
+ def get_order_items(order_id, params = {})
37
+ @query_params = params.slice(*GET_ORDER_ITEMS_PARAMS)
38
+ @local_var_path = "/orders/v0/orders/#{order_id}/orderItems"
39
+ @request_type = "GET"
40
+ call_api
41
+ end
42
+ end
43
+ end
44
+ end
@@ -73,6 +73,17 @@ module MuffinMan
73
73
  @request_type = "GET"
74
74
  call_api
75
75
  end
76
+
77
+ def get_report_document_body(report_document_id)
78
+ response = get_report_document(report_document_id)
79
+ parsed_response=JSON.parse(response.body)
80
+ report=Net::HTTP.get(URI.parse(parsed_response['url']))
81
+ unless (parsed_response['compressionAlgorithm']).nil?
82
+ input = StringIO.new(report)
83
+ report = Zlib::GzipReader.new(input).read
84
+ end
85
+ report
86
+ end
76
87
  end
77
88
  end
78
89
  end
@@ -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.2"
5
5
  end
data/lib/muffin_man.rb CHANGED
@@ -2,6 +2,7 @@ require "muffin_man/version"
2
2
  require "muffin_man/sp_api_client"
3
3
  require "muffin_man/lwa/auth_helper"
4
4
  require "muffin_man/solicitations/v1"
5
+ require "muffin_man/orders/v0"
5
6
  require "muffin_man/reports/v20210630"
6
7
  require "muffin_man/catalog_items/v20201201"
7
8
  require "muffin_man/finances/v0"
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.2
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-07-13 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
@@ -127,6 +142,7 @@ files:
127
142
  - lib/muffin_man/catalog_items/v20201201.rb
128
143
  - lib/muffin_man/finances/v0.rb
129
144
  - lib/muffin_man/lwa/auth_helper.rb
145
+ - lib/muffin_man/orders/v0.rb
130
146
  - lib/muffin_man/reports/v20210630.rb
131
147
  - lib/muffin_man/solicitations/v1.rb
132
148
  - lib/muffin_man/sp_api_client.rb
@@ -151,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
151
167
  - !ruby/object:Gem::Version
152
168
  version: '0'
153
169
  requirements: []
154
- rubygems_version: 3.1.6
170
+ rubygems_version: 3.2.22
155
171
  signing_key:
156
172
  specification_version: 4
157
173
  summary: Amazon Selling Partner API client