marketplace_web_service 0.0.2 → 0.0.3
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 +4 -4
- data/README.md +1 -0
- data/lib/mws/query_string/request_string.rb +6 -6
- data/lib/mws/query_string.rb +28 -11
- data/lib/mws/report.rb +17 -0
- data/lib/mws/request.rb +41 -0
- data/lib/mws/version.rb +1 -1
- data/lib/mws.rb +2 -0
- data/spec/mws/query_string/request_string_spec.rb +3 -3
- data/spec/mws/query_string_spec.rb +6 -2
- data/spec/mws/report_spec.rb +32 -0
- data/spec/mws/request_spec.rb +34 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f4ff93dac20f15865f105e22202cd5b246ae0d1
|
4
|
+
data.tar.gz: af2075a5e950eed79f9c9c4ffe3d99c018e02bcb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f80a5ae26a99bdf8edc0c852dac8628c927ada747d401f33445e86088f50e320f354e1ffb8b059306c93e3187ebf798c07447ae69a92b8d7d032a0575ab7f3d9
|
7
|
+
data.tar.gz: e4652031bf15c83e5aee67ffe3687c991dff8bc6c94d5038822cea72e9c704a21386e0c28864f32df2c6dce86e17292a057d9b2b2540bd165941c013f7e8332c
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# MarketplaceWebService
|
2
2
|
|
3
|
+
[](http://badge.fury.io/rb/marketplace_web_service)
|
3
4
|
[](https://travis-ci.org/e-maido/marketplace_web_service)
|
4
5
|
[](https://coveralls.io/r/e-maido/marketplace_web_service)
|
5
6
|
|
@@ -3,11 +3,11 @@ require "mws/query_string/uri_encoder"
|
|
3
3
|
module MWS
|
4
4
|
class QueryString < ::String
|
5
5
|
class RequestString < ::String
|
6
|
-
def initialize(
|
7
|
-
@method
|
8
|
-
@
|
9
|
-
@path
|
10
|
-
@params
|
6
|
+
def initialize(args)
|
7
|
+
@method = args[:method]
|
8
|
+
@endpoint = args[:endpoint]
|
9
|
+
@path = args[:path]
|
10
|
+
@params = args[:params]
|
11
11
|
|
12
12
|
super(request_string)
|
13
13
|
end
|
@@ -26,7 +26,7 @@ module MWS
|
|
26
26
|
def request_string
|
27
27
|
[
|
28
28
|
@method.to_s.upcase,
|
29
|
-
@
|
29
|
+
@endpoint,
|
30
30
|
@path,
|
31
31
|
encoded_params.map{|pair| pair.join("=") }.join("&")
|
32
32
|
].join("\n")
|
data/lib/mws/query_string.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require "time"
|
1
2
|
require "mws/query_string/request_string"
|
2
3
|
require "mws/query_string/signature"
|
3
4
|
require "mws/query_string/uri_encoder"
|
@@ -12,11 +13,11 @@ module MWS
|
|
12
13
|
}
|
13
14
|
|
14
15
|
def initialize(args)
|
15
|
-
@key
|
16
|
-
@method
|
17
|
-
@
|
18
|
-
@path
|
19
|
-
@params
|
16
|
+
@key = args[:key]
|
17
|
+
@method = args[:method] || DEFAULT_METHOD
|
18
|
+
@endpoint = args[:endpoint]
|
19
|
+
@path = args[:path] || DEFAULT_PATH
|
20
|
+
@params = DEFAULT_PARAMS.merge(args[:params])
|
20
21
|
|
21
22
|
@params["Timestamp"] = timestamp_string
|
22
23
|
@params["Signature"] = signature_string # This substitution must be final substitution
|
@@ -31,8 +32,28 @@ module MWS
|
|
31
32
|
sorted_params.each.map{|k, v| [k, encoder.encode(v)].join("=") }.join("&")
|
32
33
|
end
|
33
34
|
|
35
|
+
def sorted_params
|
36
|
+
expanded_params.sort_by{|k, _v| k }
|
37
|
+
end
|
38
|
+
|
39
|
+
def expanded_params
|
40
|
+
params = {}
|
41
|
+
@params.each do |key, value|
|
42
|
+
if Array === value
|
43
|
+
value.each.with_index(1) do |v, idx|
|
44
|
+
element_name = key.match(/([A-Z][a-z]+)List/)[1]
|
45
|
+
new_key = [key, element_name, idx.to_s].join(".")
|
46
|
+
params[new_key] = v
|
47
|
+
end
|
48
|
+
else
|
49
|
+
params[key] = value
|
50
|
+
end
|
51
|
+
end
|
52
|
+
params
|
53
|
+
end
|
54
|
+
|
34
55
|
def timestamp_string
|
35
|
-
(@params["Timestamp"].is_a?(Time) ? @params["Timestamp"] : Time.now).iso8601
|
56
|
+
(@params["Timestamp"].is_a?(Time) ? @params["Timestamp"] : Time.now).getutc.iso8601
|
36
57
|
end
|
37
58
|
|
38
59
|
def signature_string
|
@@ -40,11 +61,7 @@ module MWS
|
|
40
61
|
end
|
41
62
|
|
42
63
|
def request_string
|
43
|
-
MWS::QueryString::RequestString.new(@method, @
|
44
|
-
end
|
45
|
-
|
46
|
-
def sorted_params
|
47
|
-
@params.sort_by{|k, _v| k }
|
64
|
+
MWS::QueryString::RequestString.new(method: @method, endpoint: @endpoint, path: @path, params: expanded_params)
|
48
65
|
end
|
49
66
|
end
|
50
67
|
end
|
data/lib/mws/report.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
module MWS
|
2
|
+
module Report
|
3
|
+
DEFAULT_VERSION = "2009-01-01"
|
4
|
+
|
5
|
+
def method_missing(method, args={})
|
6
|
+
action = method.to_s.split("_").map(&:capitalize).join
|
7
|
+
args[:params] = {"Action" => action, "Version" => DEFAULT_VERSION}.merge(args[:params])
|
8
|
+
args = args.merge({path: "/?#{MWS::QueryString.new(args)}"})
|
9
|
+
|
10
|
+
req = MWS::Request.new(args)
|
11
|
+
res = req.execute
|
12
|
+
res.body
|
13
|
+
end
|
14
|
+
|
15
|
+
module_function :method_missing
|
16
|
+
end
|
17
|
+
end
|
data/lib/mws/request.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require "base64"
|
2
|
+
require "digest/md5"
|
3
|
+
require "net/http"
|
4
|
+
require "net/https"
|
5
|
+
|
6
|
+
module MWS
|
7
|
+
class Request
|
8
|
+
DEFAULT_METHOD = :post
|
9
|
+
|
10
|
+
def initialize(args)
|
11
|
+
@method = args[:method] || DEFAULT_METHOD
|
12
|
+
@path = args[:path]
|
13
|
+
@endpoint = args[:endpoint]
|
14
|
+
@headers = args[:headers] || {}
|
15
|
+
@body = args[:body] || ""
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute
|
19
|
+
client = Net::HTTP.new(@endpoint, 443)
|
20
|
+
client.use_ssl = true
|
21
|
+
|
22
|
+
client.start do |https|
|
23
|
+
case @method
|
24
|
+
when :post then return https.post(@path, @body, headers)
|
25
|
+
else raise ArgumentError, "#{@method} is unknown HTTP method"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def headers
|
33
|
+
{
|
34
|
+
"Content-Type" => "text/xml",
|
35
|
+
"Content-MD5" => Base64.encode64(Digest::MD5.digest(@body)),
|
36
|
+
"User-Agent" => "MarketplaceWebService/#{MWS::VERSION} (Language=Ruby)",
|
37
|
+
"Host" => @endpoint
|
38
|
+
}.merge(@headers)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/mws/version.rb
CHANGED
data/lib/mws.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe MWS::QueryString::RequestString do
|
4
|
-
let(:request_string){ MWS::QueryString::RequestString.new(method,
|
4
|
+
let(:request_string){ MWS::QueryString::RequestString.new(method: method, endpoint: endpoint, path: path, params: params) }
|
5
5
|
let(:method){ "POST" }
|
6
|
-
let(:
|
6
|
+
let(:endpoint){ "mws.amazonservices.com" }
|
7
7
|
let(:path){ "/" }
|
8
8
|
let(:params) {
|
9
9
|
{
|
@@ -17,7 +17,7 @@ describe MWS::QueryString::RequestString do
|
|
17
17
|
let(:valid_request_string){
|
18
18
|
request_string = <<-REQUEST_STRING
|
19
19
|
POST
|
20
|
-
mws.
|
20
|
+
mws.amazonservices.com
|
21
21
|
/
|
22
22
|
Attr1=Value1&Attr2=Value2&Attr3=Value3&Timestamp=12%3A34%3A56
|
23
23
|
REQUEST_STRING
|
@@ -5,10 +5,12 @@ describe MWS::QueryString do
|
|
5
5
|
let(:valid_args){
|
6
6
|
{
|
7
7
|
key: "ThisIsSigningKey",
|
8
|
-
|
8
|
+
endpoint: "mws.amazonservices.com",
|
9
9
|
params: {
|
10
10
|
"Action" => "SubmitFeed",
|
11
|
-
"Timestamp" => Time.new(2009, 8, 20, 1, 10, 27, 607)
|
11
|
+
"Timestamp" => Time.new(2009, 8, 20, 1, 10, 27, 607),
|
12
|
+
"SomethingIdList" => [123, 456],
|
13
|
+
"SomethingTypeList" => ["ABC", "DEF"]
|
12
14
|
}
|
13
15
|
}
|
14
16
|
}
|
@@ -19,5 +21,7 @@ describe MWS::QueryString do
|
|
19
21
|
it("should be formated with query style"){ is_expected.to match /\A([^=&]+=[^=&]+)(&[^=&]+=[^=&]+)*\Z/ }
|
20
22
|
it("should be URI encoded"){ is_expected.not_to match /\A[A-Za-z0-9\-\_\.\~]*\Z/ }
|
21
23
|
it("should have timestamp in ISO8601 format"){ is_expected.to match /\d{4}-\d{2}-\d{2}T\d{2}%3A\d{2}%3A\d{2}/ }
|
24
|
+
it("should have expanded ids"){ is_expected.to match "SomethingIdList.Id.1=123" }
|
25
|
+
it("should have expanded types"){ is_expected.to match "SomethingTypeList.Type.2=DEF" }
|
22
26
|
end
|
23
27
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MWS::Report do
|
4
|
+
describe ".method_missing" do
|
5
|
+
describe ".get_report_list" do
|
6
|
+
let(:valid_args){
|
7
|
+
{
|
8
|
+
key: "ThisIsSigningKey",
|
9
|
+
endpoint: "mws.amazonservices.com",
|
10
|
+
params: {
|
11
|
+
"AWSAccessKeyId" => "AccessKeyIdString",
|
12
|
+
"SellerId" => "SellerIdString",
|
13
|
+
"ReportTypeList" => ["_GET_FLAT_FILE_ORDERS_DATA_"],
|
14
|
+
"Acknowledged" => false,
|
15
|
+
"MaxCount" => 100
|
16
|
+
}
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
before do
|
21
|
+
response = double("request")
|
22
|
+
expect(response).to receive(:body).and_return("BodyString")
|
23
|
+
request = double("request")
|
24
|
+
expect(request).to receive(:execute).and_return(response)
|
25
|
+
expect(MWS::Request).to receive(:new).and_return(request)
|
26
|
+
end
|
27
|
+
|
28
|
+
subject { described_class.get_report_list(valid_args) }
|
29
|
+
it { is_expected.to be_a String }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MWS::Request do
|
4
|
+
let(:request){ MWS::Request.new(valid_args) }
|
5
|
+
let(:valid_args){
|
6
|
+
{
|
7
|
+
path: "/?Attr=Value",
|
8
|
+
endpoint: "mws.amazonservices.com",
|
9
|
+
headers: {},
|
10
|
+
body: ""
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
describe "initialize" do
|
15
|
+
subject{ request }
|
16
|
+
it{ is_expected.to be_a MWS::Request }
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#execute" do
|
20
|
+
context "POST" do
|
21
|
+
before do
|
22
|
+
http = Net::HTTP.new("")
|
23
|
+
expect(http).to receive(:use_ssl=).with(true)
|
24
|
+
expect(http).to receive(:start).and_yield(http)
|
25
|
+
expect(http).to receive(:post)
|
26
|
+
expect(Net::HTTP).to receive(:new).and_return(http)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should POST request" do
|
30
|
+
expect{ request.execute }.not_to raise_error
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marketplace_web_service
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OSA Shunsuke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -86,12 +86,16 @@ files:
|
|
86
86
|
- lib/mws/query_string/request_string.rb
|
87
87
|
- lib/mws/query_string/signature.rb
|
88
88
|
- lib/mws/query_string/uri_encoder.rb
|
89
|
+
- lib/mws/report.rb
|
90
|
+
- lib/mws/request.rb
|
89
91
|
- lib/mws/version.rb
|
90
92
|
- marketplace_web_service.gemspec
|
91
93
|
- spec/mws/query_string/request_string_spec.rb
|
92
94
|
- spec/mws/query_string/signature_spec.rb
|
93
95
|
- spec/mws/query_string/uri_encoder_spec.rb
|
94
96
|
- spec/mws/query_string_spec.rb
|
97
|
+
- spec/mws/report_spec.rb
|
98
|
+
- spec/mws/request_spec.rb
|
95
99
|
- spec/mws_spec.rb
|
96
100
|
- spec/spec_helper.rb
|
97
101
|
homepage: https://github.com/e-maido/marketplace_web_service
|
@@ -123,5 +127,7 @@ test_files:
|
|
123
127
|
- spec/mws/query_string/signature_spec.rb
|
124
128
|
- spec/mws/query_string/uri_encoder_spec.rb
|
125
129
|
- spec/mws/query_string_spec.rb
|
130
|
+
- spec/mws/report_spec.rb
|
131
|
+
- spec/mws/request_spec.rb
|
126
132
|
- spec/mws_spec.rb
|
127
133
|
- spec/spec_helper.rb
|