sinew 2.0.3 → 2.0.4
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/lib/sinew/dsl.rb +2 -2
- data/lib/sinew/main.rb +2 -2
- data/lib/sinew/request.rb +13 -3
- data/lib/sinew/response.rb +2 -2
- data/lib/sinew/version.rb +1 -1
- data/test/test_cache.rb +1 -1
- data/test/test_helper.rb +3 -0
- data/test/test_requests.rb +30 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e7426a91f427a3c97969eb501ce0bd55a658ece54af0dfea994f8faffd479f7
|
4
|
+
data.tar.gz: baeb12b6af0fa2c5c11390de16ed1837458f52b4b00393dce8f9e66d4eb898a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1698acfc26dbab92c390cde0956a72011f22f8f9bb4c5ebb194d131ae0a8dfe6c58e2224d36e840167210c2bf472efd18fd8e0cc92b1c9640df590f1faf71473
|
7
|
+
data.tar.gz: e9a2688616dd866792cd286a1ebff094fe32ad9d8552ce77e7465648022fd65db83149ee558f88140f907d7a2da422c41312e8a32f73f0d1930f865862eab90f
|
data/lib/sinew/dsl.rb
CHANGED
@@ -10,7 +10,7 @@ module Sinew
|
|
10
10
|
# this is used to break out of --limit
|
11
11
|
class LimitError < StandardError; end
|
12
12
|
|
13
|
-
attr_reader :sinew, :raw, :
|
13
|
+
attr_reader :sinew, :uri, :raw, :code, :elapsed
|
14
14
|
|
15
15
|
def initialize(sinew)
|
16
16
|
@sinew = sinew
|
@@ -59,7 +59,7 @@ module Sinew
|
|
59
59
|
|
60
60
|
# fetch and make response available to callers
|
61
61
|
response = sinew.http(method, url, options)
|
62
|
-
@uri, @raw = response.uri, response.body
|
62
|
+
@uri, @raw, @code = response.uri, response.body, response.code
|
63
63
|
|
64
64
|
# don't confuse the user
|
65
65
|
nil
|
data/lib/sinew/main.rb
CHANGED
@@ -75,8 +75,8 @@ module Sinew
|
|
75
75
|
begin
|
76
76
|
@request_count += 1
|
77
77
|
response = request.perform
|
78
|
-
rescue Timeout::Error
|
79
|
-
response = Response.
|
78
|
+
rescue HTTParty::RedirectionTooDeep, OpenSSL::SSL::SSLError, SocketError, SystemCallError, Timeout::Error => e
|
79
|
+
response = Response.from_error(request, e)
|
80
80
|
end
|
81
81
|
break if !response.error_500?
|
82
82
|
end
|
data/lib/sinew/request.rb
CHANGED
@@ -73,16 +73,26 @@ module Sinew
|
|
73
73
|
body&.dup
|
74
74
|
end
|
75
75
|
|
76
|
-
#
|
76
|
+
# Build key, as a hash for before_generate_cache_key. Note that :scheme is
|
77
|
+
# just a placeholder in case someone wants to add it for real, so that
|
78
|
+
# it'll appear in the correct order. We remove the placerholder after we
|
79
|
+
# call the proc.
|
77
80
|
key = {
|
78
81
|
method: method.dup,
|
82
|
+
scheme: 'placeholder',
|
79
83
|
path: uri.path,
|
80
84
|
query: uri.query,
|
81
85
|
body: body_key,
|
82
86
|
}
|
83
|
-
key = sinew.runtime_options.before_generate_cache_key.call(key)
|
84
87
|
|
85
|
-
|
88
|
+
args = [ key ]
|
89
|
+
if sinew.runtime_options.before_generate_cache_key.arity == 2
|
90
|
+
args << uri
|
91
|
+
end
|
92
|
+
key = sinew.runtime_options.before_generate_cache_key.call(*args)
|
93
|
+
|
94
|
+
# strip defaults
|
95
|
+
key.delete(:scheme) if key[:scheme] == 'placeholder'
|
86
96
|
key.delete(:method) if key[:method] == 'get'
|
87
97
|
|
88
98
|
# pull out the values, join and pathify
|
data/lib/sinew/response.rb
CHANGED
@@ -46,11 +46,11 @@ module Sinew
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
def self.
|
49
|
+
def self.from_error(request, error)
|
50
50
|
Response.new.tap do |response|
|
51
51
|
response.request = request
|
52
52
|
response.uri = request.uri
|
53
|
-
response.body =
|
53
|
+
response.body = error.to_s
|
54
54
|
response.code = 999
|
55
55
|
response.headers = {}
|
56
56
|
end
|
data/lib/sinew/version.rb
CHANGED
data/test/test_cache.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -2,6 +2,9 @@ require 'minitest/autorun'
|
|
2
2
|
require 'minitest/pride'
|
3
3
|
require 'webmock/minitest' unless ENV['SINEW_TEST_NETWORK']
|
4
4
|
|
5
|
+
# to run one test, do this:
|
6
|
+
# TEST=test/unit/query_test.rb TESTOPTS="--name=test_parse" rake
|
7
|
+
|
5
8
|
# a hint to sinew, so that it'll do things like set rate limit to zero
|
6
9
|
ENV['SINEW_TEST'] = '1'
|
7
10
|
|
data/test/test_requests.rb
CHANGED
@@ -8,6 +8,7 @@ class TestRequests < MiniTest::Test
|
|
8
8
|
|
9
9
|
def test_basic_methods
|
10
10
|
sinew.dsl.get('http://httpbin.org/get', a: 1, b: 2)
|
11
|
+
assert_equal(200, sinew.dsl.code)
|
11
12
|
assert_equal({ a: '1', b: '2' }, sinew.dsl.json[:args])
|
12
13
|
|
13
14
|
sinew.dsl.post('http://httpbin.org/post', a: 1, b: 2)
|
@@ -38,13 +39,29 @@ class TestRequests < MiniTest::Test
|
|
38
39
|
# 500
|
39
40
|
assert_output(/failed with 500/) do
|
40
41
|
sinew.dsl.get('http://httpbin.org/status/500')
|
42
|
+
assert_equal 500, sinew.dsl.code
|
41
43
|
assert_equal '500', sinew.dsl.raw
|
42
44
|
end
|
43
45
|
|
44
46
|
# timeout
|
45
47
|
assert_output(/failed with 999/) do
|
46
48
|
sinew.dsl.get('http://httpbin.org/delay/1')
|
47
|
-
assert_equal
|
49
|
+
assert_equal 999, sinew.dsl.code
|
50
|
+
end
|
51
|
+
|
52
|
+
# uncommon errors
|
53
|
+
errors = [
|
54
|
+
Errno::ECONNREFUSED,
|
55
|
+
HTTParty::RedirectionTooDeep.new(nil),
|
56
|
+
OpenSSL::SSL::SSLError.new,
|
57
|
+
SocketError.new,
|
58
|
+
]
|
59
|
+
errors.each_with_index do |error, index|
|
60
|
+
stub_request(:get, %r{http://[^/]+/error#{index}}).to_return { raise error }
|
61
|
+
assert_output(/failed with 999/) do
|
62
|
+
sinew.dsl.get("http://httpbin.org/error#{index}")
|
63
|
+
assert_equal 999, sinew.dsl.code
|
64
|
+
end
|
48
65
|
end
|
49
66
|
end
|
50
67
|
|
@@ -104,9 +121,15 @@ class TestRequests < MiniTest::Test
|
|
104
121
|
end
|
105
122
|
|
106
123
|
def test_before_generate_cache_key
|
124
|
+
# arity 1
|
107
125
|
sinew.runtime_options.before_generate_cache_key = method(:redact_cache_key)
|
108
126
|
req = Sinew::Request.new(sinew, 'get', 'http://host', query: { secret: 'xyz' })
|
109
127
|
assert_equal 'host/secret=redacted', req.cache_key
|
128
|
+
|
129
|
+
# arity 2
|
130
|
+
sinew.runtime_options.before_generate_cache_key = method(:add_scheme)
|
131
|
+
req = Sinew::Request.new(sinew, 'get', 'https://host/gub')
|
132
|
+
assert_equal 'host/https,gub', req.cache_key
|
110
133
|
end
|
111
134
|
|
112
135
|
def test_urls
|
@@ -132,4 +155,10 @@ class TestRequests < MiniTest::Test
|
|
132
155
|
key
|
133
156
|
end
|
134
157
|
protected :redact_cache_key
|
158
|
+
|
159
|
+
def add_scheme(key, uri)
|
160
|
+
key[:scheme] = uri.scheme
|
161
|
+
key
|
162
|
+
end
|
163
|
+
protected :add_scheme
|
135
164
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinew
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Doppelt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-05-
|
11
|
+
date: 2018-05-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: awesome_print
|