diaspora/app/models/jobs/gather_o_embed_data.rb
2011-10-11 16:09:16 -07:00

45 lines
1.3 KiB
Ruby

# Copyright (c) 2010-2011, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
#
module Jobs
class GatherOEmbedData < Base
@queue = :http_service
class GatherOEmbedRenderer < Redcarpet::Render::HTML
include ActionView::Helpers::TextHelper
include ActionView::Helpers::TagHelper
def isHttp?(url)
URI.parse(url).scheme.downcase == 'http'
end
def autolink(link, type)
url = auto_link(link, :link => :urls).scan(/href=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']?/).first.first
url = CGI::unescapeHTML(url)
return url if OEmbedCache.exists?(:url => url) or not isHttp?(url)
begin
res = ::OEmbed::Providers.get(url, {:maxwidth => 420, :maxheight => 420, :frame => 1, :iframe => 1})
rescue Exception => e
# noop
else
data = res.fields
data['trusted_endpoint_url'] = res.provider.endpoint
cache = OEmbedCache.new(:url => url, :data => data)
cache.save
end
return url
end
end
def self.perform(text)
renderer = GatherOEmbedRenderer.new({})
markdown = Redcarpet::Markdown.new(renderer, {:autolink => true})
message = markdown.render(text)
end
end
end