wip, but the refactored code works

This commit is contained in:
Maxwell Salzberg 2011-10-11 14:29:18 -07:00
parent 139ddd726a
commit cfb28db00f
7 changed files with 56 additions and 58 deletions

View file

@ -0,0 +1,32 @@
module OEmbedHelper
def o_embed_html(cache)
data = cache.data
title = data.fetch('title', 'an awesome post')
html ||= link_to(title, cache.url, :target => '_blank')
return nil unless data.has_key?('type')
case data['type']
when 'video', 'rich'
if cache.is_trusted_and_has_html?
html = data['html']
elsif data.has_key?('thumbnail_url')
html = link_to_oembed_image(cache)
end
when 'photo'
if data.has_key?('url')
img_options = cache.options_hash('')
html = link_to_oembed_image(cache, '')
end
else
end
return html.html_safe
end
def link_to_oembed_image(cache, prefix = 'thumbnail_')
link_to(oembed_image_tag(cache, prefix), cache.url, :target => '_blank')
end
def oembed_image_tag(cache, prefix)
image_tag(cache.data[prefix + 'url'], cache.image_options_hash(prefix))
end
end

View file

@ -5,7 +5,7 @@ class OEmbedCache < ActiveRecord::Base
has_many :posts
def self.find_or_create_by_url(url)
cache = OEmbedCache.find_or_build_by_url(url)
cache = OEmbedCache.find_or_initialize_by_url(url)
return cache if cache.persisted?
cache.fetch_and_save_oembed_data!
cache
@ -19,7 +19,24 @@ class OEmbedCache < ActiveRecord::Base
else
self.data = response.fields
self.data['trusted_endpoint_url'] = response.provider.endpoint
cache.save
self.save
end
end
def is_trusted_and_has_html?
self.from_trusted? and self.data.has_key?('html')
end
def from_trusted?
SECURE_ENDPOINTS.include?(self.data['trusted_endpoint_url'])
end
def options_hash(prefix = 'thumbnail_')
return nil unless self.data.has_key?(prefix + 'url')
{
:height => self.data.fetch(prefix + 'height', ''),
:width => self.data.fetch(prefix + 'width', ''),
:alt => self.data.fetch('title', ''),
}
end
end

View file

@ -28,7 +28,7 @@ class Post < ActiveRecord::Base
has_many :reshares, :class_name => "Reshare", :foreign_key => :root_guid, :primary_key => :guid
has_many :resharers, :class_name => 'Person', :through => :reshares, :source => :author
has_one :o_embed_cache
belongs_to :o_embed_cache
belongs_to :author, :class_name => 'Person'

View file

@ -157,7 +157,7 @@ class StatusMessage < Post
end
def queue_gather_oembed_data
Resque.enqueue(Jobs::GatherOEmbedData, self.oembed_url)
Resque.enqueue(Jobs::GatherOEmbedData, self.id, self.oembed_url)
end
def contains_oembed_url_in_text?

View file

@ -16,4 +16,4 @@
= link_to (image_tag photo.url(:thumb_small), :class => 'stream-photo thumb_small', 'data-small-photo' => photo.url(:thumb_medium), 'data-full-photo' => photo.url), photo_path(photo), :class => 'stream-photo-link'
%div{:class => direction_for(post.text)}
!= markdownify(post, :oembed => true, :youtube_maps => post[:youtube_titles])
!= markdownify(post, :youtube_maps => post[:youtube_titles])

View file

@ -17,3 +17,5 @@
%div{:class => direction_for(post.text)}
!= markdownify(post, :youtube_maps => post[:youtube_titles])
- if post.o_embed_cache_id.present?
= o_embed_html(post.o_embed_cache)

View file

@ -10,58 +10,5 @@ module Diaspora
auto_link(link, :link => :urls, :html => { :target => "_blank" })
end
end
class HTMLwithOEmbed < Redcarpet::Render::HTML
include ActionView::Helpers::UrlHelper
include ActionView::Helpers::TextHelper
include ActionView::Helpers::TagHelper
include ActionView::Helpers::AssetTagHelper
include ActionView::Helpers::RawOutputHelper
def autolink(link, type)
#auto_link(link, :link => :urls, :html => { :target => "_blank" })
title = link
url = auto_link(link, :link => :urls).scan(/href=["']?((?:.(?!["']?\s+(?:\S+)=|[>"']))+.)["']?/).first.first
url = CGI::unescapeHTML(url)
cache = OEmbedCache.find_by_url(url)
if not cache.nil? and cache.data.has_key?('type')
case cache.data['type']
when 'video', 'rich'
if SECURE_ENDPOINTS.include?(cache.data['trusted_endpoint_url']) and cache.data.has_key?('html')
rep = raw(cache.data['html'])
elsif cache.data.has_key?('thumbnail_url')
img_options = {}
img_options.merge!({:height => cache.data['thumbnail_height'],
:width => cache.data['thumbnail_width']}) if cache.data.has_key?('thumbnail_width') and cache.data.has_key?('thumbnail_height')
img_options[:alt] = cache.data['title'] if cache.data.has_key?('title')
rep = link_to(image_tag(cache.data['thumbnail_url'], img_options),
url, :target => '_blank')
end
when 'photo'
if cache.data.has_key?('url')
img_options = {}
img_options.merge!({:height => cache.data['height'],
:width => cache.data['width']}) if cache.data.has_key?('width') and cache.data.has_key?('height')
img_options[:alt] = cache.data['title'] if cache.data.has_key?('title')
rep = link_to(image_tag(cache.data['url'], img_options),
url, :target => '_blank')
end
else
puts "mega derp"
end
title = cache.data['title'] \
if cache.data.has_key?('title') and \
not cache.data['title'].blank?
end
rep ||= link_to(title, url, :target => '_blank') if rep.blank?
return rep
end
end
>>>>>>> wip
end
end