Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add upload_feed_document method #172

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ upload_url = response.parse["url"]

# Upload the feed content to the provided URL
feed_content = File.read("inventory_update.xml")
api.upload_feed_document(upload_url, feed_content)
api.upload_feed_document(upload_url, feed_content, "text/xml; charset=UTF-8")

# Create the feed
response = api.create_feed(
Expand Down
12 changes: 12 additions & 0 deletions lib/generator/api.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,18 @@ def library_name
"peddler/api/#{name_with_version}"
end

def has_helper?
File.exist?("lib/" + helper_library_name + ".rb")
end

def helper_class_name
"Peddler::Helpers::#{pascalcase(name_with_version)}"
end

def helper_library_name
"peddler/helpers/#{name_with_version}"
end

def class_name
pascalcase(name_with_version)
end
Expand Down
4 changes: 4 additions & 0 deletions lib/peddler/api/feeds_2021_06_30.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

require "peddler/api"

require "peddler/helpers/feeds_2021_06_30"

module Peddler
class << self
def feeds_2021_06_30(...)
Expand All @@ -14,6 +16,8 @@ class API
#
# The Selling Partner API for Feeds lets you upload data to Amazon on behalf of a selling partner.
class Feeds20210630 < API
include Peddler::Helpers::Feeds20210630

# Returns feed details for the feeds that match the filters that you specify.
#
# @note This operation can make a static sandbox call.
Expand Down
29 changes: 29 additions & 0 deletions lib/peddler/helpers/feeds_2021_06_30.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# frozen_string_literal: true

module Peddler
module Helpers
module Feeds20210630
# Uploads feed_content to a signed upload_url previously provided by
# create_feed_document. The upload_url is signed, the Host and content-type
# headers must match the signing.
# @param upload_url [String] The signed url from the `create_feed_document` response.
# @param feed_content [String] The body of the content to upload.
# @param content_type [String] The content type of the upload,
# this must match the content-type requested in `create_feed_document`
# @return [HTTP::Response] The API response
def upload_feed_document(upload_url, feed_content, content_type)
response = HTTP.headers(
"Host" => URI.parse(upload_url).host,
"content-type" => content_type,
).send(:put, upload_url, body: feed_content)

if response.status.client_error?
error = Error.build(response)
raise error if error
end

response
end
end
end
end
6 changes: 6 additions & 0 deletions templates/api.rb.erb
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@

require "peddler/api"
<% if has_helper? %>
require "<%= helper_library_name %>"
<% end %>

module Peddler
class << self
Expand All @@ -13,6 +16,9 @@ module Peddler
#
<%= description %>
class <%= class_name %> < API
<% if has_helper? %>
include <%= helper_class_name %>
<% end %>
<% operations.each do |operation| %>
<%= operation.render %>
<% end %>
Expand Down