48 lines
870 B
Ruby
48 lines
870 B
Ruby
|
class InlineOneboxer
|
||
|
|
||
|
def initialize(urls)
|
||
|
@urls = urls
|
||
|
end
|
||
|
|
||
|
def process
|
||
|
@urls.map {|url| InlineOneboxer.lookup(url) }.compact
|
||
|
end
|
||
|
|
||
|
def self.clear_cache!
|
||
|
end
|
||
|
|
||
|
def self.cache_lookup(url)
|
||
|
Rails.cache.read(cache_key(url))
|
||
|
end
|
||
|
|
||
|
def self.lookup(url)
|
||
|
cached = cache_lookup(url)
|
||
|
return cached if cached.present?
|
||
|
|
||
|
if route = Discourse.route_for(url)
|
||
|
if route[:controller] == "topics" &&
|
||
|
route[:action] == "show" &&
|
||
|
|
||
|
topic = Topic.where(id: route[:topic_id].to_i).first
|
||
|
|
||
|
# Only public topics
|
||
|
if Guardian.new.can_see?(topic)
|
||
|
onebox = { url: url, title: topic.title }
|
||
|
Rails.cache.write(cache_key(url), onebox, expires_in: 1.day)
|
||
|
return onebox
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
nil
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def self.cache_key(url)
|
||
|
"inline_onebox:#{url}"
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|