restr 0.4.0 → 0.5.0
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/History.txt +8 -0
- data/README.txt +1 -1
- data/config/hoe.rb +0 -2
- data/lib/restr.rb +35 -18
- data/script/destroy +0 -0
- data/script/generate +0 -0
- data/script/txt2html +1 -1
- data/website/index.html +39 -71
- data/website/index.txt +17 -12
- data/website/template.rhtml +1 -1
- metadata +14 -5
data/History.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
== 0.5.0 :: 2009-01-07
|
2
|
+
|
3
|
+
* A logger can be provided on a per-call basis, rather than just for the
|
4
|
+
Restr class as a whole.
|
5
|
+
e.g.:
|
6
|
+
kitten_logger = Logger.new('kitten.log'}
|
7
|
+
Restr.get('http://example.com/kittens/1.xml, {}, {:logger => kitten_logger})
|
8
|
+
|
1
9
|
== 0.4.0 :: 2008-06-19
|
2
10
|
|
3
11
|
* Better recognition of XML content; response MIME types ending in "/xml" and
|
data/README.txt
CHANGED
@@ -35,7 +35,7 @@ it under the terms of the GNU Lesser General Public License as published
|
|
35
35
|
by the Free Software Foundation; either version 3 of the License, or
|
36
36
|
(at your option) any later version.
|
37
37
|
|
38
|
-
|
38
|
+
Restr is distributed in the hope that it will be useful,
|
39
39
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
40
40
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
41
41
|
GNU General Public License for more details.
|
data/config/hoe.rb
CHANGED
data/lib/restr.rb
CHANGED
@@ -60,38 +60,57 @@ end
|
|
60
60
|
#
|
61
61
|
# logger = Logger.new('restr.log')
|
62
62
|
# logger.level = Logger::DEBUG
|
63
|
-
# Restr.
|
63
|
+
# Restr.logger = logger
|
64
64
|
#
|
65
|
-
# Restr will now log its activity to the given Logger.
|
65
|
+
# Restr will now log its activity to the given Logger.
|
66
|
+
# The default_logger can be overridden by supplying a :logger option to
|
67
|
+
# a client call:
|
68
|
+
#
|
69
|
+
# kitten_logger = Logger.new('kitten.log'}
|
70
|
+
# Restr.get('http://example.com/kittens/1.xml, {},
|
71
|
+
# {:logger => kitten_logger)
|
66
72
|
class Restr
|
67
73
|
|
68
74
|
module VERSION #:nodoc:
|
69
75
|
MAJOR = 0
|
70
|
-
MINOR =
|
76
|
+
MINOR = 5
|
71
77
|
TINY = 0
|
72
78
|
|
73
79
|
STRING = [MAJOR, MINOR, TINY].join('.')
|
74
80
|
end
|
75
81
|
|
76
82
|
|
77
|
-
@@
|
83
|
+
@@logger = nil
|
78
84
|
@@request_timeout = 3.minutes
|
79
85
|
|
80
86
|
cattr_accessor :request_timeout
|
81
87
|
|
82
88
|
def self.logger=(logger)
|
83
|
-
@@
|
89
|
+
@@logger = logger.dup
|
84
90
|
# ActiveSupport's BufferedLogger doesn't seem to support progname= :(
|
85
|
-
@@
|
91
|
+
@@logger.progname = self.name if @@logger.respond_to?(:progname)
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.logger
|
95
|
+
@@logger
|
86
96
|
end
|
87
97
|
|
88
98
|
def self.method_missing(method, *args)
|
89
99
|
self.do(method, args[0], args[1] || {}, args[2])
|
90
100
|
end
|
91
101
|
|
92
|
-
def self.do(method, url, params = {},
|
102
|
+
def self.do(method, url, params = {}, options = {})
|
103
|
+
puts "METHOD: #{method.inspect}"
|
104
|
+
puts "URL: #{url.inspect}"
|
105
|
+
puts "PARAMS: #{params.inspect}"
|
106
|
+
puts "OPTIONS: #{options.inspect}"
|
107
|
+
|
93
108
|
uri = URI.parse(url)
|
109
|
+
|
94
110
|
params = {} unless params
|
111
|
+
options = {} unless options
|
112
|
+
|
113
|
+
logger = options[:logger] || self.logger
|
95
114
|
|
96
115
|
method_mod = method.to_s.downcase.capitalize
|
97
116
|
unless Net::HTTP.const_defined?(method_mod)
|
@@ -111,19 +130,16 @@ class Restr
|
|
111
130
|
req = Net::HTTP.const_get(method_mod).new(uri.request_uri)
|
112
131
|
|
113
132
|
|
114
|
-
if
|
115
|
-
|
116
|
-
"The `auth` parameter must be a Hash with a :username and :password value." unless
|
117
|
-
auth.kind_of? Hash
|
118
|
-
req.basic_auth auth[:username] || auth['username'], auth[:password] || auth['password']
|
133
|
+
if options[:username] || options['username']
|
134
|
+
req.basic_auth options[:username] || options['username'], options[:password] || options['password']
|
119
135
|
end
|
120
136
|
|
121
137
|
if params.kind_of?(Hash) && method_mod != 'Get' && method_mod != 'get'
|
122
138
|
req.set_form_data(params, '&')
|
123
139
|
end
|
124
140
|
|
125
|
-
|
126
|
-
(
|
141
|
+
logger.debug("Sending #{method.inspect} request to #{url.inspect} with data #{params.inspect}"+
|
142
|
+
(options ? " with options" : "")+".") if logger
|
127
143
|
|
128
144
|
client = Net::HTTP.new(uri.host, uri.port)
|
129
145
|
client.use_ssl = (uri.scheme == 'https')
|
@@ -142,24 +158,25 @@ class Restr
|
|
142
158
|
case res
|
143
159
|
when Net::HTTPSuccess
|
144
160
|
if res.content_type =~ /[\/+]xml$/
|
145
|
-
|
161
|
+
logger.debug("Got XML response: \n#{res.body}") if logger
|
146
162
|
return XmlSimple.xml_in_string(res.body,
|
147
163
|
'forcearray' => false,
|
148
164
|
'keeproot' => false
|
149
165
|
)
|
150
166
|
else
|
151
|
-
|
167
|
+
logger.debug("Got #{res.content_type.inspect} response: \n#{res.body}") if logger
|
152
168
|
return res.body
|
153
169
|
end
|
154
170
|
when TimeoutError
|
155
|
-
|
171
|
+
logger.debug(res) if logger
|
156
172
|
return XmlSimple.xml_in_string(res,
|
157
173
|
'forcearray' => false,
|
158
174
|
'keeproot' => false
|
159
175
|
)
|
160
176
|
else
|
161
177
|
$LAST_ERROR_BODY = res.body # FIXME: this is dumb... need a better way of reporting errors
|
162
|
-
|
178
|
+
$LAST_ERROR_RESPONSE = res # this is currently unused within Restr, but may be useful for debugging
|
179
|
+
logger.error("Got error response '#{res.message}(#{res.code})': #{res.body.blank? ? '(blank response body)' : res.body}") if logger
|
163
180
|
res.error!
|
164
181
|
end
|
165
182
|
end
|
data/script/destroy
CHANGED
File without changes
|
data/script/generate
CHANGED
File without changes
|
data/script/txt2html
CHANGED
@@ -11,7 +11,7 @@ end
|
|
11
11
|
require 'redcloth'
|
12
12
|
require 'syntax/convertors/html'
|
13
13
|
require 'erb'
|
14
|
-
require File.dirname(__FILE__) + '/../lib/restr
|
14
|
+
require File.dirname(__FILE__) + '/../lib/restr.rb'
|
15
15
|
|
16
16
|
version = Restr::VERSION::STRING
|
17
17
|
download = 'http://rubyforge.org/projects/restr'
|
data/website/index.html
CHANGED
@@ -33,83 +33,51 @@
|
|
33
33
|
<h1>restr</h1>
|
34
34
|
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/restr"; return false'>
|
35
35
|
<p>Get Version</p>
|
36
|
-
<a href="http://rubyforge.org/projects/restr" class="numbers">0.
|
36
|
+
<a href="http://rubyforge.org/projects/restr" class="numbers">0.5.0</a>
|
37
37
|
</div>
|
38
|
-
<
|
39
|
-
|
40
|
-
|
41
|
-
<h3>Copyright© 2008 Urbacon Ltd.</h3>
|
42
|
-
|
43
|
-
|
44
|
-
<h2>What is it?</h2>
|
45
|
-
|
46
|
-
|
47
|
-
<p><b>Restr is a very simple client for <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">RESTful</a> web services.</b>
|
38
|
+
<h3>Copyright © 2008 Urbacon Ltd.</h3>
|
39
|
+
<h2>What is it?</h2>
|
40
|
+
<p><b>Restr is a very simple client for <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">RESTful</a> web services.</b> <br />
|
48
41
|
It was developed as a lightweight alternative to <a href="http://api.rubyonrails.com/files/vendor/rails/activeresource/README.html">ActiveResource</a>.</p>
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
<pre><code>kitten['colour'] = 'black'
|
76
|
-
kitten = Restr.put('http://example.com/kittens/1.xml', kitten)</code></pre>
|
77
|
-
|
78
|
-
|
79
|
-
<h2>Further Resources</h2>
|
80
|
-
|
81
|
-
|
82
|
-
<ul>
|
83
|
-
<li><a href="http://restr.rubyforge.org/rdoc/" title="RDocs">Full <span class="caps">API</span> Documentation</a></li>
|
84
|
-
</ul>
|
85
|
-
|
86
|
-
|
87
|
-
<h2>How to submit patches</h2>
|
88
|
-
|
89
|
-
|
90
|
-
<ul>
|
42
|
+
<p>For project info and downloads please see the Restr’s <br />
|
43
|
+
<a href="http://rubyforge.org/projects/restr">RubyForge Page</a></p>
|
44
|
+
<h2>Installing</h2>
|
45
|
+
<p><pre class='syntax'><span class="ident">sudo</span> <span class="ident">gem</span> <span class="ident">install</span> <span class="ident">restr</span></pre></p>
|
46
|
+
<h2>Usage Example</h2>
|
47
|
+
<p>Fetch Kitten with id 1 and print out its name and colour:</p>
|
48
|
+
<p><pre class='syntax'>
|
49
|
+
<span class="ident">require</span> <span class="punct">'</span><span class="string">restr</span><span class="punct">'</span>
|
50
|
+
<span class="ident">kitten</span> <span class="punct">=</span> <span class="constant">Restr</span><span class="punct">.</span><span class="ident">get</span><span class="punct">('</span><span class="string">http://example.com/kittens/1.xml</span><span class="punct">')</span>
|
51
|
+
<span class="ident">puts</span> <span class="ident">kitten</span><span class="punct">['</span><span class="string">name</span><span class="punct">']</span>
|
52
|
+
<span class="ident">puts</span> <span class="ident">kitten</span><span class="punct">['</span><span class="string">colour</span><span class="punct">']</span>
|
53
|
+
</pre></p>
|
54
|
+
<p>Change the Kitten’s colour and store the modification:</p>
|
55
|
+
<p><pre class='syntax'>
|
56
|
+
<span class="ident">kitten</span><span class="punct">['</span><span class="string">colour</span><span class="punct">']</span> <span class="punct">=</span> <span class="punct">'</span><span class="string">black</span><span class="punct">'</span>
|
57
|
+
<span class="ident">kitten</span> <span class="punct">=</span> <span class="constant">Restr</span><span class="punct">.</span><span class="ident">put</span><span class="punct">('</span><span class="string">http://example.com/kittens/1.xml</span><span class="punct">',</span> <span class="ident">kitten</span><span class="punct">)</span>
|
58
|
+
</pre></p>
|
59
|
+
<h2>Further Resources</h2>
|
60
|
+
<ul>
|
61
|
+
<li><a href="http://restr.rubyforge.org/rdoc/">Full <span class="caps">API</span> Documentation RDocs</a></li>
|
62
|
+
<li><a href="http://rubyforge.org/projects/reststop/">Reststop</a> — makes it easy to implement RESTful controllers in the Camping microframework</li>
|
63
|
+
<li><a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">Wikipedia Article on <span class="caps">REST</span></a></li>
|
64
|
+
</ul>
|
65
|
+
<h2>How to submit patches</h2>
|
66
|
+
<ul>
|
91
67
|
<li>See below for author’s contact info.</li>
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
<h2>License</h2>
|
97
|
-
|
98
|
-
|
99
|
-
<ul>
|
68
|
+
<li>The trunk repository is <code>svn://rubyforge.org/var/svn/restr/trunk</code> for anonymous access.</li>
|
69
|
+
</ul>
|
70
|
+
<h2>License</h2>
|
71
|
+
<ul>
|
100
72
|
<li><a href="http://www.gnu.org/licenses/lgpl.html">Lesser <span class="caps">GPL</span> Version 3</a></li>
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
<h2>Contact</h2>
|
105
|
-
|
106
|
-
|
107
|
-
<ul>
|
73
|
+
</ul>
|
74
|
+
<h2>Contact</h2>
|
75
|
+
<ul>
|
108
76
|
<li><a href="http://rubyforge.org/users/gunark/">Author’s Rubyforge Page</a></li>
|
109
|
-
|
110
|
-
|
77
|
+
<li><a href="http://rubyforge.org/forum/?group_id=5848">Restr RubyForge Forum</a></li>
|
78
|
+
</ul>
|
111
79
|
<p class="coda">
|
112
|
-
<a href="
|
80
|
+
<a href="mailto:matt@roughest.net">Matt Zukowski</a>, 20th October 2008<br>
|
113
81
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
114
82
|
</p>
|
115
83
|
</div>
|
data/website/index.txt
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
h1. restr
|
2
2
|
|
3
|
-
h1. → 'restr'
|
4
|
-
|
5
3
|
h3. Copyright (c) 2008 Urbacon Ltd.
|
6
4
|
|
7
5
|
h2. What is it?
|
@@ -9,7 +7,8 @@ h2. What is it?
|
|
9
7
|
<b>Restr is a very simple client for "RESTful":http://en.wikipedia.org/wiki/Representational_State_Transfer web services.</b>
|
10
8
|
It was developed as a lightweight alternative to "ActiveResource":http://api.rubyonrails.com/files/vendor/rails/activeresource/README.html.
|
11
9
|
|
12
|
-
For project info and downloads please see the Restr's
|
10
|
+
For project info and downloads please see the Restr's
|
11
|
+
"RubyForge Page":http://rubyforge.org/projects/restr
|
13
12
|
|
14
13
|
h2. Installing
|
15
14
|
|
@@ -19,19 +18,25 @@ h2. Usage Example
|
|
19
18
|
|
20
19
|
Fetch Kitten with id 1 and print out its name and colour:
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
21
|
+
<pre syntax="ruby">
|
22
|
+
require 'restr'
|
23
|
+
kitten = Restr.get('http://example.com/kittens/1.xml')
|
24
|
+
puts kitten['name']
|
25
|
+
puts kitten['colour']
|
26
|
+
</pre>
|
27
|
+
|
27
28
|
Change the Kitten's colour and store the modification:
|
28
|
-
|
29
|
-
|
30
|
-
|
29
|
+
|
30
|
+
<pre syntax="ruby">
|
31
|
+
kitten['colour'] = 'black'
|
32
|
+
kitten = Restr.put('http://example.com/kittens/1.xml', kitten)
|
33
|
+
</pre>
|
31
34
|
|
32
35
|
h2. Further Resources
|
33
36
|
|
34
|
-
* "Full API Documentation
|
37
|
+
* "Full API Documentation RDocs":http://restr.rubyforge.org/rdoc/
|
38
|
+
* "Reststop":http://rubyforge.org/projects/reststop/ -- makes it easy to implement RESTful controllers in the Camping microframework
|
39
|
+
* "Wikipedia Article on REST":http://en.wikipedia.org/wiki/Representational_State_Transfer
|
35
40
|
|
36
41
|
h2. How to submit patches
|
37
42
|
|
data/website/template.rhtml
CHANGED
@@ -37,7 +37,7 @@
|
|
37
37
|
</div>
|
38
38
|
<%= body %>
|
39
39
|
<p class="coda">
|
40
|
-
<a href="
|
40
|
+
<a href="mailto:matt@roughest.net">Matt Zukowski</a>, <%= modified.pretty %><br>
|
41
41
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
42
42
|
</p>
|
43
43
|
</div>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: restr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Zukowski
|
@@ -9,10 +9,19 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-01-07 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: hoe
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.8.2
|
24
|
+
version:
|
16
25
|
description: A very simple REST client.
|
17
26
|
email:
|
18
27
|
- matt@roughest.net
|
@@ -75,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
84
|
requirements: []
|
76
85
|
|
77
86
|
rubyforge_project: restr
|
78
|
-
rubygems_version: 1.
|
87
|
+
rubygems_version: 1.3.1
|
79
88
|
signing_key:
|
80
89
|
specification_version: 2
|
81
90
|
summary: A very simple REST client.
|