hoick 0.0.3 → 0.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/README.md +18 -10
- data/hoick.gemspec +1 -1
- data/lib/hoick/command.rb +58 -33
- data/lib/hoick/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0003e566cb04c2c3704564ddfbbbf643f4574322
|
4
|
+
data.tar.gz: efbd89eb6c6b7fbe3a2fd12bd6d8f32faf0340b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d58fdcddc91db51bc7d06be0407af0df00f376bf4daa695a72c2db36fd81b5e42b9cddb19dc516f6326052a83d21a84fde7461b1b4de1b458c2611eed9a731d5
|
7
|
+
data.tar.gz: 222734633bae1b63c7e9e1ffe9079d4d76b43a2612e7c480c52691755b449e752b324383d566c8efac2154ce22dbade0d71a6b538ec36ec2ac054ceb3fc41749
|
data/README.md
CHANGED
@@ -1,24 +1,32 @@
|
|
1
1
|
# Hoick
|
2
2
|
|
3
|
-
|
3
|
+
Hoick is a command-line HTTP client. It's intended mainly as a tool for testing RESTful APIs, but you can use for something else, if you really want to.
|
4
|
+
|
5
|
+
Hoick is designed to be simple yet useful, and to play nicely in a Unix command pipeline.
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
7
|
-
|
9
|
+
Hoick is distributed as a Ruby gem, installable using:
|
8
10
|
|
9
|
-
gem
|
11
|
+
$ gem install hoick
|
10
12
|
|
11
|
-
|
13
|
+
## Usage
|
12
14
|
|
13
|
-
|
15
|
+
Hoick has subcommands modelled on HTTP verbs.
|
14
16
|
|
15
|
-
|
17
|
+
### GET
|
16
18
|
|
17
|
-
|
19
|
+
To fetch a resource, use GET. The response body will be printed to STDOUT.
|
18
20
|
|
19
|
-
|
21
|
+
If you're interested in response headers too, add the "`-h`" flag. Add the "`--follow`" flag if you wish to follow redirects.
|
22
|
+
|
23
|
+
### PUT and POST
|
24
|
+
|
25
|
+
The "PUT" subcommand uploads data to a specified URL. By default, the payload is read from STDIN, but you can specify the "`-F`" option to read it from a file, instead.
|
26
|
+
|
27
|
+
Hoick guesses a "Content-Type" from the file-name. If a type cannot be guessed, or if the payload is sourced from STDIN, binary data ("application/octet-stream") is assumed. Either way, the default can be overridden with "`-T`" (which can be either a file extension, or a full MIME-type string).
|
20
28
|
|
21
|
-
|
29
|
+
The "POST" subcommand works in a similar way.
|
22
30
|
|
23
31
|
## Contributing
|
24
32
|
|
@@ -26,4 +34,4 @@ TODO: Write usage instructions here
|
|
26
34
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
35
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
36
|
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
-
5.
|
37
|
+
5. Submit a Pull Request
|
data/hoick.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Hoick::VERSION
|
9
9
|
spec.authors = ["Mike Williams"]
|
10
10
|
spec.email = ["mdub@dogbiscuit.org"]
|
11
|
-
spec.description = %q{A command-line HTTP client}
|
12
11
|
spec.summary = %q{A command-line HTTP client}
|
12
|
+
spec.description = File.read("README.md").split("\n\n")[1]
|
13
13
|
spec.homepage = "https://github.com/mdub/hoick"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
data/lib/hoick/command.rb
CHANGED
@@ -31,28 +31,43 @@ module Hoick
|
|
31
31
|
|
32
32
|
option ["--debug"], :flag, "debug"
|
33
33
|
|
34
|
+
def follow_redirects?
|
35
|
+
false
|
36
|
+
end
|
37
|
+
|
34
38
|
subcommand ["get", "GET"], "HTTP GET" do
|
35
39
|
|
36
|
-
option ["--follow"], :flag, "follow redirects"
|
40
|
+
option ["--follow"], :flag, "follow redirects", :attribute_name => :follow_redirects
|
37
41
|
|
38
42
|
declare_url_parameter
|
39
43
|
|
40
44
|
def execute
|
41
|
-
|
42
|
-
display_response(response)
|
43
|
-
end
|
45
|
+
get(full_url, &method(:display_response))
|
44
46
|
end
|
45
47
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
callback.call(response)
|
53
|
-
end
|
48
|
+
private
|
49
|
+
|
50
|
+
def get(uri, &callback)
|
51
|
+
http_request("GET", uri) do |response|
|
52
|
+
if follow_redirects? && response.kind_of?(Net::HTTPRedirection)
|
53
|
+
raise Redirected, response['location']
|
54
54
|
end
|
55
|
+
callback.call(response)
|
56
|
+
end
|
57
|
+
rescue Redirected => e
|
58
|
+
uri = URI(e.location)
|
59
|
+
retry
|
60
|
+
end
|
61
|
+
|
62
|
+
class Redirected < StandardError
|
63
|
+
|
64
|
+
def initialize(location)
|
65
|
+
@location = location
|
66
|
+
super("Redirected to #{location}")
|
55
67
|
end
|
68
|
+
|
69
|
+
attr_reader :location
|
70
|
+
|
56
71
|
end
|
57
72
|
|
58
73
|
end
|
@@ -98,15 +113,7 @@ module Hoick
|
|
98
113
|
declare_url_parameter
|
99
114
|
|
100
115
|
def execute
|
101
|
-
|
102
|
-
with_http_connection do |http, uri|
|
103
|
-
post = Net::HTTP::Post.new(uri.request_uri)
|
104
|
-
post["Content-Type"] = content_type
|
105
|
-
post.body = content
|
106
|
-
http.request(post) do |response|
|
107
|
-
display_response(response)
|
108
|
-
end
|
109
|
-
end
|
116
|
+
http_request("POST", full_url, payload, content_type, &method(:display_response))
|
110
117
|
end
|
111
118
|
|
112
119
|
end
|
@@ -118,22 +125,14 @@ module Hoick
|
|
118
125
|
declare_url_parameter
|
119
126
|
|
120
127
|
def execute
|
121
|
-
|
122
|
-
with_http_connection do |http, uri|
|
123
|
-
put = Net::HTTP::Put.new(uri.request_uri)
|
124
|
-
put["Content-Type"] = content_type
|
125
|
-
put.body = content
|
126
|
-
http.request(put) do |response|
|
127
|
-
display_response(response)
|
128
|
-
end
|
129
|
-
end
|
128
|
+
http_request("PUT", full_url, payload, content_type, &method(:display_response))
|
130
129
|
end
|
131
130
|
|
132
131
|
end
|
133
132
|
|
134
133
|
private
|
135
134
|
|
136
|
-
def
|
135
|
+
def full_url
|
137
136
|
if base_url
|
138
137
|
base_url + url
|
139
138
|
else
|
@@ -141,11 +140,37 @@ module Hoick
|
|
141
140
|
end
|
142
141
|
end
|
143
142
|
|
144
|
-
def
|
143
|
+
def http_request(method, uri, content = nil, content_type = nil, &callback)
|
144
|
+
request = build_request(method, uri, content, content_type)
|
145
|
+
with_http_connection(uri) do |http|
|
146
|
+
http.request(request) do |response|
|
147
|
+
if follow_redirects? && response.kind_of?(Net::HTTPRedirection)
|
148
|
+
raise Redirected, response['location']
|
149
|
+
end
|
150
|
+
callback.call(response)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
rescue Redirected => e
|
154
|
+
uri = URI(e.location)
|
155
|
+
retry
|
156
|
+
end
|
157
|
+
|
158
|
+
def build_request(method, uri, content, content_type)
|
159
|
+
request_class = Net::HTTP.const_get(method.to_s.capitalize)
|
160
|
+
request = request_class.new(uri.request_uri)
|
161
|
+
if content
|
162
|
+
request["Content-Type"] = content_type
|
163
|
+
request.body = content
|
164
|
+
end
|
165
|
+
request
|
166
|
+
end
|
167
|
+
|
168
|
+
def with_http_connection(uri)
|
145
169
|
http = Net::HTTP.new(uri.host, uri.port)
|
170
|
+
http.use_ssl = (uri.scheme == "https")
|
146
171
|
http.set_debug_output($stderr) if debug?
|
147
172
|
http.start do
|
148
|
-
yield http
|
173
|
+
yield http
|
149
174
|
end
|
150
175
|
end
|
151
176
|
|
data/lib/hoick/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hoick
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-04-
|
11
|
+
date: 2013-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mime-types
|
@@ -24,7 +24,9 @@ dependencies:
|
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.22'
|
27
|
-
description:
|
27
|
+
description: Hoick is a command-line HTTP client. It's intended mainly as a tool
|
28
|
+
for testing RESTful APIs, but you can use for something else, if you really want
|
29
|
+
to.
|
28
30
|
email:
|
29
31
|
- mdub@dogbiscuit.org
|
30
32
|
executables:
|