wrest 2.1.7 → 2.1.9
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/CHANGELOG +3 -0
- data/README.md +35 -21
- data/lib/wrest/async_request/thread_pool.rb +3 -43
- data/lib/wrest/native/request.rb +10 -12
- data/lib/wrest/version.rb +1 -1
- data/lib/wrest.rb +1 -0
- metadata +32 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 69a30e75377430e134d3be264b50b1e97e823152
|
|
4
|
+
data.tar.gz: f721a616192a527d21afa74c0adba3dd3dfd5b41
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 94db9fae0c8540e80497fb182b2d8634fbc6fdc8e7fd374fe13931b348244513ffaab8128c76369a92b2fb45bd018cbd7817d6529fc80b4ad5077f085fb47165
|
|
7
|
+
data.tar.gz: 1e411d00090ff33e317774678a9072b20689862f3e2879715f4b5d95baea7b90459a52d7a0e00e21a85b9ac9922d55305018dcf83d99c21ca0eca04e2d83a4ce
|
data/CHANGELOG
CHANGED
data/README.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
[](https://travis-ci.org/c42/wrest)
|
|
2
2
|
|
|
3
|
-
# Wrest 2.1.
|
|
3
|
+
# Wrest 2.1.9
|
|
4
4
|
|
|
5
5
|
(c) Copyright 2009-2016 [Sidu Ponnappa](http://twitter.com/ponnappa). All Rights Reserved.
|
|
6
6
|
|
|
7
7
|
Wrest is a ruby REST/HTTP client library which
|
|
8
8
|
|
|
9
9
|
* Allows you to use Net::HTTP
|
|
10
|
-
* Allows you to pick your Ruby: use 2.x.x, JRuby
|
|
10
|
+
* Allows you to pick your Ruby: use 2.x.x, JRuby 9.x.x
|
|
11
11
|
* Supports RFC 2616 based [caching](https://github.com/kaiwren/wrest/blob/caching/Caching.markdown)
|
|
12
12
|
* Async http calls using Threads (reliable only on JRuby) or EventMachine
|
|
13
13
|
* Allows you to quickly build object oriented wrappers around any web service
|
|
@@ -37,15 +37,15 @@ For Facebook, Twitter, Delicious, GitHub and other API examples, see http://gith
|
|
|
37
37
|
* Timeout support
|
|
38
38
|
|
|
39
39
|
```
|
|
40
|
-
'https://api.github.com/repos/c42/wrest/issues'.to_uri.get(:
|
|
40
|
+
'https://api.github.com/repos/c42/wrest/issues'.to_uri.get(timeout: 5).body
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
* Redirect support
|
|
44
44
|
|
|
45
45
|
```
|
|
46
|
-
'http://google.com'.to_uri(:
|
|
46
|
+
'http://google.com'.to_uri(follow_redirects: false).get
|
|
47
47
|
|
|
48
|
-
'http://google.com'.to_uri(:
|
|
48
|
+
'http://google.com'.to_uri(follow_redirects_limit: 1).get
|
|
49
49
|
```
|
|
50
50
|
|
|
51
51
|
:follow_redirects_limit defaults to 5 if not specified.
|
|
@@ -56,7 +56,7 @@ For Facebook, Twitter, Delicious, GitHub and other API examples, see http://gith
|
|
|
56
56
|
ActiveSupport::XmlMini.backend = 'REXML'
|
|
57
57
|
|
|
58
58
|
'http://twitter.com/statuses/public_timeline.xml'.to_uri.get.deserialise(
|
|
59
|
-
:
|
|
59
|
+
xpath: '//user/name/text()'
|
|
60
60
|
)
|
|
61
61
|
```
|
|
62
62
|
|
|
@@ -64,8 +64,8 @@ For Facebook, Twitter, Delicious, GitHub and other API examples, see http://gith
|
|
|
64
64
|
|
|
65
65
|
```
|
|
66
66
|
'api.openweathermap.org/data/2.5/weather'.to_uri.get(
|
|
67
|
-
:
|
|
68
|
-
:
|
|
67
|
+
lat: 35,
|
|
68
|
+
lon: 139
|
|
69
69
|
).deserialise_using(
|
|
70
70
|
Wrest::Components::Translators::Xml
|
|
71
71
|
)
|
|
@@ -74,10 +74,16 @@ For Facebook, Twitter, Delicious, GitHub and other API examples, see http://gith
|
|
|
74
74
|
* Basic HTTP auth and URI extensions using Wrest::Uri#[]
|
|
75
75
|
|
|
76
76
|
```
|
|
77
|
-
base_uri = 'https://api.del.icio.us/v1'.to_uri(:
|
|
77
|
+
base_uri = 'https://api.del.icio.us/v1'.to_uri(username: 'kaiwren', password: 'fupupp1es')
|
|
78
78
|
bookmarks = base_uri['/posts/get'].get.deserialise
|
|
79
79
|
```
|
|
80
80
|
|
|
81
|
+
* Detailed debugging and logging (NOT FOR USE IN PRODUCTION! SEE API DOCS!)
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
'https://api.github.com/repos/c42/wrest/issues'.to_uri(detailed_http_logging: $stdout).get.deserialize
|
|
85
|
+
```
|
|
86
|
+
|
|
81
87
|
#### POST
|
|
82
88
|
|
|
83
89
|
* Regular, vanilla Post with a body and headers
|
|
@@ -90,12 +96,12 @@ For Facebook, Twitter, Delicious, GitHub and other API examples, see http://gith
|
|
|
90
96
|
|
|
91
97
|
```
|
|
92
98
|
'https://api.del.icio.us/v1/posts/add'.to_uri(
|
|
93
|
-
:
|
|
99
|
+
username: 'kaiwren', password: 'fupupp1es'
|
|
94
100
|
).post_form(
|
|
95
|
-
:
|
|
96
|
-
:
|
|
97
|
-
:
|
|
98
|
-
:
|
|
101
|
+
url: 'http://blog.sidu.in/search/label/ruby',
|
|
102
|
+
description: 'The Ruby related posts on my blog!',
|
|
103
|
+
extended: "All posts tagged with 'ruby'",
|
|
104
|
+
tags: 'ruby hacking'
|
|
99
105
|
)
|
|
100
106
|
```
|
|
101
107
|
|
|
@@ -103,8 +109,8 @@ For Facebook, Twitter, Delicious, GitHub and other API examples, see http://gith
|
|
|
103
109
|
|
|
104
110
|
```
|
|
105
111
|
'http://imgur.com/api/upload.xml'.to_uri.post_multipart(
|
|
106
|
-
:
|
|
107
|
-
:
|
|
112
|
+
image: UploadIO.new(File.open(file_path), "image/png", file_path),
|
|
113
|
+
key: imgur_key
|
|
108
114
|
).deserialise
|
|
109
115
|
```
|
|
110
116
|
|
|
@@ -116,13 +122,14 @@ To delete a resource:
|
|
|
116
122
|
|
|
117
123
|
```
|
|
118
124
|
'https://api.del.icio.us/v1/posts/delete'.to_uri(
|
|
119
|
-
:
|
|
120
|
-
:
|
|
125
|
+
username: 'kaiwren',
|
|
126
|
+
password: 'fupupp1es'
|
|
121
127
|
).delete(
|
|
122
|
-
:
|
|
128
|
+
url: 'http://c2.com'
|
|
123
129
|
)
|
|
124
130
|
```
|
|
125
131
|
|
|
132
|
+
|
|
126
133
|
### Caching
|
|
127
134
|
|
|
128
135
|
Wrest supports caching with the following pluggable back-ends:
|
|
@@ -199,7 +206,7 @@ To explicitly disable caching for specific requests:
|
|
|
199
206
|
You can define a set of callbacks that are invoked based on the http codes of the responses to any requests on a given uri.
|
|
200
207
|
|
|
201
208
|
```
|
|
202
|
-
"http://google.com".to_uri(:
|
|
209
|
+
"http://google.com".to_uri(callback: {
|
|
203
210
|
200 => lambda {|response| Wrest.logger.info "Ok." },
|
|
204
211
|
400..499 => lambda {|response| Wrest.logger.error "Invalid. #{response.body}"},
|
|
205
212
|
300..302 => lambda {|response| Wrest.logger.debug "Redirected. #{response.message}" }
|
|
@@ -339,6 +346,13 @@ The response log consists of request type that generated the response (POST), ha
|
|
|
339
346
|
|
|
340
347
|
The thread id, request hash and connection hashes are used to track requests and their corresponding responses when using asynchronous requests and/or http connection pooling.
|
|
341
348
|
|
|
349
|
+
Detailed http debug logging can be turned on like so (DO NOT USE IN PRODUCTION! SEE API DOCS.):
|
|
350
|
+
|
|
351
|
+
```
|
|
352
|
+
'https://api.github.com/repos/c42/wrest/issues'.to_uri(detailed_http_logging: $stdout).get.deserialize
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
|
|
342
356
|
### Json Backend
|
|
343
357
|
|
|
344
358
|
Wrest uses the multi_json gem to manage Json backends, allowing it to play nice with Rails 3.1. To change the backend used, you can do the following:
|
|
@@ -375,7 +389,7 @@ You can launch the interactive Wrest shell by running bin/wrest if you have the
|
|
|
375
389
|
|
|
376
390
|
```
|
|
377
391
|
$ wrest
|
|
378
|
-
>> y 'http://twitter.com/statuses/public_timeline.json'.to_uri(:
|
|
392
|
+
>> y 'http://twitter.com/statuses/public_timeline.json'.to_uri(timeout: 5).get.deserialise
|
|
379
393
|
```
|
|
380
394
|
|
|
381
395
|
### Testing
|
|
@@ -11,56 +11,16 @@ module Wrest
|
|
|
11
11
|
module AsyncRequest
|
|
12
12
|
class ThreadPool
|
|
13
13
|
def initialize(number_of_threads)
|
|
14
|
-
@
|
|
15
|
-
@number_of_threads = number_of_threads
|
|
16
|
-
@queue = Queue.new
|
|
14
|
+
@pool = Concurrent::FixedThreadPool.new(number_of_threads)
|
|
17
15
|
end
|
|
18
16
|
|
|
19
17
|
def execute_eventually(request)
|
|
20
|
-
|
|
21
|
-
@queue.push(request)
|
|
18
|
+
@pool.post { request.invoke }
|
|
22
19
|
nil
|
|
23
20
|
end
|
|
24
21
|
|
|
25
22
|
def join_pool_threads!
|
|
26
|
-
@
|
|
27
|
-
thread.join if thread.alive?
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
private
|
|
32
|
-
def initialize_thread_pool
|
|
33
|
-
halt_on_sigint
|
|
34
|
-
halt_on_int
|
|
35
|
-
main_thread = Thread.current
|
|
36
|
-
@threads = @number_of_threads.times.map do |i|
|
|
37
|
-
Thread.new do |thread|
|
|
38
|
-
while request = @queue.pop
|
|
39
|
-
request.invoke
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def halt_on_sigint
|
|
46
|
-
trap('SIGINT') do
|
|
47
|
-
halt
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def halt_on_int
|
|
52
|
-
trap('INT') do
|
|
53
|
-
halt
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def halt
|
|
58
|
-
unless @threads.empty?
|
|
59
|
-
Wrest.logger.debug "Wrest: Shutting down ThreadPool..."
|
|
60
|
-
@threads.each(&:terminate)
|
|
61
|
-
Wrest.logger.debug "Wrest: Halted ThreadPool, continuing with shutdown."
|
|
62
|
-
end
|
|
63
|
-
Process.exit
|
|
23
|
+
@pool.wait_for_termination
|
|
64
24
|
end
|
|
65
25
|
end
|
|
66
26
|
end
|
data/lib/wrest/native/request.rb
CHANGED
|
@@ -13,7 +13,7 @@ module Wrest::Native
|
|
|
13
13
|
# or Wrest::Native::Get etc. instead.
|
|
14
14
|
class Request
|
|
15
15
|
attr_reader :http_request, :uri, :body, :headers, :username, :password, :follow_redirects,
|
|
16
|
-
:follow_redirects_limit, :follow_redirects_count, :timeout, :connection, :parameters,
|
|
16
|
+
:follow_redirects_limit, :follow_redirects_count, :timeout, :connection, :parameters,
|
|
17
17
|
:cache_store, :verify_mode, :options, :ca_path
|
|
18
18
|
# Valid tuples for the options are:
|
|
19
19
|
# :username => String, defaults to nil
|
|
@@ -25,10 +25,10 @@ module Wrest::Native
|
|
|
25
25
|
# For example, if you set this to 1, the very first redirect
|
|
26
26
|
# will raise the exception.
|
|
27
27
|
# :follow_redirects_count => Integer, defaults to 0. This is a count of the hops made to
|
|
28
|
-
# get to this request and increases by one for every redirect
|
|
28
|
+
# get to this request and increases by one for every redirect
|
|
29
29
|
# until the follow_redirects_limit is hit. You should never set
|
|
30
30
|
# this option yourself.
|
|
31
|
-
# :timeout => The period, in seconds, after which a Timeout::Error is raised
|
|
31
|
+
# :timeout => The period, in seconds, after which a Timeout::Error is raised
|
|
32
32
|
# in the event of a connection failing to open. Defaulted to 60 by Uri#create_connection.
|
|
33
33
|
# :connection => The HTTP Connection object to use. This is how a keep-alive connection can be
|
|
34
34
|
# used for multiple requests.
|
|
@@ -38,7 +38,7 @@ module Wrest::Native
|
|
|
38
38
|
# eg: { <response code> => lambda { |response| some_operation } }
|
|
39
39
|
# The following options are Net::HTTP specific config options
|
|
40
40
|
# :detailed_http_logging => nil/$stdout/$stderr or File/Logger/IO object. Defaults to nil (recommended).
|
|
41
|
-
# *WARNING* : detailed_http_logging causes a serious security hole. Never use it in production code.
|
|
41
|
+
# *WARNING* : detailed_http_logging causes a serious security hole. Never use it in production code.
|
|
42
42
|
# :verify_mode => The verification mode to be used for Net::HTTP https connections. Defaults to OpenSSL::SSL::VERIFY_PEER
|
|
43
43
|
# :ca_path => The path to the certificates
|
|
44
44
|
def initialize(wrest_uri, http_request_klass, parameters = {}, body = nil, headers = {}, options = {})
|
|
@@ -65,20 +65,20 @@ module Wrest::Native
|
|
|
65
65
|
|
|
66
66
|
# Makes a request, runs the appropriate callback if any and
|
|
67
67
|
# returns a Wrest::Native::Response.
|
|
68
|
-
#
|
|
68
|
+
#
|
|
69
69
|
# Data about the request is and logged to Wrest.logger
|
|
70
70
|
# The log entry contains the following information:
|
|
71
71
|
#
|
|
72
72
|
# <- indicates a request
|
|
73
73
|
# -> indicates a response
|
|
74
74
|
#
|
|
75
|
-
# The type of request is mentioned in caps, followed by a hash
|
|
75
|
+
# The type of request is mentioned in caps, followed by a hash
|
|
76
76
|
# uniquely identifying a particular request/response pair.
|
|
77
77
|
# In a multi-process or multi-threaded scenario, this can be used
|
|
78
78
|
# to identify request-response pairs.
|
|
79
79
|
#
|
|
80
80
|
# The request hash is followed by a connection hash; requests using the
|
|
81
|
-
# same connection (effectively a keep-alive connection) will have the
|
|
81
|
+
# same connection (effectively a keep-alive connection) will have the
|
|
82
82
|
# same connection hash.
|
|
83
83
|
#
|
|
84
84
|
# This is followed by the response code, the payload size and the time taken.
|
|
@@ -89,15 +89,13 @@ module Wrest::Native
|
|
|
89
89
|
http_request.basic_auth username, password unless username.nil? || password.nil?
|
|
90
90
|
|
|
91
91
|
prefix = "#{http_request.method} #{self.hash} #{@connection.hash} #{Thread.current.object_id}"
|
|
92
|
-
|
|
92
|
+
|
|
93
93
|
Wrest.logger.debug "<- (#{prefix}) #{@uri.protocol}://#{@uri.host}:#{@uri.port}#{@http_request.path}"
|
|
94
94
|
Wrest.logger.debug "<- Body: #{@body}"
|
|
95
95
|
time = Benchmark.realtime { response = Wrest::Native::Response.new( do_request ) }
|
|
96
|
-
Wrest.logger.debug "-> (#{prefix}) %d %s (%d bytes %.2fs)" % [response.code, response.message, response.body ? response.body.length : 0, time]
|
|
97
|
-
Wrest.logger.debug "#{response.body}"
|
|
98
96
|
|
|
99
97
|
execute_callback_if_any(response)
|
|
100
|
-
|
|
98
|
+
|
|
101
99
|
@follow_redirects ? response.follow(@options) : response
|
|
102
100
|
rescue Timeout::Error => e
|
|
103
101
|
raise Wrest::Exceptions::Timeout.new(e)
|
|
@@ -111,7 +109,7 @@ module Wrest::Native
|
|
|
111
109
|
request_klass.new(parameters.empty? ? "#{uri.uri_path}" : "#{uri.uri_path}?#{parameters.to_query}", headers)
|
|
112
110
|
end
|
|
113
111
|
end
|
|
114
|
-
|
|
112
|
+
|
|
115
113
|
#:nodoc:
|
|
116
114
|
def do_request
|
|
117
115
|
@connection.request(@http_request, @body)
|
data/lib/wrest/version.rb
CHANGED
data/lib/wrest.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: wrest
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.1.
|
|
4
|
+
version: 2.1.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sidu Ponnappa
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2017-01-13 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rspec
|
|
@@ -95,9 +95,37 @@ dependencies:
|
|
|
95
95
|
- - "~>"
|
|
96
96
|
- !ruby/object:Gem::Version
|
|
97
97
|
version: '1.0'
|
|
98
|
+
- !ruby/object:Gem::Dependency
|
|
99
|
+
name: concurrent-ruby
|
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
|
101
|
+
requirements:
|
|
102
|
+
- - "~>"
|
|
103
|
+
- !ruby/object:Gem::Version
|
|
104
|
+
version: '1.0'
|
|
105
|
+
type: :runtime
|
|
106
|
+
prerelease: false
|
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
108
|
+
requirements:
|
|
109
|
+
- - "~>"
|
|
110
|
+
- !ruby/object:Gem::Version
|
|
111
|
+
version: '1.0'
|
|
112
|
+
- !ruby/object:Gem::Dependency
|
|
113
|
+
name: json
|
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
|
115
|
+
requirements:
|
|
116
|
+
- - "~>"
|
|
117
|
+
- !ruby/object:Gem::Version
|
|
118
|
+
version: '2.0'
|
|
119
|
+
type: :runtime
|
|
120
|
+
prerelease: false
|
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
122
|
+
requirements:
|
|
123
|
+
- - "~>"
|
|
124
|
+
- !ruby/object:Gem::Version
|
|
125
|
+
version: '2.0'
|
|
98
126
|
description: Wrest is a fluent, easy-to-use, object oriented Ruby HTTP/REST client
|
|
99
127
|
library with support for RFC2616 HTTP caching, multiple HTTP backends and async
|
|
100
|
-
calls
|
|
128
|
+
calls. It runs on CRuby and JRuby and is in production use at substantial scale.
|
|
101
129
|
email:
|
|
102
130
|
- sidu@c42.in
|
|
103
131
|
executables:
|
|
@@ -201,7 +229,7 @@ requirements:
|
|
|
201
229
|
(and should be unneccessary) on jruby.
|
|
202
230
|
- To use eventmachine as a parallel backend, install the 'eventmachine' gem.
|
|
203
231
|
rubyforge_project: wrest
|
|
204
|
-
rubygems_version: 2.
|
|
232
|
+
rubygems_version: 2.6.8
|
|
205
233
|
signing_key:
|
|
206
234
|
specification_version: 4
|
|
207
235
|
summary: Wrest is a fluent, object oriented HTTP client library for 2.x.x, JRuby 1.7.6
|