muffin_man 0.1.2 → 1.0.1

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: 8f18fd5109212925756a27afa10bd66cd33493860a8c3d1d9e7565ca2ac0a294
4
- data.tar.gz: 1e4eeb3004243811046dcaacea118daf0f10604378cf9b1ce7553ed50eb67fdd
3
+ metadata.gz: 2c05b9446eca38f29264b956804bdd8bc7b78e094a85c36f9799b243a2a1c018
4
+ data.tar.gz: d6e386b407afe2c7db044c0d55cad7b96c16448eef8f566e8583cd5ab84674bb
5
5
  SHA512:
6
- metadata.gz: 6a034e306a305b3fd2a0595a6db3725eaf930b16c0f77cada17a66e54483b3bccc1a507eeeba76bc61c56e93c0bed871f538a9cca0c9bdb018c55afb36b57a5a
7
- data.tar.gz: 3efd04fedeefe8c526fafd321c3f4e86908805f725684da30c3644b0ba74af7a8d7218cc6771154adf90393ad6cc8130faf4ad17862f5a53d96b278d0b36e9ce
6
+ metadata.gz: 0bf83ece55c5cf56af2ee640f0139e227c4ea79d82fbdc8d7040cbe821b7de073f04b5238b72cba6816b266fb9ef0c1baa7771127860c852e0aa5cd9ca7b959d
7
+ data.tar.gz: 879e3fad3e614f111db09318e5f24ddb0af3110648fe2f3049f3c621de6eb3a53539b54387a986968349c19b011a4ee7cd45ba53bb139debdb956efe5b023374
@@ -0,0 +1,32 @@
1
+ name: Ruby CI
2
+
3
+ # Controls when the workflow will run
4
+ on:
5
+ # Triggers the workflow on push or pull request events but only for the master branch
6
+ push:
7
+ branches:
8
+ - 'master'
9
+ pull_request:
10
+ branches:
11
+ - 'master'
12
+
13
+ jobs:
14
+ ci-build:
15
+ runs-on: ubuntu-latest
16
+
17
+ strategy:
18
+ matrix:
19
+ ruby-version: [2.7, 2.6, 2.5]
20
+
21
+ # Check-out repo
22
+ steps:
23
+ - name: Checkout
24
+ uses: actions/checkout@v2
25
+ - name: Set up Ruby ${{ matrix.ruby-version }}
26
+ uses: ruby/setup-ruby@v1
27
+ with:
28
+ ruby-version: ${{ matrix.ruby-version }}
29
+ - name: Install dependencies
30
+ run: bundle install
31
+ - name: Run RSpec
32
+ run: bundle exec rspec
data/.gitignore CHANGED
@@ -9,5 +9,8 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+
12
13
  .env
13
14
  Gemfile.lock
15
+ *.gem
16
+ .ruby-version
data/.rubocop.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.4
2
+ TargetRubyVersion: 2.5
3
3
 
4
4
  Style/StringLiterals:
5
5
  Enabled: true
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2021 Gavin
3
+ Copyright (c) 2022 Pattern Inc.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,8 +1,14 @@
1
1
  # MuffinMan
2
2
 
