Skip to content

Instantly share code, notes, and snippets.

@dokipen
Created February 1, 2011 16:50
Show Gist options
  • Save dokipen/806128 to your computer and use it in GitHub Desktop.
Save dokipen/806128 to your computer and use it in GitHub Desktop.
AR to store previews.
class Preview < Base
def self._key url
Digest::SHA1.hexdigest(url)
end
def self.key_exists? url
find_redirect(url) or find_preview(url)
end
def self.find_redirect url
key = "r::#{_key url}"
find(:first, :conditions => {:key => key})
end
def self.find_preview url
key = "p::#{_key url}"
prev = find(:first, :conditions => {:key => key})
return prev if prev
if redirect = find_redirect(url)
return find_preview(redirect.value)
else
nil
end
end
def self.save_preview requested_url, preview
if preview.url != requested_url
key = "r::#{_key requested_url}"
# does the redirect exist?
r = find(:first, :conditions => { :key => key })
# it does, so update if needed
if r and r.value != preview.url
r.value = preview.url
r.save
# nope, let's created it
else
create :key => key, :value => preview.url
end
end
key = "p::#{_key preview.url}"
create :key => key, :value =>
preview.marshal_dump.to_json
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment