oauth-active-resource 0.4.2
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/.document +5 -0
- data/.gitignore +5 -0
- data/LICENSE +20 -0
- data/README.rdoc +7 -0
- data/Rakefile +49 -0
- data/VERSION.yml +4 -0
- data/doc/classes/Collection.html +205 -0
- data/doc/classes/Collection.src/M000001.html +22 -0
- data/doc/classes/Collection.src/M000002.html +18 -0
- data/doc/classes/Collection.src/M000003.html +18 -0
- data/doc/classes/Collection.src/M000004.html +18 -0
- data/doc/classes/Collection.src/M000005.html +18 -0
- data/doc/classes/OAuthActiveResource.html +165 -0
- data/doc/classes/OAuthActiveResource.src/M000006.html +63 -0
- data/doc/classes/OAuthActiveResource.src/M000007.html +20 -0
- data/doc/classes/OAuthActiveResource/Connection.html +158 -0
- data/doc/classes/OAuthActiveResource/Connection.src/M000012.html +19 -0
- data/doc/classes/OAuthActiveResource/Connection.src/M000013.html +18 -0
- data/doc/classes/OAuthActiveResource/Resource.html +233 -0
- data/doc/classes/OAuthActiveResource/Resource.src/M000008.html +20 -0
- data/doc/classes/OAuthActiveResource/Resource.src/M000009.html +19 -0
- data/doc/classes/OAuthActiveResource/Resource.src/M000010.html +32 -0
- data/doc/classes/OAuthActiveResource/Resource.src/M000011.html +31 -0
- data/doc/created.rid +1 -0
- data/doc/files/lib/oauth_active_resource/collection_rb.html +101 -0
- data/doc/files/lib/oauth_active_resource/connection_rb.html +101 -0
- data/doc/files/lib/oauth_active_resource/resource_rb.html +110 -0
- data/doc/files/lib/oauth_active_resource_rb.html +112 -0
- data/doc/fr_class_index.html +30 -0
- data/doc/fr_file_index.html +30 -0
- data/doc/fr_method_index.html +39 -0
- data/doc/index.html +24 -0
- data/doc/rdoc-style.css +208 -0
- data/lib/oauth_active_resource.rb +66 -0
- data/lib/oauth_active_resource/connection.rb +43 -0
- data/lib/oauth_active_resource/fake_oauth_access_token.rb +55 -0
- data/lib/oauth_active_resource/resource.rb +119 -0
- data/lib/oauth_active_resource/unique_resource_array.rb +87 -0
- data/oauth-active-resource.gemspec +86 -0
- data/spec/oauth_active_resource_spec.rb +24 -0
- data/spec/spec_helper.rb +30 -0
- metadata +126 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
3
|
+
<!DOCTYPE html
|
4
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
5
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
6
|
+
|
7
|
+
<!--
|
8
|
+
|
9
|
+
Classes
|
10
|
+
|
11
|
+
-->
|
12
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
13
|
+
<head>
|
14
|
+
<title>Classes</title>
|
15
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
16
|
+
<link rel="stylesheet" href="rdoc-style.css" type="text/css" />
|
17
|
+
<base target="docwin" />
|
18
|
+
</head>
|
19
|
+
<body>
|
20
|
+
<div id="index">
|
21
|
+
<h1 class="section-bar">Classes</h1>
|
22
|
+
<div id="index-entries">
|
23
|
+
<a href="classes/Collection.html">Collection</a><br />
|
24
|
+
<a href="classes/OAuthActiveResource.html">OAuthActiveResource</a><br />
|
25
|
+
<a href="classes/OAuthActiveResource/Connection.html">OAuthActiveResource::Connection</a><br />
|
26
|
+
<a href="classes/OAuthActiveResource/Resource.html">OAuthActiveResource::Resource</a><br />
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
</body>
|
30
|
+
</html>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
3
|
+
<!DOCTYPE html
|
4
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
5
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
6
|
+
|
7
|
+
<!--
|
8
|
+
|
9
|
+
Files
|
10
|
+
|
11
|
+
-->
|
12
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
13
|
+
<head>
|
14
|
+
<title>Files</title>
|
15
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
16
|
+
<link rel="stylesheet" href="rdoc-style.css" type="text/css" />
|
17
|
+
<base target="docwin" />
|
18
|
+
</head>
|
19
|
+
<body>
|
20
|
+
<div id="index">
|
21
|
+
<h1 class="section-bar">Files</h1>
|
22
|
+
<div id="index-entries">
|
23
|
+
<a href="files/lib/oauth_active_resource_rb.html">lib/oauth_active_resource.rb</a><br />
|
24
|
+
<a href="files/lib/oauth_active_resource/collection_rb.html">lib/oauth_active_resource/collection.rb</a><br />
|
25
|
+
<a href="files/lib/oauth_active_resource/connection_rb.html">lib/oauth_active_resource/connection.rb</a><br />
|
26
|
+
<a href="files/lib/oauth_active_resource/resource_rb.html">lib/oauth_active_resource/resource.rb</a><br />
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
</body>
|
30
|
+
</html>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
|
2
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
3
|
+
<!DOCTYPE html
|
4
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
5
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
6
|
+
|
7
|
+
<!--
|
8
|
+
|
9
|
+
Methods
|
10
|
+
|
11
|
+
-->
|
12
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
13
|
+
<head>
|
14
|
+
<title>Methods</title>
|
15
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
16
|
+
<link rel="stylesheet" href="rdoc-style.css" type="text/css" />
|
17
|
+
<base target="docwin" />
|
18
|
+
</head>
|
19
|
+
<body>
|
20
|
+
<div id="index">
|
21
|
+
<h1 class="section-bar">Methods</h1>
|
22
|
+
<div id="index-entries">
|
23
|
+
<a href="classes/OAuthActiveResource/Resource.html#M000008">connection (OAuthActiveResource::Resource)</a><br />
|
24
|
+
<a href="classes/OAuthActiveResource/Connection.html#M000013">get_without_decoding (OAuthActiveResource::Connection)</a><br />
|
25
|
+
<a href="classes/OAuthActiveResource/Resource.html#M000010">has_many (OAuthActiveResource::Resource)</a><br />
|
26
|
+
<a href="classes/OAuthActiveResource/Resource.html#M000009">load (OAuthActiveResource::Resource)</a><br />
|
27
|
+
<a href="classes/OAuthActiveResource.html#M000007">method_missing (OAuthActiveResource)</a><br />
|
28
|
+
<a href="classes/Collection.html#M000001">new (Collection)</a><br />
|
29
|
+
<a href="classes/OAuthActiveResource/Connection.html#M000012">new (OAuthActiveResource::Connection)</a><br />
|
30
|
+
<a href="classes/OAuthActiveResource.html#M000006">register (OAuthActiveResource)</a><br />
|
31
|
+
<a href="classes/Collection.html#M000005">reload (Collection)</a><br />
|
32
|
+
<a href="classes/Collection.html#M000004">save (Collection)</a><br />
|
33
|
+
<a href="classes/OAuthActiveResource/Resource.html#M000011">send_multipart_request (OAuthActiveResource::Resource)</a><br />
|
34
|
+
<a href="classes/Collection.html#M000002">to_json (Collection)</a><br />
|
35
|
+
<a href="classes/Collection.html#M000003">to_xml (Collection)</a><br />
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
</body>
|
39
|
+
</html>
|
data/doc/index.html
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
+
<!DOCTYPE html
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
5
|
+
|
6
|
+
<!--
|
7
|
+
|
8
|
+
RDoc Documentation
|
9
|
+
|
10
|
+
-->
|
11
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
12
|
+
<head>
|
13
|
+
<title>RDoc Documentation</title>
|
14
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
15
|
+
</head>
|
16
|
+
<frameset rows="20%, 80%">
|
17
|
+
<frameset cols="25%,35%,45%">
|
18
|
+
<frame src="fr_file_index.html" title="Files" name="Files" />
|
19
|
+
<frame src="fr_class_index.html" name="Classes" />
|
20
|
+
<frame src="fr_method_index.html" name="Methods" />
|
21
|
+
</frameset>
|
22
|
+
<frame src="files/lib/oauth_active_resource/collection_rb.html" name="docwin" />
|
23
|
+
</frameset>
|
24
|
+
</html>
|
data/doc/rdoc-style.css
ADDED
@@ -0,0 +1,208 @@
|
|
1
|
+
|
2
|
+
body {
|
3
|
+
font-family: Verdana,Arial,Helvetica,sans-serif;
|
4
|
+
font-size: 90%;
|
5
|
+
margin: 0;
|
6
|
+
margin-left: 40px;
|
7
|
+
padding: 0;
|
8
|
+
background: white;
|
9
|
+
}
|
10
|
+
|
11
|
+
h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
|
12
|
+
h1 { font-size: 150%; }
|
13
|
+
h2,h3,h4 { margin-top: 1em; }
|
14
|
+
|
15
|
+
a { background: #eef; color: #039; text-decoration: none; }
|
16
|
+
a:hover { background: #039; color: #eef; }
|
17
|
+
|
18
|
+
/* Override the base stylesheet's Anchor inside a table cell */
|
19
|
+
td > a {
|
20
|
+
background: transparent;
|
21
|
+
color: #039;
|
22
|
+
text-decoration: none;
|
23
|
+
}
|
24
|
+
|
25
|
+
/* and inside a section title */
|
26
|
+
.section-title > a {
|
27
|
+
background: transparent;
|
28
|
+
color: #eee;
|
29
|
+
text-decoration: none;
|
30
|
+
}
|
31
|
+
|
32
|
+
/* === Structural elements =================================== */
|
33
|
+
|
34
|
+
div#index {
|
35
|
+
margin: 0;
|
36
|
+
margin-left: -40px;
|
37
|
+
padding: 0;
|
38
|
+
font-size: 90%;
|
39
|
+
}
|
40
|
+
|
41
|
+
|
42
|
+
div#index a {
|
43
|
+
margin-left: 0.7em;
|
44
|
+
}
|
45
|
+
|
46
|
+
div#index .section-bar {
|
47
|
+
margin-left: 0px;
|
48
|
+
padding-left: 0.7em;
|
49
|
+
background: #ccc;
|
50
|
+
font-size: small;
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
div#classHeader, div#fileHeader {
|
55
|
+
width: auto;
|
56
|
+
color: white;
|
57
|
+
padding: 0.5em 1.5em 0.5em 1.5em;
|
58
|
+
margin: 0;
|
59
|
+
margin-left: -40px;
|
60
|
+
border-bottom: 3px solid #006;
|
61
|
+
}
|
62
|
+
|
63
|
+
div#classHeader a, div#fileHeader a {
|
64
|
+
background: inherit;
|
65
|
+
color: white;
|
66
|
+
}
|
67
|
+
|
68
|
+
div#classHeader td, div#fileHeader td {
|
69
|
+
background: inherit;
|
70
|
+
color: white;
|
71
|
+
}
|
72
|
+
|
73
|
+
|
74
|
+
div#fileHeader {
|
75
|
+
background: #057;
|
76
|
+
}
|
77
|
+
|
78
|
+
div#classHeader {
|
79
|
+
background: #048;
|
80
|
+
}
|
81
|
+
|
82
|
+
|
83
|
+
.class-name-in-header {
|
84
|
+
font-size: 180%;
|
85
|
+
font-weight: bold;
|
86
|
+
}
|
87
|
+
|
88
|
+
|
89
|
+
div#bodyContent {
|
90
|
+
padding: 0 1.5em 0 1.5em;
|
91
|
+
}
|
92
|
+
|
93
|
+
div#description {
|
94
|
+
padding: 0.5em 1.5em;
|
95
|
+
background: #efefef;
|
96
|
+
border: 1px dotted #999;
|
97
|
+
}
|
98
|
+
|
99
|
+
div#description h1,h2,h3,h4,h5,h6 {
|
100
|
+
color: #125;;
|
101
|
+
background: transparent;
|
102
|
+
}
|
103
|
+
|
104
|
+
div#validator-badges {
|
105
|
+
text-align: center;
|
106
|
+
}
|
107
|
+
div#validator-badges img { border: 0; }
|
108
|
+
|
109
|
+
div#copyright {
|
110
|
+
color: #333;
|
111
|
+
background: #efefef;
|
112
|
+
font: 0.75em sans-serif;
|
113
|
+
margin-top: 5em;
|
114
|
+
margin-bottom: 0;
|
115
|
+
padding: 0.5em 2em;
|
116
|
+
}
|
117
|
+
|
118
|
+
|
119
|
+
/* === Classes =================================== */
|
120
|
+
|
121
|
+
table.header-table {
|
122
|
+
color: white;
|
123
|
+
font-size: small;
|
124
|
+
}
|
125
|
+
|
126
|
+
.type-note {
|
127
|
+
font-size: small;
|
128
|
+
color: #DEDEDE;
|
129
|
+
}
|
130
|
+
|
131
|
+
.xxsection-bar {
|
132
|
+
background: #eee;
|
133
|
+
color: #333;
|
134
|
+
padding: 3px;
|
135
|
+
}
|
136
|
+
|
137
|
+
.section-bar {
|
138
|
+
color: #333;
|
139
|
+
border-bottom: 1px solid #999;
|
140
|
+
margin-left: -20px;
|
141
|
+
}
|
142
|
+
|
143
|
+
|
144
|
+
.section-title {
|
145
|
+
background: #79a;
|
146
|
+
color: #eee;
|
147
|
+
padding: 3px;
|
148
|
+
margin-top: 2em;
|
149
|
+
margin-left: -30px;
|
150
|
+
border: 1px solid #999;
|
151
|
+
}
|
152
|
+
|
153
|
+
.top-aligned-row { vertical-align: top }
|
154
|
+
.bottom-aligned-row { vertical-align: bottom }
|
155
|
+
|
156
|
+
/* --- Context section classes ----------------------- */
|
157
|
+
|
158
|
+
.context-row { }
|
159
|
+
.context-item-name { font-family: monospace; font-weight: bold; color: black; }
|
160
|
+
.context-item-value { font-size: small; color: #448; }
|
161
|
+
.context-item-desc { color: #333; padding-left: 2em; }
|
162
|
+
|
163
|
+
/* --- Method classes -------------------------- */
|
164
|
+
.method-detail {
|
165
|
+
background: #efefef;
|
166
|
+
padding: 0;
|
167
|
+
margin-top: 0.5em;
|
168
|
+
margin-bottom: 1em;
|
169
|
+
border: 1px dotted #ccc;
|
170
|
+
}
|
171
|
+
.method-heading {
|
172
|
+
color: black;
|
173
|
+
background: #ccc;
|
174
|
+
border-bottom: 1px solid #666;
|
175
|
+
padding: 0.2em 0.5em 0 0.5em;
|
176
|
+
}
|
177
|
+
.method-signature { color: black; background: inherit; }
|
178
|
+
.method-name { font-weight: bold; }
|
179
|
+
.method-args { font-style: italic; }
|
180
|
+
.method-description { padding: 0 0.5em 0 0.5em; }
|
181
|
+
|
182
|
+
/* --- Source code sections -------------------- */
|
183
|
+
|
184
|
+
a.source-toggle { font-size: 90%; }
|
185
|
+
div.method-source-code {
|
186
|
+
background: #262626;
|
187
|
+
color: #ffdead;
|
188
|
+
margin: 1em;
|
189
|
+
padding: 0.5em;
|
190
|
+
border: 1px dashed #999;
|
191
|
+
overflow: hidden;
|
192
|
+
}
|
193
|
+
|
194
|
+
div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
195
|
+
|
196
|
+
/* --- Ruby keyword styles --------------------- */
|
197
|
+
|
198
|
+
.standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
|
199
|
+
|
200
|
+
.ruby-constant { color: #7fffd4; background: transparent; }
|
201
|
+
.ruby-keyword { color: #00ffff; background: transparent; }
|
202
|
+
.ruby-ivar { color: #eedd82; background: transparent; }
|
203
|
+
.ruby-operator { color: #00ffee; background: transparent; }
|
204
|
+
.ruby-identifier { color: #ffdead; background: transparent; }
|
205
|
+
.ruby-node { color: #ffa07a; background: transparent; }
|
206
|
+
.ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
|
207
|
+
.ruby-regexp { color: #ffa07a; background: transparent; }
|
208
|
+
.ruby-value { color: #7fffd4; background: transparent; }
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
gem 'activeresource'
|
4
|
+
require 'activeresource'
|
5
|
+
|
6
|
+
require 'digest/md5'
|
7
|
+
|
8
|
+
module OAuthActiveResource
|
9
|
+
|
10
|
+
# TODO check if klass has ancestor OAuthActiveResource
|
11
|
+
def self.register(add_to_module, model_module, options = {})
|
12
|
+
|
13
|
+
oauth_connection = options[:access_token]
|
14
|
+
|
15
|
+
if oauth_connection.nil?
|
16
|
+
oauth_connection = FakeOAuthAccessToken.new
|
17
|
+
end
|
18
|
+
|
19
|
+
site = options[:site]
|
20
|
+
|
21
|
+
mod = Module.new do
|
22
|
+
model_module.constants.each do |klass|
|
23
|
+
# TODO check if klass.is_a OAuthActiveResource
|
24
|
+
sub = Class.new(model_module.const_get(klass)) do
|
25
|
+
self.site = site
|
26
|
+
@oauth_connection = oauth_connection
|
27
|
+
end
|
28
|
+
const_set(klass, sub)
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.method_missing(name,*args)
|
32
|
+
self.const_get(name)
|
33
|
+
rescue
|
34
|
+
super(name,*args)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.destroy
|
38
|
+
name = self.model_name.split('::').last
|
39
|
+
self.parent.send :remove_const, name
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Obscure (=Hash) token+secret, b/c it should stay one
|
44
|
+
if oauth_connection.nil?
|
45
|
+
dynamic_module_name = "AnonymousConsumer"
|
46
|
+
else
|
47
|
+
hash = Digest::MD5.hexdigest("#{oauth_connection.token}#{oauth_connection.secret}")
|
48
|
+
dynamic_module_name = "OAuthConsumer#{hash}"
|
49
|
+
end
|
50
|
+
|
51
|
+
if add_to_module.const_defined? dynamic_module_name
|
52
|
+
mod = add_to_module.const_get dynamic_module_name
|
53
|
+
else
|
54
|
+
add_to_module.const_set(dynamic_module_name, mod)
|
55
|
+
end
|
56
|
+
|
57
|
+
return mod
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
require 'oauth_active_resource/connection'
|
64
|
+
require 'oauth_active_resource/resource'
|
65
|
+
require 'oauth_active_resource/unique_resource_array'
|
66
|
+
require 'oauth_active_resource/fake_oauth_access_token'
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module OAuthActiveResource
|
2
|
+
|
3
|
+
class Connection < ActiveResource::Connection
|
4
|
+
def initialize(oauth_connection, *args)
|
5
|
+
@oauth_connection = oauth_connection
|
6
|
+
super(*args)
|
7
|
+
end
|
8
|
+
|
9
|
+
# an alternative for the get method, which doesnt tries to decode the response
|
10
|
+
def get_without_decoding(path, headers = {})
|
11
|
+
request(:get, path, build_request_headers(headers, :get))
|
12
|
+
end
|
13
|
+
|
14
|
+
# make handle_response public and add error message from body if possible
|
15
|
+
def handle_response(response)
|
16
|
+
return super(response)
|
17
|
+
rescue ActiveResource::ClientError => exc
|
18
|
+
begin
|
19
|
+
# ugly code to insert the error_message into response
|
20
|
+
error_message = "#{format.decode response.body}"
|
21
|
+
if not error_message.nil? or error_message == ""
|
22
|
+
exc.response.instance_eval do ||
|
23
|
+
@message = error_message
|
24
|
+
end
|
25
|
+
end
|
26
|
+
ensure
|
27
|
+
raise exc
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
def request(method, path, *arguments)
|
33
|
+
if @oauth_connection == nil
|
34
|
+
super(method, path, *arguments)
|
35
|
+
else
|
36
|
+
response = @oauth_connection.request(method, "#{site.scheme}://#{site.host}:#{site.port}#{path}", *arguments)
|
37
|
+
handle_response(response)
|
38
|
+
end
|
39
|
+
rescue Timeout::Error => e
|
40
|
+
raise TimeoutError.new(e.message)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|