3
+ ![Ruby CI](https://github.com/patterninc/muffin_man/actions/workflows/ci.yml/badge.svg)
4
+
3
5
  MuffinMan is a ruby interface to the Amazon Selling Partner API. For more information on registering to use the Selling Partner API, see [Amazon's documentation](https://github.com/amzn/selling-partner-api-docs/blob/main/guides/developer-guide/SellingPartnerApiDeveloperGuide.md)
4
6
 
5
- As of now, this gem only supports the `create_product_review_and_seller_feedback_solicitation` model, likely with more to come.
7
+ As of now, this gem only supports portions of the following APIs with more to come:
8
+
9
+ - `create_product_review_and_seller_feedback_solicitation`
10
+ - `catalog_items`
11
+ - `reports`
6
12
 
7
13
  ## Installation
8
14
 
@@ -35,8 +41,8 @@ credentials = {
35
41
  region: REGION, # This can be one of ['na', 'eu', 'fe'] and defaults to 'na'
36
42
  sts_iam_role_arn: STS_IAM_ROLE_ARN, # Optional
37
43
  }
38
- client = MuffinMan::Solicitations.new(credentials)
39
- response = client.create_product_review_and_seller_feedback_solicitation(amazon_order_id, marketplace_ids, region)
44
+ client = MuffinMan::Solicitations::V1.new(credentials)
45
+ response = client.create_product_review_and_seller_feedback_solicitation(amazon_order_id, marketplace_ids)
40
46
  JSON.parse(response.body)
41
47
  ```
42
48
 
@@ -0,0 +1,56 @@
1
+ module MuffinMan
2
+ module CatalogItems
3
+ class V20201201 < SpApiClient
4
+ SANDBOX_KEYWORDS = "shoes".freeze
5
+ SANDBOX_ASIN = "B07N4M94X4".freeze
6
+ SANDBOX_MARKETPLACE_IDS = "ATVPDKIKX0DER".freeze
7
+ attr_reader :keywords, :asin, :marketplace_ids, :params
8
+
9
+ SEARCH_CATALOG_ITEMS_PARAMS = %w[
10
+ includedData
11
+ brandNames
12
+ classificationIds
13
+ pageSize
14
+ pageToken
15
+ keywordsLocale
16
+ locale
17
+ ].freeze
18
+ GET_CATALOG_ITEM_PARAMS = %w[includedData locale].freeze
19
+
20
+ def search_catalog_items(keywords, marketplace_ids, params = {})
21
+ if sandbox
22
+ keywords = SANDBOX_KEYWORDS
23
+ marketplace_ids = SANDBOX_MARKETPLACE_IDS
24
+ params = {}
25
+ end
26
+ @keywords = keywords.is_a?(Array) ? keywords : [keywords]
27
+ @marketplace_ids = marketplace_ids.is_a?(Array) ? marketplace_ids : [marketplace_ids]
28
+ @params = params
29
+ @local_var_path = "/catalog/2020-12-01/items"
30
+ @query_params = {
31
+ "keywords" => @keywords.join(","),
32
+ "marketplaceIds" => @marketplace_ids.join(",")
33
+ }
34
+ @query_params.merge!(@params.slice(*SEARCH_CATALOG_ITEMS_PARAMS))
35
+ @request_type = "GET"
36
+ call_api
37
+ end
38
+
39
+ def get_catalog_item(asin, marketplace_ids, params = {})
40
+ if sandbox
41
+ asin = SANDBOX_ASIN
42
+ marketplace_ids = SANDBOX_MARKETPLACE_IDS
43
+ params = {}
44
+ end
45
+ @asin = asin
46
+ @marketplace_ids = marketplace_ids.is_a?(Array) ? marketplace_ids : [marketplace_ids]
47
+ @params = params
48
+ @local_var_path = "/catalog/2020-12-01/items/#{@asin}"
49
+ @query_params = { "marketplaceIds" => @marketplace_ids.join(",") }
50
+ @query_params.merge!(@params.slice(*GET_CATALOG_ITEM_PARAMS))
51
+ @request_type = "GET"
52
+ call_api
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,29 @@
1
+ module MuffinMan
2
+ module Reports
3
+ class V20210630 < SpApiClient
4
+ SANDBOX_REPORT_TYPE = "GET_MERCHANT_LISTINGS_ALL_DATA"
5
+ SANDBOX_START_TIME = "2019-12-10T20:11:24.000Z"
6
+ SANDBOX_MARKETPLACE_IDS = [
7
+ "A1PA6795UKMFR9",
8
+ "ATVPDKIKX0DER"
9
+ ]
10
+
11
+ def create_report(report_type, marketplace_ids, start_time = nil, end_time = nil, report_options = {})
12
+ report_type = sandbox ? SANDBOX_REPORT_TYPE : report_type
13
+ marketplace_ids = sandbox ? SANDBOX_MARKETPLACE_IDS : marketplace_ids
14
+ start_time = sandbox ? SANDBOX_START_TIME : start_time
15
+
16
+ @local_var_path = "/reports/2021-06-30/reports"
17
+ @request_body = {
18
+ "reportType" => report_type,
19
+ "marketplaceIds" => marketplace_ids,
20
+ }
21
+ @request_body["dataStartTime"] = start_time unless start_time.nil?
22
+ @request_body["dataEndTime"] = end_time unless end_time.nil?
23
+ @request_body["reportOptions"] = report_options unless report_options.empty?
24
+ @request_type = 'POST'
25
+ call_api
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,21 @@
1
+ module MuffinMan
2
+ module Solicitations
3
+ class V1 < SpApiClient
4
+ SANDBOX_AMAZON_ORDER_ID = "123-1234567-1234567"
5
+ SANDBOX_MARKETPLACE_IDS = "ATVPDKIKX0DER"
6
+ attr_reader :amazon_order_id, :marketplace_ids
7
+
8
+ # Sends a solicitation to a buyer asking for seller feedback and a product review for the specified order. Send only one productReviewAndSellerFeedback or free form proactive message per order. **Usage Plan:** | Rate (requests per second) | Burst | | ---- | ---- | | 1 | 5 | For more information, see \"Usage Plans and Rate Limits\" in the Selling Partner API documentation.
9
+ # @param amazon_order_id An Amazon order identifier. This specifies the order for which a solicitation is sent.
10
+ # @param marketplace_ids A marketplace identifier. This specifies the marketplace in which the order was placed. Only one marketplace can be specified.
11
+ def create_product_review_and_seller_feedback_solicitation(amazon_order_id, marketplace_ids)
12
+ @amazon_order_id = sandbox ? SANDBOX_AMAZON_ORDER_ID : amazon_order_id
13
+ @marketplace_ids = sandbox ? SANDBOX_MARKETPLACE_IDS : marketplace_ids
14
+ @local_var_path = '/solicitations/v1/orders/{amazonOrderId}/solicitations/productReviewAndSellerFeedback'.sub('{' + 'amazonOrderId' + '}', @amazon_order_id)
15
+ @query_params = { "marketplaceIds" => @marketplace_ids }
16
+ @request_type = 'POST'
17
+ call_api
18
+ end
19
+ end
20
+ end
21
+ end
@@ -7,7 +7,8 @@ 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
10
+ :aws_secret_access_key, :sts_iam_role_arn, :sandbox, :config, :region, :request_type,
11
+ :local_var_path, :query_params, :request_body
11
12
  ACCESS_TOKEN_URL = 'https://api.amazon.com/auth/o2/token'.freeze
12
13
  SERVICE_NAME = 'execute-api'.freeze
13
14
  AWS_REGION_MAP = {
@@ -32,7 +33,15 @@ module MuffinMan
32
33
  private
33
34
 
34
35
  def call_api
35
- Typhoeus.send(request_type.downcase.to_sym, request.url, headers: headers)
36
+ Typhoeus.send(request_type.downcase.to_sym, request.url, request_opts)
37
+ end
38
+
39
+ def request_opts
40
+ opts = { headers: headers }
41
+ if request_body
42
+ opts[:body] = request_body.to_json
43
+ end
44
+ opts
36
45
  end
37
46
 
38
47
  def sp_api_host
@@ -107,7 +116,7 @@ module MuffinMan
107
116
  request_config[:credentials_provider] = request_sts_token
108
117
  end
109
118
  signer = Aws::Sigv4::Signer.new(request_config)
110
- signer.sign_request(http_method: request_type, url: request.url)
119
+ signer.sign_request(http_method: request_type, url: request.url, body: request_body&.to_json)
111
120
  end
112
121
 
113
122
  def headers
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MuffinMan
4
- VERSION = "0.1.2"
4
+ VERSION = "1.0.1"
5
5
  end
data/lib/muffin_man.rb CHANGED
@@ -1,6 +1,8 @@
1
- require_relative "muffin_man/version"
1
+ require "muffin_man/version"
2
2
  require "muffin_man/sp_api_client"
3
- require "muffin_man/solicitations"
3
+ require "muffin_man/solicitations/v1"
4
+ require "muffin_man/reports/v20210630"
5
+ require "muffin_man/catalog_items/v20201201"
4
6
 
5
7
  module MuffinMan
6
8
  class Error < StandardError; end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: muffin_man
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gavin
8
8
  - Jason
9
9
  - Nate
10
- autorequire:
10
+ autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2021-01-20 00:00:00.000000000 Z
13
+ date: 2022-02-01 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
@@ -102,7 +102,7 @@ dependencies:
102
102
  - - ">="
103
103
  - !ruby/object:Gem::Version
104
104
  version: 2.4.4
105
- description:
105
+ description:
106
106
  email:
107
107
  - gavin@pattern.com
108
108
  - jason@pattern.com
@@ -111,7 +111,7 @@ executables: []
111
111
  extensions: []
112
112
  extra_rdoc_files: []
113
113
  files:
114
- - ".circleci/config.yml"
114
+ - ".github/workflows/ci.yml"
115
115
  - ".gitignore"
116
116
  - ".rspec"
117
117
  - ".rubocop.yml"
@@ -123,7 +123,9 @@ files:
123
123
  - bin/console
124
124
  - bin/setup
125
125
  - lib/muffin_man.rb
126
- - lib/muffin_man/solicitations.rb
126
+ - lib/muffin_man/catalog_items/v20201201.rb
127
+ - lib/muffin_man/reports/v20210630.rb
128
+ - lib/muffin_man/solicitations/v1.rb
127
129
  - lib/muffin_man/sp_api_client.rb
128
130
  - lib/muffin_man/version.rb
129
131
  - muffin_man.gemspec
@@ -131,7 +133,7 @@ homepage: https://github.com/patterninc/muffin_man
131
133
  licenses:
132
134
  - MIT
133
135
  metadata: {}
134
- post_install_message:
136
+ post_install_message:
135
137
  rdoc_options: []
136
138
  require_paths:
137
139
  - lib
@@ -146,8 +148,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
148
  - !ruby/object:Gem::Version
147
149
  version: '0'
148
150
  requirements: []
149
- rubygems_version: 3.0.3
150
- signing_key:
151
+ rubygems_version: 3.1.6
152
+ signing_key:
151
153
  specification_version: 4
152
154
  summary: Amazon Selling Partner API client
153
155
  test_files: []
data/.circleci/config.yml DELETED
@@ -1,13 +0,0 @@
1
- version: 2.1
2
- jobs:
3
- build:
4
- docker:
5
- - image: ruby:2.6.3
6
- steps:
7
- - checkout
8
- - run:
9
- name: Run the default task
10
- command: |
11
- gem install bundler -v 2.2.5
12
- bundle install
13
- bundle exec rake
@@ -1,19 +0,0 @@
1
- module MuffinMan
2
- class Solicitations < SpApiClient
3
- SANDBOX_AMAZON_ORDER_ID = "123-1234567-1234567"
4
- SANDBOX_MARKETPLACE_IDS = "ATVPDKIKX0DER"
5
- attr_reader :amazon_order_id, :marketplace_ids, :request_type, :local_var_path, :query_params
6
-
7
- # Sends a solicitation to a buyer asking for seller feedback and a product review for the specified order. Send only one productReviewAndSellerFeedback or free form proactive message per order. **Usage Plan:** | Rate (requests per second) | Burst | | ---- | ---- | | 1 | 5 | For more information, see \"Usage Plans and Rate Limits\" in the Selling Partner API documentation.
8
- # @param amazon_order_id An Amazon order identifier. This specifies the order for which a solicitation is sent.
9
- # @param marketplace_ids A marketplace identifier. This specifies the marketplace in which the order was placed. Only one marketplace can be specified.
10
- def create_product_review_and_seller_feedback_solicitation(amazon_order_id, marketplace_ids)
11
- @amazon_order_id = sandbox ? SANDBOX_AMAZON_ORDER_ID : amazon_order_id
12
- @marketplace_ids = sandbox ? SANDBOX_MARKETPLACE_IDS : marketplace_ids
13
- @local_var_path = '/solicitations/v1/orders/{amazonOrderId}/solicitations/productReviewAndSellerFeedback'.sub('{' + 'amazonOrderId' + '}', @amazon_order_id)
14
- @query_params = { "marketplaceIds" => @marketplace_ids }
15
- @request_type = 'POST'
16
- call_api
17
- end
18
- end
19
- end