Sha256: 0b2971fcdc7644ef80d9faaf99fffe8c010bf0ddb0aa682c1fb64997c74e1155

Contents?: true

Size: 1.8 KB

Versions: 1

Compression:

Stored size: 1.8 KB

Contents

begin
  require 'memcached'
  HAS_MEMCACHE = true
rescue
  HAS_MEMCACHE = false
  puts "Sleepy with no Memcached"
end

require 'weary'

# This requires Memcached to be running on your system.
module Weary
  
  class Request
    
    def self.sleepy
      @@sleepy ||= Memcached.new
    end
    
    def sleepy
      self.class.sleepy
    end
    
    def round_time(integer, factor)
      return integer if(integer % factor == 0)
      return integer - (integer % factor)
    end
    
    def perform_sleepily(timeout=60*60*1000, &block)
      @on_complete = block if block_given?
      if HAS_MEMCACHE
        timeout = ENV["SLEEPY_TIMEOUT"] if defined?(ENV["SLEEPY_TIMEOUT"])
        response = perform_sleepily!(timeout)
      else
        response = perform
      end
      response.value
    end
    
    # Redefine the perform method
    def perform_sleepily!(timeout, &block)
      @on_complete = block if block_given?
      Thread.new {
        before_send.call(self) if before_send
        
        nap = sleepy.get("#{round_time(Time.new.to_i, timeout)}:#{uri}") rescue nil
        
        unless nap.blank?
          STDERR.puts "Return cached result #{nap.inspect}"
          nap
        else
          req = http.request(request)
          
          response = Response.new(req, self)
          begin
            if response.redirected?
              response = response.follow_redirect
            else
              on_complete.call(response) if on_complete
              response
            end
            if response.code && response.code == 200
              sleepy.set("#{round_time(Time.new.to_i, timeout)}:#{uri}", response)
              sleepy.set("0:#{uri}", response)
            end
          rescue
            sleepy.get("0:#{uri}") rescue nil
          end
          response
        end
      }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sleepy-0.1.5 lib/sleepy.rb