jeff 1.3.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -0
- data/CHANGELOG.md +1 -0
- data/lib/jeff.rb +26 -19
- data/lib/jeff/version.rb +1 -1
- data/test/test_jeff.rb +13 -4
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2256dcb03eb1bf6ce825c9cf1b2f1de192dff544
|
4
|
+
data.tar.gz: 29d63828239369329ffab1120d8beb0c18570277
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e30ba915c8f8f2be48ff203d6187330ee03eaacc51290aeb6c980cf91a8f8e46acecc8d05805b7e735c05fcd3cf5b4bb7bd49915f8346d64f4f2b5c88c665452
|
7
|
+
data.tar.gz: 1a15572f7d538ab793f45da18de98e7ce8fdfd609da3aea93c01fccc41746ca3f6ce54fcfe154628d849f3a09d11ae2ceacb3ba46208fe83f932c8d33c501ac6
|
data/.rubocop.yml
ADDED
data/CHANGELOG.md
CHANGED
data/lib/jeff.rb
CHANGED
@@ -13,7 +13,7 @@ require "jeff/version"
|
|
13
13
|
module Jeff
|
14
14
|
# Converts query field-value pairs to a sorted query string.
|
15
15
|
class Query
|
16
|
-
|
16
|
+
attr_reader :values
|
17
17
|
|
18
18
|
def initialize(values)
|
19
19
|
@values = values
|
@@ -22,13 +22,13 @@ module Jeff
|
|
22
22
|
def to_s
|
23
23
|
values
|
24
24
|
.sort { |a, b| a[0].to_s <=> b[0].to_s }
|
25
|
-
.map { |k, v| "#{k}=#{
|
25
|
+
.map { |k, v| "#{k}=#{Utils.escape(v)}" }.join("&")
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
# Calculates an MD5sum for file being uploaded.
|
30
30
|
class Content
|
31
|
-
|
31
|
+
attr_reader :body
|
32
32
|
|
33
33
|
def initialize(body)
|
34
34
|
@body = body
|
@@ -41,7 +41,7 @@ module Jeff
|
|
41
41
|
|
42
42
|
# Signs an AWS request.
|
43
43
|
class Signer
|
44
|
-
|
44
|
+
attr_reader :method, :host, :path, :query_string
|
45
45
|
|
46
46
|
def initialize(method, host, path, query_string)
|
47
47
|
@method = method.upcase
|
@@ -72,7 +72,7 @@ module Jeff
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def secret
|
75
|
-
@secret
|
75
|
+
@secret || fail(ArgumentError, "Missing secret")
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
@@ -82,7 +82,8 @@ module Jeff
|
|
82
82
|
|
83
83
|
def self.escape(val)
|
84
84
|
val.to_s.gsub(UNRESERVED) do
|
85
|
-
|
85
|
+
match = Regexp.last_match[1]
|
86
|
+
"%" + match.unpack("H2" * match.bytesize).join("%").upcase
|
86
87
|
end
|
87
88
|
end
|
88
89
|
end
|
@@ -104,11 +105,11 @@ module Jeff
|
|
104
105
|
|
105
106
|
# A reusable HTTP connection.
|
106
107
|
def connection
|
107
|
-
@connection ||= Excon.new(aws_endpoint,
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
108
|
+
@connection ||= Excon.new(aws_endpoint, connection_params)
|
109
|
+
end
|
110
|
+
|
111
|
+
def connection_params
|
112
|
+
@connection_params ||= default_connection_params
|
112
113
|
end
|
113
114
|
|
114
115
|
attr_accessor :aws_endpoint
|
@@ -144,8 +145,16 @@ module Jeff
|
|
144
145
|
|
145
146
|
private
|
146
147
|
|
148
|
+
def default_connection_params
|
149
|
+
{
|
150
|
+
headers: { "User-Agent" => self.class.user_agent },
|
151
|
+
expects: 200,
|
152
|
+
omit_default_port: true
|
153
|
+
}
|
154
|
+
end
|
155
|
+
|
147
156
|
def add_md5_digest(options)
|
148
|
-
return unless options.
|
157
|
+
return unless options.key?(:body)
|
149
158
|
md5 = Content.new(options[:body]).md5
|
150
159
|
(options[:headers] ||= {}).store("Content-MD5", md5)
|
151
160
|
end
|
@@ -165,18 +174,19 @@ module Jeff
|
|
165
174
|
end
|
166
175
|
|
167
176
|
def move_query_to_body(options)
|
168
|
-
|
177
|
+
options[:headers] ||= {}
|
178
|
+
options[:headers].store("Content-Type", "application/x-www-form-urlencoded")
|
169
179
|
options.store(:body, options.delete(:query))
|
170
180
|
end
|
171
181
|
|
172
182
|
def default_query_values
|
173
183
|
self.class.params
|
174
|
-
.reduce({})
|
184
|
+
.reduce({}) do |qv, (k, v)|
|
175
185
|
v = v.respond_to?(:call) ? instance_exec(&v) : v
|
176
186
|
|
177
187
|
# Ignore keys with nil values
|
178
188
|
v.nil? ? qv : qv.update(k => v)
|
179
|
-
|
189
|
+
end
|
180
190
|
end
|
181
191
|
|
182
192
|
module ClassMethods
|
@@ -187,12 +197,9 @@ module Jeff
|
|
187
197
|
|
188
198
|
def user_agent
|
189
199
|
@user_agent ||= default_user_agent
|
190
|
-
|
191
200
|
end
|
192
201
|
|
193
|
-
|
194
|
-
@user_agent = user_agent
|
195
|
-
end
|
202
|
+
attr_writer :user_agent
|
196
203
|
|
197
204
|
private
|
198
205
|
|
data/lib/jeff/version.rb
CHANGED
data/test/test_jeff.rb
CHANGED
@@ -20,13 +20,13 @@ class TestJeff < Minitest::Test
|
|
20
20
|
|
21
21
|
def test_has_required_request_query_parameters
|
22
22
|
%w(AWSAccessKeyId SignatureMethod SignatureVersion Timestamp).each do |key|
|
23
|
-
assert @klass.params.
|
23
|
+
assert @klass.params.key?(key)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
def test_configures_request_query_parameters
|
28
28
|
@klass.params "Foo" => "bar"
|
29
|
-
assert @klass.params.
|
29
|
+
assert @klass.params.key?("Foo")
|
30
30
|
end
|
31
31
|
|
32
32
|
def test_allows_dynamic_values_for_request_query_parameters
|
@@ -92,7 +92,7 @@ class TestJeffInAction < Minitest::Test
|
|
92
92
|
|
93
93
|
Excon::HTTP_VERBS.each do |method|
|
94
94
|
define_method "test_makes_#{method}_request" do
|
95
|
-
Excon.stub({},
|
95
|
+
Excon.stub({}, status: 200)
|
96
96
|
assert_equal 200, @client.send(method, mock: true).status
|
97
97
|
end
|
98
98
|
end
|
@@ -123,7 +123,16 @@ class TestJeffInAction < Minitest::Test
|
|
123
123
|
|
124
124
|
def test_gets_from_an_actual_endpoint
|
125
125
|
@client.aws_endpoint = "https://mws.amazonservices.com/Sellers/2011-07-01"
|
126
|
-
res = @client.post(query: { "Action" => "GetServiceStatus"})
|
126
|
+
res = @client.post(query: { "Action" => "GetServiceStatus" })
|
127
127
|
assert_equal 200, res.status
|
128
128
|
end
|
129
|
+
|
130
|
+
def test_has_no_proxy_by_default
|
131
|
+
refute @client.connection.proxy
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_sets_proxy
|
135
|
+
@client.connection_params.store(:proxy, "http://my.proxy:4321")
|
136
|
+
assert @client.connection.proxy
|
137
|
+
end
|
129
138
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jeff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hakan Ensari
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: excon
|
@@ -60,6 +60,7 @@ extensions: []
|
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
62
|
- ".gitignore"
|
63
|
+
- ".rubocop.yml"
|
63
64
|
- ".travis.yml"
|
64
65
|
- CHANGELOG.md
|
65
66
|
- Gemfile
|
@@ -96,4 +97,3 @@ specification_version: 4
|
|
96
97
|
summary: An AWS client
|
97
98
|
test_files:
|
98
99
|
- test/test_jeff.rb
|
99
|
-
has_rdoc:
|