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.
Files changed (42) hide show
  1. data/.document +5 -0
  2. data/.gitignore +5 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +7 -0
  5. data/Rakefile +49 -0
  6. data/VERSION.yml +4 -0
  7. data/doc/classes/Collection.html +205 -0
  8. data/doc/classes/Collection.src/M000001.html +22 -0
  9. data/doc/classes/Collection.src/M000002.html +18 -0
  10. data/doc/classes/Collection.src/M000003.html +18 -0
  11. data/doc/classes/Collection.src/M000004.html +18 -0
  12. data/doc/classes/Collection.src/M000005.html +18 -0
  13. data/doc/classes/OAuthActiveResource.html +165 -0
  14. data/doc/classes/OAuthActiveResource.src/M000006.html +63 -0
  15. data/doc/classes/OAuthActiveResource.src/M000007.html +20 -0
  16. data/doc/classes/OAuthActiveResource/Connection.html +158 -0
  17. data/doc/classes/OAuthActiveResource/Connection.src/M000012.html +19 -0
  18. data/doc/classes/OAuthActiveResource/Connection.src/M000013.html +18 -0
  19. data/doc/classes/OAuthActiveResource/Resource.html +233 -0
  20. data/doc/classes/OAuthActiveResource/Resource.src/M000008.html +20 -0
  21. data/doc/classes/OAuthActiveResource/Resource.src/M000009.html +19 -0
  22. data/doc/classes/OAuthActiveResource/Resource.src/M000010.html +32 -0
  23. data/doc/classes/OAuthActiveResource/Resource.src/M000011.html +31 -0
  24. data/doc/created.rid +1 -0
  25. data/doc/files/lib/oauth_active_resource/collection_rb.html +101 -0
  26. data/doc/files/lib/oauth_active_resource/connection_rb.html +101 -0
  27. data/doc/files/lib/oauth_active_resource/resource_rb.html +110 -0
  28. data/doc/files/lib/oauth_active_resource_rb.html +112 -0
  29. data/doc/fr_class_index.html +30 -0
  30. data/doc/fr_file_index.html +30 -0
  31. data/doc/fr_method_index.html +39 -0
  32. data/doc/index.html +24 -0
  33. data/doc/rdoc-style.css +208 -0
  34. data/lib/oauth_active_resource.rb +66 -0
  35. data/lib/oauth_active_resource/connection.rb +43 -0
  36. data/lib/oauth_active_resource/fake_oauth_access_token.rb +55 -0
  37. data/lib/oauth_active_resource/resource.rb +119 -0
  38. data/lib/oauth_active_resource/unique_resource_array.rb +87 -0
  39. data/oauth-active-resource.gemspec +86 -0
  40. data/spec/oauth_active_resource_spec.rb +24 -0
  41. data/spec/spec_helper.rb +30 -0
  42. 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>
@@ -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