scorn 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +27 -1
- data/lib/scorn.rb +83 -14
- 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: 85cc3564b52b437e8e8f4310cfcede5d5696f627d5b0525acb78b8160edbe694
|
4
|
+
data.tar.gz: 29aae9d5ec45908f599c3e2cba875a0568d80cfa6c831393d1f45d0d0daa15de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4fc2fc03aa541256700c41971be22617aba2025db4d7770bd5f8983a0b97f2c4f030ce67f89ef5a0823a2f126c1da73fe10fdd8d6e45e3e2bd11be6f838d24a
|
7
|
+
data.tar.gz: 4f142484e9ea9296f5d1da76cc5213ee85da9cb1862c4c37d7e376805c4961ec3490ea286fc3364e2ff80821ee09e54ea80fdbf10f28f39660fe0f221fc18c38
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -4,7 +4,33 @@
|
|
4
4
|
A stupid HTTP client library.
|
5
5
|
|
6
6
|
```ruby
|
7
|
-
|
7
|
+
r = Scorn.get('https://example.com/data.json')
|
8
|
+
|
9
|
+
p r._response._c # => 200
|
10
|
+
```
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
r = Scorn.get('https://httpbin.org/get', json: true)
|
14
|
+
|
15
|
+
p r._response._c # => 200
|
16
|
+
p r['args'] # => {}
|
17
|
+
p r['headers']['Host'] # => 'httpbin.org'
|
18
|
+
p r['headers']['Accept'] # => 'application/json'
|
19
|
+
p r['url'] # => 'https://httpbin.org/get'
|
20
|
+
```
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
r = Scorn.post(
|
24
|
+
'https://httpbin.org/post',
|
25
|
+
data: { source: 'src', target: 'tgt', n: -1 },
|
26
|
+
debug: $stderr)
|
27
|
+
|
28
|
+
p r._response._c # => 200
|
29
|
+
p r._response._sta # => 'OK'
|
30
|
+
p r._response.code # => '200'
|
31
|
+
|
32
|
+
p r.class # => Hash
|
33
|
+
p r['form'] # => { 'n' => '-1', 'source' => 'src', 'target' => 'tgt' }
|
8
34
|
```
|
9
35
|
|
10
36
|
|
data/lib/scorn.rb
CHANGED
@@ -10,20 +10,18 @@ require 'net/http'
|
|
10
10
|
|
11
11
|
module Scorn
|
12
12
|
|
13
|
-
VERSION = '0.
|
13
|
+
VERSION = '0.3.0'
|
14
14
|
|
15
15
|
class << self
|
16
16
|
|
17
17
|
def get(uri, opts={})
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
s = res.body
|
19
|
+
Scorn::Client.new(opts).get(uri, opts)
|
20
|
+
end
|
22
21
|
|
23
|
-
|
24
|
-
return (JSON.parse(st) rescue s) if st[0, 1] == '{' && st[-1, 1] == '}'
|
22
|
+
def post(uri, opts)
|
25
23
|
|
26
|
-
|
24
|
+
Scorn::Client.new(opts).post(uri, opts)
|
27
25
|
end
|
28
26
|
end
|
29
27
|
|
@@ -46,26 +44,76 @@ module Scorn
|
|
46
44
|
OpenSSL::SSL::VERIFY_PEER
|
47
45
|
end
|
48
46
|
|
49
|
-
def get(uri, opts)
|
47
|
+
def get(uri, opts={})
|
50
48
|
|
51
49
|
u = uri.is_a?(String) ? URI(uri) : uri
|
52
50
|
|
53
|
-
request(u, make_get_req(u, opts))
|
51
|
+
res = request(u, make_get_req(u, opts))
|
52
|
+
|
53
|
+
opts[:res] ? res : read_response(res)
|
54
|
+
end
|
55
|
+
|
56
|
+
def post(uri, opts)
|
57
|
+
|
58
|
+
u = uri.is_a?(String) ? URI(uri) : uri
|
59
|
+
|
60
|
+
res = request(u, make_post_req(u, opts))
|
61
|
+
|
62
|
+
opts[:res] ? res : read_response(res)
|
54
63
|
end
|
55
64
|
|
56
65
|
protected
|
57
66
|
|
58
67
|
def make_get_req(uri, opts)
|
59
68
|
|
69
|
+
accept =
|
70
|
+
opts[:accept] ||
|
71
|
+
(opts[:json] && 'application/json') ||
|
72
|
+
'*/*'
|
73
|
+
|
74
|
+
make_req(
|
75
|
+
:get, uri,
|
76
|
+
agent: opts[:user_agent] || user_agent,
|
77
|
+
accept: accept)
|
78
|
+
end
|
79
|
+
|
80
|
+
def make_post_req(uri, opts)
|
81
|
+
|
82
|
+
req = make_req(
|
83
|
+
:post, uri,
|
84
|
+
agent: opts[:user_agent] || user_agent,
|
85
|
+
type: opts[:content_type] || 'application/x-www-form-urlencoded')
|
86
|
+
|
87
|
+
data = opts[:data]
|
88
|
+
req.set_form_data(data) if data
|
89
|
+
|
90
|
+
req
|
91
|
+
end
|
92
|
+
|
93
|
+
def make_req(type, uri, headers)
|
94
|
+
|
60
95
|
u = [ uri.path, uri.query ].compact.join('?')
|
61
96
|
u = '/' if u.length < 1
|
62
97
|
|
63
|
-
req =
|
98
|
+
req =
|
99
|
+
case type
|
100
|
+
when :get then Net::HTTP::Get.new(u)
|
101
|
+
when :post then Net::HTTP::Post.new(u)
|
102
|
+
else fail ArgumentError.new("HTTP #{type} not implemented")
|
103
|
+
end
|
64
104
|
req.instance_eval { @header.clear }
|
65
105
|
def req.set_header(k, v); @header[k] = [ v ]; end
|
66
106
|
|
67
|
-
|
68
|
-
|
107
|
+
headers.each do |k, v|
|
108
|
+
hk =
|
109
|
+
case k
|
110
|
+
when :accept then 'Accept'
|
111
|
+
when :agent then 'User-Agent'
|
112
|
+
when :type then 'Content-Type'
|
113
|
+
else k.to_s
|
114
|
+
end
|
115
|
+
req.set_header(hk, v)
|
116
|
+
end
|
69
117
|
|
70
118
|
req
|
71
119
|
end
|
@@ -81,10 +129,14 @@ module Scorn
|
|
81
129
|
res = http.request(req)
|
82
130
|
|
83
131
|
class << res
|
84
|
-
attr_accessor :_uri, :_elapsed, :_proxy
|
132
|
+
attr_accessor :_u, :_uri, :_request, :_c, :_sta, :_elapsed, :_proxy
|
85
133
|
def _headers; each_header.inject({}) { |h, (k, v)| h[k] = v; h }; end
|
86
134
|
end
|
87
|
-
res.
|
135
|
+
res._u = uri.to_s
|
136
|
+
res._uri = uri
|
137
|
+
res._request = req
|
138
|
+
res._c = res.code.to_i
|
139
|
+
res._sta = WEBrick::HTTPStatus.reason_phrase(res.code) rescue ''
|
88
140
|
res._elapsed = monow - t0
|
89
141
|
#res._proxy = detail_proxy(http)
|
90
142
|
|
@@ -108,6 +160,23 @@ module Scorn
|
|
108
160
|
|
109
161
|
http
|
110
162
|
end
|
163
|
+
|
164
|
+
def read_response(res)
|
165
|
+
|
166
|
+
s = res.body
|
167
|
+
st = s.strip
|
168
|
+
|
169
|
+
r =
|
170
|
+
if st[0, 1] == '{' && st[-1, 1] == '}'
|
171
|
+
JSON.parse(st) rescue s
|
172
|
+
else
|
173
|
+
s
|
174
|
+
end
|
175
|
+
class << r; attr_accessor :_response; end
|
176
|
+
r._response = res
|
177
|
+
|
178
|
+
r
|
179
|
+
end
|
111
180
|
end
|
112
181
|
end
|
113
182
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scorn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Mettraux
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-01-
|
11
|
+
date: 2021-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|