wrest 1.3.0-universal-java-1.6 → 1.4.0-universal-java-1.6
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.
- data/CHANGELOG +5 -1
- data/README.rdoc +33 -14
- data/lib/wrest/async_request/event_machine_backend.rb +30 -0
- data/lib/wrest/async_request/thread_backend.rb +20 -0
- data/lib/wrest/async_request.rb +39 -0
- data/lib/wrest/{components/cache_store → caching}/memcached.rb +1 -1
- data/lib/wrest/caching.rb +42 -0
- data/lib/wrest/curl/response.rb +2 -1
- data/lib/wrest/multipart.rb +7 -11
- data/lib/wrest/native/get.rb +1 -1
- data/lib/wrest/native/request.rb +3 -3
- data/lib/wrest/native/response.rb +2 -1
- data/lib/wrest/uri.rb +56 -26
- data/lib/wrest/version.rb +1 -1
- data/lib/wrest.rb +9 -31
- metadata +10 -5
data/CHANGELOG
CHANGED
@@ -2,7 +2,11 @@ Features under the section marked 'Current' are completed but pending release as
|
|
2
2
|
|
3
3
|
Features under a numbered section are complete and available in the Wrest gem.
|
4
4
|
|
5
|
-
|
5
|
+
== 1.4.0
|
6
|
+
* GH#96 Naive implementation of asynchronous requests using Eventmachine
|
7
|
+
* GH#93 Since Wrest::Response is immutable, the results of Response#deserialise are cached
|
8
|
+
|
9
|
+
== 1.3.0
|
6
10
|
* GH#95 Asynchronous requests on Wrest::Uri.
|
7
11
|
|
8
12
|
== 1.2.1
|
data/README.rdoc
CHANGED
@@ -1,15 +1,17 @@
|
|
1
|
-
= Wrest 1.
|
1
|
+
= Wrest 1.4.0
|
2
2
|
|
3
3
|
(c) Copyright 2009-2011 {Sidu Ponnappa}[http://blog.sidu.in]. All Rights Reserved.
|
4
4
|
|
5
5
|
Wrest is a ruby REST/HTTP client library which
|
6
6
|
|
7
|
+
* Allows you to use Net::HTTP or libCurl
|
8
|
+
* Allows you to pick your Ruby: use 1.8.7, 1.9.2, JRuby and Rubinius ({Continuous Integration server}[http://ci.c42.in])
|
9
|
+
* Supports RFC 2616 based {caching}[https://github.com/kaiwren/wrest/blob/caching/Caching.markdown]
|
10
|
+
* [Alpha] Allows you to go async: use Threads or EventMachine
|
7
11
|
* Allows you to quickly build object oriented wrappers around any web service
|
8
|
-
*
|
12
|
+
* Is designed to be used as a library, not just a command line REST client (fewer class/static methods, more object oriented)
|
9
13
|
* Is spec driven, strongly favours immutable objects and avoids class methods and setters making it better suited for use as a library, especially in multi-threaded environments
|
10
|
-
*
|
11
|
-
* Provides convenient HTTP wrappers, redirect handling, serialisation, deserialisation and response {caching}[https://github.com/kaiwren/wrest/blob/caching/Caching.markdown]
|
12
|
-
* Supports using either Net::HTTP or libcurl as the underlying HTTP library
|
14
|
+
* Provides convenient HTTP wrappers, redirect handling, serialisation, deserialisation and xpath based lookup
|
13
15
|
|
14
16
|
To receive notifications whenever new features are added to Wrest, please subscribe to my {twitter feed}[http://twitter.com/ponnappa].
|
15
17
|
|
@@ -26,9 +28,11 @@ For Facebook, Twitter, Delicious, GitHub and other API examples, see http://gith
|
|
26
28
|
'http://twitter.com/statuses/public_timeline.json'.to_uri.get.deserialise # works with json and xml out of the box
|
27
29
|
|
28
30
|
'http://twitter.com/statuses/public_timeline.xml'.to_uri.get.deserialise # see lib/wrest/components/translators to add other formats
|
31
|
+
|
29
32
|
* Timeout support
|
30
33
|
|
31
34
|
'http://twitter.com/statuses/public_timeline.json'.to_uri.get(:timeout => 5).body
|
35
|
+
|
32
36
|
* Redirect support
|
33
37
|
|
34
38
|
'http://google.com'.to_uri(:follow_redirects => false).get
|
@@ -98,7 +102,7 @@ To delete a resource:
|
|
98
102
|
|
99
103
|
Wrest supports caching with pluggable back-ends.
|
100
104
|
|
101
|
-
Wrest.
|
105
|
+
Wrest::Caching.default_to_hash! # Hash should NEVER be used in a production environment. It is unbounded and will keep increasing in size.
|
102
106
|
c42 = "http://c42.in".to_uri.get
|
103
107
|
|
104
108
|
A Memcached based caching back-end is available in Wrest. You can get instructions on how to install Memcached on your system {here}[http://code.google.com/p/memcached/wiki/NewInstallFromPackage].
|
@@ -106,15 +110,12 @@ The Dalli gem is used by Wrest to interface with Memcached. Install dalli using
|
|
106
110
|
|
107
111
|
Use the following method to enable caching for all requests, and set Memcached as the default back-end.
|
108
112
|
|
109
|
-
Wrest.
|
113
|
+
Wrest::Caching.default_to_memcached!
|
110
114
|
|
111
115
|
For fine-grained control over the cache store (or to use multiple cache stores in the same codebase), you can use this API:
|
112
116
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
r1 = "http://c42.in".to_uri(:cache_store => memcache_store).get
|
117
|
-
r2 = "http://c42.in".to_uri(:cache_store => hash_store).get
|
117
|
+
r1 = "http://c42.in".to_uri.using_memcached.get
|
118
|
+
r2 = "http://c42.in".to_uri.using_hash.get
|
118
119
|
|
119
120
|
A detailed writeup regarding caching as defined by RFC 2616, and how Wrest implements caching is at {Wrest Caching Doc}[https://github.com/kaiwren/wrest/blob/master/Caching.markdown]
|
120
121
|
|
@@ -122,7 +123,7 @@ You can create your own back-ends for Wrest caching by implementing the interfac
|
|
122
123
|
|
123
124
|
To explicitly disable caching for specific requests:
|
124
125
|
|
125
|
-
"http://c42.in".to_uri
|
126
|
+
"http://c42.in".to_uri.disable_cache.get
|
126
127
|
|
127
128
|
=== Callbacks
|
128
129
|
|
@@ -161,12 +162,30 @@ Please note that Wrest is a synchronous library. All requests are blocking, and
|
|
161
162
|
Asynchronous requests are non-blocking. They do not return a response and the request is executed on a separate thread. The only way to access the response
|
162
163
|
while using asynchronous request is through callbacks.
|
163
164
|
|
164
|
-
|
165
|
+
Asynchronous requests support pluggable backends. The default backend used for asynchronous requests is ruby threads.
|
166
|
+
|
167
|
+
"http://c42.in".to_uri.get_async do |callback|
|
168
|
+
callback.on_ok do |response|
|
169
|
+
Wrest.logger.info "Ok."
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
sleep 1 # Causes thread created by get_async to execute
|
174
|
+
|
175
|
+
You can change the default to eventmachine.
|
176
|
+
|
177
|
+
Wrest::AsyncRequest.default_to_em!
|
178
|
+
|
179
|
+
You can also override the default on Uri objects.
|
180
|
+
|
181
|
+
"http://c42.in".to_uri.using_em.get_async do |callback|
|
165
182
|
callback.on_ok do |response|
|
166
183
|
Wrest.logger.info "Ok."
|
167
184
|
end
|
168
185
|
end
|
169
186
|
|
187
|
+
Note: The current implementation of asynchronous requests is currently in alpha and should not be used in production.
|
188
|
+
|
170
189
|
=== Other useful stuff
|
171
190
|
|
172
191
|
Allows any class to hold an attributes hash, somewhat like ActiveResource. It also supports several extensions to this base fuctionality such as support for typecasting attribute values. See examples/twitter.rb and examples/wow_realm_status.rb for more samples.
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Copyright 2009 Sidu Ponnappa
|
2
|
+
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at native://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
# Unless required by applicable law or agreed to in writing, software distributed under the License
|
7
|
+
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
8
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
9
|
+
|
10
|
+
begin
|
11
|
+
gem 'eventmachine', '~> 0.12.10'
|
12
|
+
rescue Gem::LoadError => e
|
13
|
+
Wrest.logger.debug "Eventmachine ~> 0.12.10 not found. Wrest uses Eventmachine to perform evented asynchronous requests"
|
14
|
+
raise e
|
15
|
+
end
|
16
|
+
|
17
|
+
require 'eventmachine'
|
18
|
+
|
19
|
+
module Wrest
|
20
|
+
module AsyncRequest
|
21
|
+
class EventMachineBackend
|
22
|
+
def execute(block)
|
23
|
+
EventMachine.run do
|
24
|
+
block.invoke
|
25
|
+
EventMachine.stop
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Copyright 2009 Sidu Ponnappa
|
2
|
+
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at native://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
# Unless required by applicable law or agreed to in writing, software distributed under the License
|
7
|
+
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
8
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
9
|
+
|
10
|
+
module Wrest
|
11
|
+
module AsyncRequest
|
12
|
+
class ThreadBackend
|
13
|
+
def execute(block)
|
14
|
+
Thread.new do
|
15
|
+
block.invoke
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# Copyright 2009 Sidu Ponnappa
|
2
|
+
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at native://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
# Unless required by applicable law or agreed to in writing, software distributed under the License
|
7
|
+
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
8
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
9
|
+
|
10
|
+
|
11
|
+
module Wrest
|
12
|
+
module AsyncRequest
|
13
|
+
# Loads Wrest eventmachine backend alongwith eventmachine gem
|
14
|
+
def self.enable_em
|
15
|
+
require "#{Wrest::Root}/wrest/async_request/event_machine_backend"
|
16
|
+
end
|
17
|
+
|
18
|
+
# Assign default backend to be used for asynchronous request. Default is to use threads
|
19
|
+
def self.default_backend=(backend)
|
20
|
+
@default_backend = backend
|
21
|
+
end
|
22
|
+
|
23
|
+
# Assign default backend for asynchronous request to using eventmachine.
|
24
|
+
def self.default_to_em!
|
25
|
+
self.enable_em
|
26
|
+
self.default_backend = Wrest::AsyncRequest::EventMachineBackend.new
|
27
|
+
end
|
28
|
+
|
29
|
+
# Assign default backend for asynchronous request to using threads.
|
30
|
+
def self.default_to_threads!
|
31
|
+
self.default_backend = Wrest::AsyncRequest::ThreadBackend.new
|
32
|
+
end
|
33
|
+
|
34
|
+
# Returns the default backend
|
35
|
+
def self.default_backend
|
36
|
+
@default_backend
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Copyright 2009 Sidu Ponnappa
|
2
|
+
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at native://www.apache.org/licenses/LICENSE-2.0
|
6
|
+
# Unless required by applicable law or agreed to in writing, software distributed under the License
|
7
|
+
# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
8
|
+
# See the License for the specific language governing permissions and limitations under the License.
|
9
|
+
|
10
|
+
module Wrest
|
11
|
+
module Caching
|
12
|
+
# Loads the Memcached caching back-end and the Dalli gem
|
13
|
+
def self.enable_memcached
|
14
|
+
require "#{Wrest::Root}/wrest/caching/memcached"
|
15
|
+
end
|
16
|
+
|
17
|
+
# Configures Wrest to cache all requests. This will use a Ruby Hash.
|
18
|
+
# WARNING: This should NEVER be used in a real environment. The Hash will keep on growing since Wrest does not limit the size of a cache store.
|
19
|
+
#
|
20
|
+
# Use the Memcached caching back-end for production since the Memcached process uses an LRU based cache removal policy
|
21
|
+
# that keeps the number of entries stored within bounds.
|
22
|
+
def self.default_to_hash!
|
23
|
+
self.default_store = Hash.new
|
24
|
+
end
|
25
|
+
|
26
|
+
# Default Wrest to using memcached for caching requests.
|
27
|
+
def self.default_to_memcached!
|
28
|
+
self.enable_memcached
|
29
|
+
self.default_store = Wrest::Caching::Memcached.new
|
30
|
+
end
|
31
|
+
|
32
|
+
# Assign the default cache store to be used. Default is none.
|
33
|
+
def self.default_store=(store)
|
34
|
+
@default_store = store
|
35
|
+
end
|
36
|
+
|
37
|
+
# Returns the default store for caching, if any is set.
|
38
|
+
def self.default_store
|
39
|
+
@default_store
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/wrest/curl/response.rb
CHANGED
@@ -16,6 +16,7 @@ module Wrest #:nodoc:
|
|
16
16
|
# See HttpCodes for a list of all such response checkers.
|
17
17
|
class Response
|
18
18
|
attr_reader :http_response
|
19
|
+
attr_accessor :deserialised_body
|
19
20
|
include HttpShared::Headers
|
20
21
|
include HttpCodes
|
21
22
|
|
@@ -36,7 +37,7 @@ module Wrest #:nodoc:
|
|
36
37
|
end
|
37
38
|
|
38
39
|
def deserialise(options = {})
|
39
|
-
|
40
|
+
@deserialised_body ||= deserialise_using(Wrest::Components::Translators.lookup(content_type),options)
|
40
41
|
end
|
41
42
|
|
42
43
|
def deserialise_using(translator,options={})
|
data/lib/wrest/multipart.rb
CHANGED
@@ -46,13 +46,11 @@ module Wrest
|
|
46
46
|
# 'http://localhost:3000/uploads'.to_uri.post_multipart_async('file' => UploadIO.new(file, "image/jpg", '/path/to/image.jpg'))
|
47
47
|
# end
|
48
48
|
#
|
49
|
-
# Note: post_multipart_async does not return a response and the response should be accessed through callbacks
|
50
|
-
# This implementation of asynchronous post_multipart is
|
51
|
-
# Stable implementation of asynchronous requests involving thread pools would be out soon.
|
49
|
+
# Note: post_multipart_async does not return a response and the response should be accessed through callbacks.
|
50
|
+
# This implementation of asynchronous post_multipart is currently in alpha. Hence, it should not be used in production.
|
52
51
|
def post_multipart_async(parameters = {}, headers = {}, &block)
|
53
|
-
|
54
|
-
|
55
|
-
end
|
52
|
+
(@options[:asynchronous_backend] || Wrest::AsyncRequest.default_backend).execute(Http::PostMultipart.new(self, parameters, headers, block ? @options.merge(:callback_block => block) : @options))
|
53
|
+
nil
|
56
54
|
end
|
57
55
|
|
58
56
|
# Makes a multipart/form-data encoded PUT request to this URI. This is a convenience API
|
@@ -65,12 +63,10 @@ module Wrest
|
|
65
63
|
# that mimics a multipart form being put. I sincerely hope you never need to use this.
|
66
64
|
#
|
67
65
|
# Note: put_multipart_async does not return a response and the response should be accessed through callbacks
|
68
|
-
# This implementation of asynchronous put_multipart is
|
69
|
-
# Stable implementation of asynchronous requests involving thread pools would be out soon.
|
66
|
+
# This implementation of asynchronous put_multipart is currently in alpha. Hence, it should not be used in production.
|
70
67
|
def put_multipart_async(parameters = {}, headers = {}, &block)
|
71
|
-
|
72
|
-
|
73
|
-
end
|
68
|
+
(@options[:asynchronous_backend] || Wrest::AsyncRequest.default_backend).execute(Http::PutMultipart.new(self, parameters, headers, block ? @options.merge(:callback_block => block) : @options))
|
69
|
+
nil
|
74
70
|
end
|
75
71
|
end
|
76
72
|
|
data/lib/wrest/native/get.rb
CHANGED
@@ -15,7 +15,7 @@ module Wrest::Native
|
|
15
15
|
follow_redirects = options[:follow_redirects]
|
16
16
|
options[:follow_redirects] = (follow_redirects == nil ? true : follow_redirects)
|
17
17
|
|
18
|
-
cache_store = (options[:cache_store] || Wrest.
|
18
|
+
cache_store = (options[:cache_store] || Wrest::Caching.default_store) unless options[:disable_cache]
|
19
19
|
@cache_proxy = Wrest::CacheProxy::new(self, cache_store)
|
20
20
|
|
21
21
|
super(
|
data/lib/wrest/native/request.rb
CHANGED
@@ -57,8 +57,8 @@ module Wrest::Native
|
|
57
57
|
@cache_store = options[:cache_store]
|
58
58
|
@verify_mode = @options[:verify_mode]
|
59
59
|
@detailed_http_logging = options[:detailed_http_logging]
|
60
|
-
@
|
61
|
-
@
|
60
|
+
@callback = @options[:callback] || Wrest::Callback.new({})
|
61
|
+
@callback = @callback.merge(Wrest::Callback.new(@options[:callback_block] || {}))
|
62
62
|
end
|
63
63
|
|
64
64
|
# Makes a request, runs the appropriate callback if any and
|
@@ -115,7 +115,7 @@ module Wrest::Native
|
|
115
115
|
|
116
116
|
#:nodoc:
|
117
117
|
def execute_callback_if_any(actual_response)
|
118
|
-
@
|
118
|
+
@callback.execute(actual_response)
|
119
119
|
end
|
120
120
|
end
|
121
121
|
end
|
@@ -24,6 +24,7 @@ module Wrest #:nodoc:
|
|
24
24
|
# See HttpCodes for a list of all such response checkers.
|
25
25
|
class Response
|
26
26
|
attr_reader :http_response
|
27
|
+
attr_accessor :deserialised_body
|
27
28
|
include HttpCodes
|
28
29
|
|
29
30
|
extend Forwardable
|
@@ -73,7 +74,7 @@ module Wrest #:nodoc:
|
|
73
74
|
|
74
75
|
|
75
76
|
def deserialise(options = {})
|
76
|
-
|
77
|
+
@deserialised_body ||= deserialise_using(Wrest::Components::Translators.lookup(@http_response.content_type),options)
|
77
78
|
end
|
78
79
|
|
79
80
|
def deserialise_using(translator,options = {})
|
data/lib/wrest/uri.rb
CHANGED
@@ -26,7 +26,7 @@ module Wrest #:nodoc:
|
|
26
26
|
|
27
27
|
# See Wrest::Native::Request for the available options and their default values.
|
28
28
|
def initialize(uri_string, options = {})
|
29
|
-
@options = options
|
29
|
+
@options = options.clone
|
30
30
|
@uri_string = uri_string.to_s
|
31
31
|
@uri = URI.parse(@uri_string)
|
32
32
|
uri_scheme = URI.split(@uri_string)
|
@@ -35,6 +35,7 @@ module Wrest #:nodoc:
|
|
35
35
|
@query = uri_scheme[-2] || ''
|
36
36
|
@username = (@options[:username] ||= @uri.user)
|
37
37
|
@password = (@options[:password] ||= @uri.password)
|
38
|
+
@options[:callback] = Callback.new(@options[:callback]) if @options[:callback]
|
38
39
|
end
|
39
40
|
|
40
41
|
def to_template(pattern)
|
@@ -95,18 +96,53 @@ module Wrest #:nodoc:
|
|
95
96
|
Http::Get.new(self, parameters, headers, block ? @options.merge(:callback_block => block) : @options).invoke
|
96
97
|
end
|
97
98
|
|
99
|
+
# Returns a Uri object that uses threads to perform asynchronous requests.
|
100
|
+
def using_threads
|
101
|
+
options = @options.clone
|
102
|
+
options[:asynchronous_backend] = Wrest::AsyncRequest::ThreadBackend.new
|
103
|
+
Uri.new(uri_string, options)
|
104
|
+
end
|
105
|
+
|
106
|
+
# Returns a Uri object that uses eventmachine to perform asynchronous requests.
|
107
|
+
def using_em
|
108
|
+
options = @options.clone
|
109
|
+
Wrest::AsyncRequest.enable_em
|
110
|
+
options[:asynchronous_backend] = Wrest::AsyncRequest::EventMachineBackend.new
|
111
|
+
Uri.new(uri_string, options)
|
112
|
+
end
|
113
|
+
|
114
|
+
# Returns a Uri object that uses hash for caching responses.
|
115
|
+
def using_hash
|
116
|
+
options = @options.clone
|
117
|
+
options[:cache_store] = Hash.new
|
118
|
+
Uri.new(uri_string, options)
|
119
|
+
end
|
120
|
+
|
121
|
+
# Returns a Uri object that uses memcached for caching responses.
|
122
|
+
def using_memcached
|
123
|
+
options = @options.clone
|
124
|
+
Wrest::Caching.enable_memcached
|
125
|
+
options[:cache_store] = Wrest::Caching::Memcached.new
|
126
|
+
Uri.new(uri_string, options)
|
127
|
+
end
|
128
|
+
|
129
|
+
def disable_cache
|
130
|
+
options = @options.clone
|
131
|
+
Wrest::Caching.enable_memcached
|
132
|
+
options[:disable_cache] = true
|
133
|
+
Uri.new(uri_string, options)
|
134
|
+
end
|
135
|
+
|
98
136
|
# Make a GET request to this URI. This is a convenience API
|
99
137
|
# that creates a Wrest::Native::Get.
|
100
138
|
#
|
101
139
|
# Remember to escape all parameter strings if necessary, using URI.escape
|
102
140
|
#
|
103
141
|
# Note: get_async does not return a response and the response should be accessed through callbacks.
|
104
|
-
# This implementation of asynchronous get is
|
105
|
-
# Stable implementation of asynchronous requests involving thread pools would be out soon.
|
142
|
+
# This implementation of asynchronous get is currently in alpha. Hence, it should not be used in production.
|
106
143
|
def get_async(parameters = {}, headers = {}, &block)
|
107
|
-
|
108
|
-
|
109
|
-
end
|
144
|
+
(@options[:asynchronous_backend] || Wrest::AsyncRequest.default_backend).execute(Http::Get.new(self, parameters, headers, block ? @options.merge(:callback_block => block) : @options))
|
145
|
+
nil
|
110
146
|
end
|
111
147
|
|
112
148
|
# Make a PUT request to this URI. This is a convenience API
|
@@ -123,12 +159,10 @@ module Wrest #:nodoc:
|
|
123
159
|
# Remember to escape all parameter strings if necessary, using URI.escape
|
124
160
|
#
|
125
161
|
# Note: put_async does not return a response and the response should be accessed through callbacks.
|
126
|
-
# This implementation of asynchronous put is
|
127
|
-
# Stable implementation of asynchronous requests involving thread pools would be out soon.
|
162
|
+
# This implementation of asynchronous put is currently in alpha. Hence, it should not be used in production.
|
128
163
|
def put_async(body = '', headers = {}, parameters = {}, &block)
|
129
|
-
|
130
|
-
|
131
|
-
end
|
164
|
+
(@options[:asynchronous_backend] || Wrest::AsyncRequest.default_backend).execute(Http::Put.new(self, body.to_s, headers, parameters, block ? @options.merge(:callback_block => block) : @options))
|
165
|
+
nil
|
132
166
|
end
|
133
167
|
|
134
168
|
# Makes a POST request to this URI. This is a convenience API
|
@@ -147,12 +181,10 @@ module Wrest #:nodoc:
|
|
147
181
|
# Remember to escape all parameter strings if necessary, using URI.escape
|
148
182
|
#
|
149
183
|
# Note: post_async does not return a response and the response should be accessed through callbacks.
|
150
|
-
# This implementation of asynchronous post is
|
151
|
-
# Stable implementation of asynchronous requests involving thread pools would be out soon.
|
184
|
+
# This implementation of asynchronous post is currently in alpha. Hence, it should not be used in production.
|
152
185
|
def post_async(body = '', headers = {}, parameters = {}, &block)
|
153
|
-
|
154
|
-
|
155
|
-
end
|
186
|
+
(@options[:asynchronous_backend] || Wrest::AsyncRequest.default_backend).execute(Http::Post.new(self, body.to_s, headers, parameters, block ? @options.merge(:callback_block => block) : @options))
|
187
|
+
nil
|
156
188
|
end
|
157
189
|
|
158
190
|
# Makes a POST request to this URI. This is a convenience API
|
@@ -177,12 +209,12 @@ module Wrest #:nodoc:
|
|
177
209
|
# application/x-www-form-urlencoded
|
178
210
|
#
|
179
211
|
# Note: post_form_async does not return a response and the response should be accessed through callbacks.
|
180
|
-
# This implementation of asynchronous post_form is
|
181
|
-
# Stable implementation of asynchronous requests involving thread pools would be out soon.
|
212
|
+
# This implementation of asynchronous post_form is currently in alpha. Hence, it should not be used in production.
|
182
213
|
def post_form_async(parameters = {}, headers = {}, &block)
|
183
|
-
|
184
|
-
|
185
|
-
|
214
|
+
headers = headers.merge(Wrest::H::ContentType => Wrest::T::FormEncoded)
|
215
|
+
body = parameters.to_query
|
216
|
+
(@options[:asynchronous_backend] || Wrest::AsyncRequest.default_backend).execute(Http::Post.new(self, body, headers, {}, block ? @options.merge(:callback_block => block) : @options))
|
217
|
+
nil
|
186
218
|
end
|
187
219
|
|
188
220
|
# Makes a DELETE request to this URI. This is a convenience API
|
@@ -199,12 +231,10 @@ module Wrest #:nodoc:
|
|
199
231
|
# Remember to escape all parameter strings if necessary, using URI.escape
|
200
232
|
#
|
201
233
|
# Note: delete_async does not return a response and the response should be accessed through callbacks.
|
202
|
-
# This implementation of asynchronous delete is
|
203
|
-
# Stable implementation of asynchronous requests involving thread pools would be out soon.
|
234
|
+
# This implementation of asynchronous delete is currently in alpha. Hence, it should not be used in production.
|
204
235
|
def delete_async(parameters = {}, headers = {}, &block)
|
205
|
-
|
206
|
-
|
207
|
-
end
|
236
|
+
(@options[:asynchronous_backend] || Wrest::AsyncRequest.default_backend).execute(Http::Delete.new(self, parameters, headers, block ? @options.merge(:callback_block => block) : @options))
|
237
|
+
nil
|
208
238
|
end
|
209
239
|
|
210
240
|
# Makes an OPTIONS request to this URI. This is a convenience API
|
data/lib/wrest/version.rb
CHANGED
data/lib/wrest.rb
CHANGED
@@ -36,6 +36,10 @@ module Wrest
|
|
36
36
|
@logger
|
37
37
|
end
|
38
38
|
|
39
|
+
def self.enable_evented_requests!
|
40
|
+
require "#{Wrest::Root}/wrest/event_machine_backend"
|
41
|
+
end
|
42
|
+
|
39
43
|
# Switch Wrest to using Net::HTTP.
|
40
44
|
def self.use_native!
|
41
45
|
silence_warnings{ Wrest.const_set('Http', Wrest::Native) }
|
@@ -46,37 +50,6 @@ module Wrest
|
|
46
50
|
require "#{Wrest::Root}/wrest/curl"
|
47
51
|
silence_warnings{ Wrest.const_set('Http', Wrest::Curl) }
|
48
52
|
end
|
49
|
-
|
50
|
-
# Loads the Memcached caching back-end and the Dalli gem
|
51
|
-
def self.enable_memcached_caching!
|
52
|
-
require "#{Wrest::Root}/wrest/components/cache_store/memcached"
|
53
|
-
end
|
54
|
-
|
55
|
-
# Assign the default cache store to be used. Default is none.
|
56
|
-
def self.default_cachestore=(cachestore)
|
57
|
-
@default_cachestore = cachestore
|
58
|
-
end
|
59
|
-
|
60
|
-
# Returns the default cache store, if any is set.
|
61
|
-
def self.default_cachestore
|
62
|
-
@default_cachestore
|
63
|
-
end
|
64
|
-
|
65
|
-
# Configures Wrest to cache all requests. This will use the Memcached backend.
|
66
|
-
def self.always_cache_using_memcached!
|
67
|
-
self.enable_memcached_caching!
|
68
|
-
self.default_cachestore=Wrest::Components::CacheStore::Memcached.new
|
69
|
-
end
|
70
|
-
|
71
|
-
# Configures Wrest to cache all requests. This will use a Ruby Hash.
|
72
|
-
# WARNING: This should NEVER be used in a real environment. The Hash will keep on growing since Wrest does not limit the size of a cache store.
|
73
|
-
#
|
74
|
-
# Use the Memcached caching back-end for production since the Memcached process uses an LRU based cache removal policy
|
75
|
-
# that keeps the number of entries stored within bounds.
|
76
|
-
def self.always_cache_using_hash!
|
77
|
-
Wrest.logger.warn "Using an in-memory Hash as a cache store. This is dangerous if used in a production environment."
|
78
|
-
self.default_cachestore=Hash.new
|
79
|
-
end
|
80
53
|
end
|
81
54
|
|
82
55
|
Wrest.logger = ActiveSupport::BufferedLogger.new(STDOUT)
|
@@ -99,6 +72,11 @@ require "#{Wrest::Root}/wrest/http_codes"
|
|
99
72
|
require "#{Wrest::Root}/wrest/callback"
|
100
73
|
require "#{Wrest::Root}/wrest/native"
|
101
74
|
|
75
|
+
require "#{Wrest::Root}/wrest/async_request"
|
76
|
+
require "#{Wrest::Root}/wrest/async_request/thread_backend"
|
77
|
+
Wrest::AsyncRequest.default_to_threads!
|
78
|
+
|
79
|
+
require "#{Wrest::Root}/wrest/caching"
|
102
80
|
|
103
81
|
# Load Wrest Wrappers
|
104
82
|
require "#{Wrest::Root}/wrest/uri"
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: wrest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.
|
5
|
+
version: 1.4.0
|
6
6
|
platform: universal-java-1.6
|
7
7
|
authors:
|
8
8
|
- Sidu Ponnappa
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2011-02-
|
14
|
+
date: 2011-02-15 00:00:00 +05:30
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
@@ -135,7 +135,7 @@ dependencies:
|
|
135
135
|
version: 1.4.3.1
|
136
136
|
type: :runtime
|
137
137
|
version_requirements: *id011
|
138
|
-
description: Wrest is a
|
138
|
+
description: Wrest is a fluent, easy-to-use, object oriented Ruby HTTP/REST client library with support for RFC2616 HTTP caching, multiple HTTP backends and async calls using EventMachine. It runs on CRuby, JRuby and Rubinius.
|
139
139
|
email:
|
140
140
|
- sidu@c42.in
|
141
141
|
executables:
|
@@ -149,7 +149,9 @@ files:
|
|
149
149
|
- bin/wrest_shell.rb
|
150
150
|
- lib/wrest.rb
|
151
151
|
- lib/wrest_no_ext.rb
|
152
|
+
- lib/wrest/async_request.rb
|
152
153
|
- lib/wrest/cache_proxy.rb
|
154
|
+
- lib/wrest/caching.rb
|
153
155
|
- lib/wrest/callback.rb
|
154
156
|
- lib/wrest/components.rb
|
155
157
|
- lib/wrest/curl.rb
|
@@ -164,10 +166,12 @@ files:
|
|
164
166
|
- lib/wrest/uri_template.rb
|
165
167
|
- lib/wrest/version.rb
|
166
168
|
- lib/wrest/xml_mini.rb
|
169
|
+
- lib/wrest/async_request/event_machine_backend.rb
|
170
|
+
- lib/wrest/async_request/thread_backend.rb
|
171
|
+
- lib/wrest/caching/memcached.rb
|
167
172
|
- lib/wrest/components/container.rb
|
168
173
|
- lib/wrest/components/mutators.rb
|
169
174
|
- lib/wrest/components/translators.rb
|
170
|
-
- lib/wrest/components/cache_store/memcached.rb
|
171
175
|
- lib/wrest/components/container/alias_accessors.rb
|
172
176
|
- lib/wrest/components/container/typecaster.rb
|
173
177
|
- lib/wrest/components/mutators/base.rb
|
@@ -243,10 +247,11 @@ requirements:
|
|
243
247
|
- To use Memcached as caching back-end, install the 'dalli' gem.
|
244
248
|
- To use multipart post, install the 'multipart-post' gem.
|
245
249
|
- To use curl as the http engine, install the 'patron' gem. This feature is not available (and should be unneccessary) on jruby.
|
250
|
+
- To use eventmachine as a parallel backend, install the 'eventmachine' gem.
|
246
251
|
rubyforge_project: wrest
|
247
252
|
rubygems_version: 1.5.0
|
248
253
|
signing_key:
|
249
254
|
specification_version: 3
|
250
|
-
summary: Wrest is
|
255
|
+
summary: Wrest is a fluent, object oriented HTTP client library for 1.8, 1.9, JRuby and Rubinius.
|
251
256
|
test_files: []
|
252
257
|
|