dagger 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +20 -5
- data/lib/dagger.rb +19 -28
- data/lib/dagger/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d8c2144cb2fc6feb4333d118265b8b33d31df3e2
|
4
|
+
data.tar.gz: 3615c376cd385f9731dd7fe022f4dfa56e2b95e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 223372582af34f07018cbc0df565b543c57a5b47c6e876081bf9dc0b98b4d402e71ada2abd1aa77772ca31321add90ed71880b73e07e75d13c98c649adb73094
|
7
|
+
data.tar.gz: 7b9a7983be101326ab8ba00a810f416c1e225fe9960c335c9c544ba616168f5777ef9cb8026f7b28811c1e0434e1dccbf03bf36e7d4bd847ecc8be7920a27b65
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Dagger
|
2
2
|
|
3
|
-
|
3
|
+
Featherweight wrapper around Net::HTTP.
|
4
|
+
|
5
|
+
Follows redirects if instructed, and comes with out-of-the-box parsing of JSON and XML, via [oj](https://github.com/ohler55/oj) and [ox](https://github.com/ohler55/ox), respectively.
|
4
6
|
|
5
7
|
# Installation
|
6
8
|
|
@@ -10,34 +12,47 @@ In your Gemfile:
|
|
10
12
|
|
11
13
|
# Usage
|
12
14
|
|
13
|
-
## `get(url)`
|
15
|
+
## `get(url, [params], [options])`
|
14
16
|
|
15
17
|
```rb
|
16
18
|
require 'dagger'
|
17
19
|
resp = Dagger.get('http://google.com')
|
18
20
|
|
19
21
|
puts resp.body # => "<!doctype html...>"
|
22
|
+
|
23
|
+
# if query is passed, it is appended as a query string
|
24
|
+
Dagger.get('google.com/search', { q: 'dagger' }) # => requests '/search?q=dagger'
|
20
25
|
```
|
21
26
|
|
22
|
-
## `post(url,
|
27
|
+
## `post(url, params, [options])`
|
23
28
|
|
24
29
|
```rb
|
25
30
|
resp = Dagger.post('http://api.server.com', { foo: 'bar' })
|
26
31
|
puts resp.status # => 200
|
27
32
|
|
28
|
-
# if the
|
33
|
+
# if you want to send JSON to the server, you can pass the { json: true } option,
|
34
|
+
# which converts your params object to JSON, and also sets Content-Type to 'application/json'
|
35
|
+
resp = Dagger.put('http://server.com', { foo: 'bar' }, { json: true })
|
36
|
+
|
37
|
+
# now, if the endpoint returned a parseable content-type (e.g. 'application/json')
|
29
38
|
# then `resp.data` will return the parsed result. `body` contains the raw data.
|
30
39
|
puts resp.data # => { result: 'GREAT SUCCESS!' }
|
31
40
|
```
|
32
41
|
|
33
|
-
Same syntax applies for `put`, `patch` and `delete` requests.
|
42
|
+
Same syntax applies for `put`, `patch` and `delete` requests.
|
43
|
+
|
44
|
+
# Options
|
45
|
+
|
46
|
+
These are all the available options.
|
34
47
|
|
35
48
|
```rb
|
36
49
|
opts = {
|
50
|
+
json: true, # converts params object to JSON and sets Content-Type header. (POST/PUT/PATCH only)
|
37
51
|
follow: true, # follow redirects (10 by default)
|
38
52
|
headers: { 'Accept': 'text/xml' },
|
39
53
|
username: 'dagger', # for HTTP auth
|
40
54
|
password: 'fidelio',
|
55
|
+
verify_ssl: false, # true by default
|
41
56
|
open_timeout: 30,
|
42
57
|
read_timeout: 30
|
43
58
|
}
|
data/lib/dagger.rb
CHANGED
@@ -1,18 +1,4 @@
|
|
1
1
|
# Dagger.
|
2
|
-
# Simple Net::HTTP wrapper (in less than 100 LOC)
|
3
|
-
# Written by Tomas Pollak
|
4
|
-
|
5
|
-
# Example Usage ---------------------------------
|
6
|
-
#
|
7
|
-
# resp, body = Dagger.get('http://google.com')
|
8
|
-
# puts body if resp.code == 200
|
9
|
-
#
|
10
|
-
# opts = { username: 'foobar', password: 'secret' }
|
11
|
-
# resp, body = Dagger.get('http://api.server.com', opts)
|
12
|
-
#
|
13
|
-
# opts = { verify_ssl: false, open_timeout: 30 }
|
14
|
-
# resp, body = Dagger.post('http://twitter.com', { foo: 'bar' }, opts)
|
15
|
-
|
16
2
|
require 'dagger/version'
|
17
3
|
require 'dagger/response'
|
18
4
|
require 'dagger/parsers'
|
@@ -28,16 +14,14 @@ module Dagger
|
|
28
14
|
}
|
29
15
|
|
30
16
|
def self.get(uri, query = nil, opts = {})
|
31
|
-
raise ArgumentError.new("Empty URL!") if (uri || '').strip == ''
|
32
|
-
|
33
17
|
opts[:follow] = 10 if opts[:follow] == true
|
34
|
-
uri = parse_uri(uri)
|
35
|
-
uri.query = encode(opts[:query]) if opts[:query]
|
36
18
|
|
37
|
-
|
38
|
-
|
19
|
+
uri = parse_uri(uri)
|
20
|
+
uri.query = encode(opts[:query]) if opts[:query]
|
21
|
+
http = client(uri, opts)
|
22
|
+
request = Net::HTTP::Get.new(uri.request_uri, DEFAULT_HEADERS.merge(opts[:headers] || {}))
|
39
23
|
|
40
|
-
if opts[:username] && opts[:password]
|
24
|
+
if opts[:username] # && opts[:password]
|
41
25
|
request.basic_auth(opts.delete(:username), opts.delete(:password))
|
42
26
|
end
|
43
27
|
|
@@ -71,14 +55,21 @@ module Dagger
|
|
71
55
|
private
|
72
56
|
|
73
57
|
def self.request(method, uri, params, opts = {})
|
74
|
-
|
75
|
-
uri = parse_uri(uri)
|
76
|
-
query = params.is_a?(String) ? params : encode(params)
|
77
|
-
|
58
|
+
uri = parse_uri(uri)
|
78
59
|
headers = opts[:headers] || {}
|
79
60
|
|
80
|
-
|
81
|
-
|
61
|
+
query = if params.is_a?(String)
|
62
|
+
params
|
63
|
+
elsif opts[:json]
|
64
|
+
Oj.dump(params) # convert to JSON
|
65
|
+
headers['Content-Type'] = 'application/json'
|
66
|
+
else
|
67
|
+
encode(params)
|
68
|
+
end
|
69
|
+
|
70
|
+
if opts[:username] # opts[:password] is optional
|
71
|
+
str = [opts[:username], opts[:password]].compact.join(':')
|
72
|
+
headers['Authorization'] = "Basic " + Base64.encode64(str)
|
82
73
|
end
|
83
74
|
|
84
75
|
args = [method, uri.path, query, headers]
|
@@ -99,7 +90,7 @@ module Dagger
|
|
99
90
|
http.open_timeout = opts[:open_timeout] if opts[:open_timeout]
|
100
91
|
http.read_timeout = opts[:read_timeout] if opts[:read_timeout]
|
101
92
|
http.use_ssl = true if uri.port == 443
|
102
|
-
http.verify_mode = opts[:verify_ssl] ? OpenSSL::SSL::
|
93
|
+
http.verify_mode = opts[:verify_ssl] === false ? OpenSSL::SSL::VERIFY_NONE : OpenSSL::SSL::VERIFY_PEER
|
103
94
|
http
|
104
95
|
end
|
105
96
|
|
data/lib/dagger/version.rb
CHANGED