DanaDanger-ruby_tubesday 0.1 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/ruby_tubesday.rb +21 -7
- metadata +2 -2
data/lib/ruby_tubesday.rb
CHANGED
@@ -36,6 +36,8 @@ class RubyTubesday
|
|
36
36
|
# cache:: An instance of an ActiveSupport::Cache subclass to use
|
37
37
|
# as a content cache. You can set this to false to disable
|
38
38
|
# caching. Default is a new MemoryStore.
|
39
|
+
# force_cache:: An amount of time to cache requests, regardless of the
|
40
|
+
# request's cache control policy. Default is nil.
|
39
41
|
# params:: Parameters to include in every request. For example, if
|
40
42
|
# the service you're accessing requires an API key, you can
|
41
43
|
# set it here and it will be included in every request made
|
@@ -53,18 +55,21 @@ class RubyTubesday
|
|
53
55
|
# request.
|
54
56
|
# password:: Username to send using basic authentication with every
|
55
57
|
# request.
|
58
|
+
# headers:: Hash of HTTP headers to set for every request.
|
56
59
|
#
|
57
60
|
# All of these options can be overriden on a per-request basis.
|
58
61
|
def initialize(options = {})
|
59
62
|
@default_options = {
|
60
63
|
:raw => false,
|
61
64
|
:cache => ActiveSupport::Cache::MemoryStore.new,
|
65
|
+
:force_cache => nil,
|
62
66
|
:params => {},
|
63
67
|
:max_redirects => 5,
|
64
68
|
:ca_file => (File.dirname(__FILE__) + '/../ca-bundle.crt'),
|
65
69
|
:verify_ssl => true,
|
66
70
|
:username => nil,
|
67
|
-
:password => nil
|
71
|
+
:password => nil,
|
72
|
+
:headers => nil
|
68
73
|
}
|
69
74
|
@default_options = normalize_options(options)
|
70
75
|
end
|
@@ -129,17 +134,20 @@ protected
|
|
129
134
|
normalized_options = {
|
130
135
|
:raw => options.delete(:raw),
|
131
136
|
:cache => options.delete(:cache),
|
137
|
+
:force_cache => options.delete(:force_cache),
|
132
138
|
:params => options.delete(:params) || @default_options[:params],
|
133
139
|
:max_redirects => options.delete(:max_redirects) || @default_options[:max_redirects],
|
134
140
|
:ca_file => options.delete(:ca_file) || @default_options[:ca_file],
|
135
141
|
:verify_ssl => options.delete(:verify_ssl),
|
136
142
|
:username => options.delete(:username) || @default_options[:username],
|
137
|
-
:password => options.delete(:password) || @default_options[:password]
|
143
|
+
:password => options.delete(:password) || @default_options[:password],
|
144
|
+
:headers => options.delete(:headers) || @default_options[:headers]
|
138
145
|
}
|
139
146
|
|
140
|
-
normalized_options[:raw]
|
141
|
-
normalized_options[:cache]
|
142
|
-
normalized_options[:
|
147
|
+
normalized_options[:raw] = @default_options[:raw] if normalized_options[:raw].nil?
|
148
|
+
normalized_options[:cache] = @default_options[:cache] if normalized_options[:cache].nil?
|
149
|
+
normalized_options[:force_cache] = @default_options[:force_cache] if normalized_options[:force_cache].nil?
|
150
|
+
normalized_options[:verify_ssl] = @default_options[:verify_ssl] if normalized_options[:verify_ssl].nil?
|
143
151
|
|
144
152
|
unless options.empty?
|
145
153
|
raise ArgumentError, "unrecognized keys: `#{options.keys.join('\', `')}'"
|
@@ -157,7 +165,7 @@ protected
|
|
157
165
|
response = Marshal.load(options[:cache].read(url.to_s))
|
158
166
|
response_age = Time.now - Time.parse(response['Last-Modified'] || response['Date'])
|
159
167
|
cache_policy = CachePolicy.new(response['Cache-Control'], cache_policy_options)
|
160
|
-
if cache_policy.fetch_action(response_age)
|
168
|
+
if (options[:force_cache] && (options[:force_cache] < response_age)) || cache_policy.fetch_action(response_age)
|
161
169
|
response = nil
|
162
170
|
end
|
163
171
|
end
|
@@ -166,6 +174,12 @@ protected
|
|
166
174
|
if response.nil?
|
167
175
|
redirects_left = options[:max_redirects]
|
168
176
|
|
177
|
+
# Configure headers.
|
178
|
+
headers = options[:headers] || {}
|
179
|
+
headers.each do |key, value|
|
180
|
+
request[key] = value
|
181
|
+
end
|
182
|
+
|
169
183
|
while !response.is_a?(Net::HTTPSuccess)
|
170
184
|
client = Net::HTTP.new(url.host, url.port)
|
171
185
|
|
@@ -196,7 +210,7 @@ protected
|
|
196
210
|
# Write the response to the cache if we're allowed to.
|
197
211
|
if request.is_a?(Net::HTTP::Get) && options[:cache]
|
198
212
|
cache_policy = CachePolicy.new(response['Cache-Control'], cache_policy_options)
|
199
|
-
if cache_policy.may_cache?
|
213
|
+
if cache_policy.may_cache? || options[:force_cache]
|
200
214
|
options[:cache].write(url.to_s, Marshal.dump(response))
|
201
215
|
end
|
202
216
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: DanaDanger-ruby_tubesday
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "0.
|
4
|
+
version: "0.2"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- DanaDanger
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-08
|
12
|
+
date: 2008-10-08 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|