sleepy 0.1.0 → 0.1.1

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 (4) hide show
  1. data/README.rdoc +26 -0
  2. data/VERSION +1 -1
  3. data/lib/sleepy.rb +62 -0
  4. metadata +3 -3
data/README.rdoc CHANGED
@@ -1,5 +1,31 @@
1
1
  = sleepy
2
2
 
3
+ Tired of API requests failing or taking a long time on your mashup?
4
+
5
+ Sleepy uses memcached to cache API responses for a set time to reduce load on external services, and falls back to the last working response for a request on timeout or failure.
6
+
7
+ Based on: http://github.com/mwunsch/weary
8
+
9
+ Example:
10
+
11
+ class TwitterUser < Weary::Base
12
+
13
+ domain "http://twitter.com/users/"
14
+
15
+ get "show" do |resource|
16
+ resource.with = [:id, :user_id, :screen_name]
17
+ end
18
+ end
19
+
20
+ user = TwitterUser.new
21
+ me = user.show(:id => "markwunsch").perform_sleepily
22
+ puts me["name"]
23
+
24
+ (turn off your internet connection)
25
+
26
+ me = user.show(:id => "markwunsch").perform_sleepily
27
+ puts me["name"]
28
+
3
29
  Description goes here.
4
30
 
5
31
  == Note on Patches/Pull Requests
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
data/lib/sleepy.rb CHANGED
@@ -0,0 +1,62 @@
1
+ require 'memcached'
2
+ require 'weary'
3
+
4
+ # This requires Memcached to be running on your system.
5
+ module Weary
6
+
7
+ class Request
8
+
9
+ def self.sleepy
10
+ @@sleepy ||= Memcached.new
11
+ end
12
+
13
+ def sleepy
14
+ self.class.sleepy
15
+ end
16
+
17
+ def round_time(integer, factor)
18
+ return integer if(integer % factor == 0)
19
+ return integer - (integer % factor)
20
+ end
21
+
22
+ def perform_sleepily(timeout=60*60*1000, &block)
23
+ @on_complete = block if block_given?
24
+ response = perform_sleepily!(timeout)
25
+ response.value
26
+ end
27
+
28
+ # Redefine the perform method
29
+ def perform_sleepily!(timeout=60*60*1000, &block)
30
+ @on_complete = block if block_given?
31
+ Thread.new {
32
+ STDERR.puts "Before send: #{uri}"
33
+ before_send.call(self) if before_send
34
+
35
+ STDERR.puts "try nap"
36
+ nap = sleepy.get("#{round_time(Time.new.to_i, timeout)}:#{uri}") rescue nil
37
+
38
+ unless nap.blank?
39
+ STDERR.puts "Return cached result #{nap.inspect}"
40
+ nap
41
+ else
42
+ req = http.request(request)
43
+
44
+ response = Response.new(req, self)
45
+ begin
46
+ if response.redirected? && follows?
47
+ response.follow_redirect
48
+ else
49
+ on_complete.call(response) if on_complete
50
+ response
51
+ end
52
+ sleepy.set("#{round_time(Time.new.to_i, timeout)}:#{uri}", response)
53
+ sleepy.set("0:#{uri}", response)
54
+ rescue
55
+ sleepy.get("0:#{uri}") rescue nil
56
+ end
57
+ response
58
+ end
59
+ }
60
+ end
61
+ end
62
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sleepy
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - steflewandowski