mirror of
https://github.com/discourse/discourse.git
synced 2025-04-03 04:19:32 +08:00
FIX: Allow expanding posts when anonymous, add specs
This commit is contained in:
parent
baff2c2fd7
commit
10d0320532
@ -5,7 +5,7 @@ require_dependency 'distributed_memoizer'
|
|||||||
class PostsController < ApplicationController
|
class PostsController < ApplicationController
|
||||||
|
|
||||||
# Need to be logged in for all actions here
|
# Need to be logged in for all actions here
|
||||||
before_filter :ensure_logged_in, except: [:show, :replies, :by_number, :short_link, :reply_history, :revisions]
|
before_filter :ensure_logged_in, except: [:show, :replies, :by_number, :short_link, :reply_history, :revisions, :expand_embed]
|
||||||
|
|
||||||
skip_before_filter :store_incoming_links, only: [:short_link]
|
skip_before_filter :store_incoming_links, only: [:short_link]
|
||||||
skip_before_filter :check_xhr, only: [:markdown,:short_link]
|
skip_before_filter :check_xhr, only: [:markdown,:short_link]
|
||||||
@ -144,14 +144,7 @@ class PostsController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def expand_embed
|
def expand_embed
|
||||||
post = find_post_from_params
|
render json: {cooked: TopicEmbed.expanded_for(find_post_from_params) }
|
||||||
content = Rails.cache.fetch("embed-topic:#{post.topic_id}", expires_in: 10.minutes) do
|
|
||||||
url = TopicEmbed.where(topic_id: post.topic_id).pluck(:embed_url).first
|
|
||||||
title, body = TopicEmbed.find_remote(url)
|
|
||||||
body << TopicEmbed.imported_from_html(url)
|
|
||||||
body
|
|
||||||
end
|
|
||||||
render json: {cooked: content}
|
|
||||||
rescue
|
rescue
|
||||||
render_json_error I18n.t('errors.embed.load_from_remote')
|
render_json_error I18n.t('errors.embed.load_from_remote')
|
||||||
end
|
end
|
||||||
|
@ -137,6 +137,16 @@ class TopicEmbed < ActiveRecord::Base
|
|||||||
# If there is no first paragaph, return the first div (onebox)
|
# If there is no first paragaph, return the first div (onebox)
|
||||||
doc.css('div').first
|
doc.css('div').first
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.expanded_for(post)
|
||||||
|
Rails.cache.fetch("embed-topic:#{post.topic_id}", expires_in: 10.minutes) do
|
||||||
|
url = TopicEmbed.where(topic_id: post.topic_id).pluck(:embed_url).first
|
||||||
|
title, body = TopicEmbed.find_remote(url)
|
||||||
|
body << TopicEmbed.imported_from_html(url)
|
||||||
|
body
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# == Schema Information
|
# == Schema Information
|
||||||
|
@ -490,4 +490,21 @@ describe PostsController do
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'expandable embedded posts' do
|
||||||
|
let(:post) { Fabricate(:post) }
|
||||||
|
|
||||||
|
it "raises an error when you can't see the post" do
|
||||||
|
Guardian.any_instance.expects(:can_see?).with(post).returns(false)
|
||||||
|
xhr :get, :expand_embed, id: post.id
|
||||||
|
response.should_not be_success
|
||||||
|
end
|
||||||
|
|
||||||
|
it "retrieves the body when you can see the post" do
|
||||||
|
Guardian.any_instance.expects(:can_see?).with(post).returns(true)
|
||||||
|
TopicEmbed.expects(:expanded_for).with(post).returns("full content")
|
||||||
|
xhr :get, :expand_embed, id: post.id
|
||||||
|
response.should be_success
|
||||||
|
::JSON.parse(response.body)['cooked'].should == "full content"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user