From 1dfcb26deb5c1592aa2de1a253ff11d7b526e087 Mon Sep 17 00:00:00 2001 From: Victor Costa Date: Thu, 7 Aug 2014 19:16:27 -0300 Subject: [PATCH] Added a option to create a link when approve an article --- app/models/approve_article.rb | 7 ++++++- app/models/article.rb | 5 +++++ app/models/link_article.rb | 12 ++++++++++++ app/views/tasks/_approve_article_accept_details.html.erb | 2 ++ test/unit/approve_article_test.rb | 9 +++++++++ test/unit/link_article_test.rb | 32 ++++++++++++++++++++++++++++++++ 6 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 app/models/link_article.rb create mode 100644 test/unit/link_article_test.rb diff --git a/app/models/approve_article.rb b/app/models/approve_article.rb index 28f477e..bbafa90 100644 --- a/app/models/approve_article.rb +++ b/app/models/approve_article.rb @@ -22,6 +22,7 @@ class ApproveArticle < Task end settings_items :closing_statment, :article_parent_id, :highlighted + settings_items :create_link, :type => :boolean, :default => false def article_parent Article.find_by_id article_parent_id.to_i @@ -48,7 +49,11 @@ class ApproveArticle < Task end def perform - article.copy!(:name => name, :abstract => abstract, :body => body, :profile => target, :reference_article => article, :parent => article_parent, :highlighted => highlighted, :source => article.source, :last_changed_by_id => article.last_changed_by_id, :created_by_id => article.created_by_id) + if create_link + LinkArticle.create!(:reference_article => article, :profile => target) + else + article.copy!(:name => name, :abstract => abstract, :body => body, :profile => target, :reference_article => article, :parent => article_parent, :highlighted => highlighted, :source => article.source, :last_changed_by_id => article.last_changed_by_id, :created_by_id => article.created_by_id) + end end def title diff --git a/app/models/article.rb b/app/models/article.rb index c4aceeb..7b6176c 100644 --- a/app/models/article.rb +++ b/app/models/article.rb @@ -96,6 +96,11 @@ class Article < ActiveRecord::Base self.activity.destroy if self.activity end + after_destroy :destroy_link_article + def destroy_link_article + Article.where(:reference_article_id => self.id, :type => LinkArticle).destroy_all + end + xss_terminate :only => [ :name ], :on => 'validation', :with => 'white_list' scope :in_category, lambda { |category| diff --git a/app/models/link_article.rb b/app/models/link_article.rb new file mode 100644 index 0000000..34ef6e4 --- /dev/null +++ b/app/models/link_article.rb @@ -0,0 +1,12 @@ +class LinkArticle < Article + + attr_accessible :reference_article + + def self.short_description + "Article link" + end + + delegate :name, :to => :reference_article + delegate :url, :to => :reference_article + +end diff --git a/app/views/tasks/_approve_article_accept_details.html.erb b/app/views/tasks/_approve_article_accept_details.html.erb index fd35293..d0760c9 100644 --- a/app/views/tasks/_approve_article_accept_details.html.erb +++ b/app/views/tasks/_approve_article_accept_details.html.erb @@ -1,5 +1,7 @@ <%= render :file => 'shared/tiny_mce' %> +<%= labelled_form_field(_('Create a link'), f.check_box(:create_link)) %> + <%= labelled_form_field(_('Name for publishing'), f.text_field(:name)) %> <%= select_profile_folder(_('Select the folder where the article must be published'), "tasks[#{task.id}][task][article_parent_id]", task.target) %> <%= labelled_form_field(_('Highlight this article'), f.check_box(:highlighted)) %> diff --git a/test/unit/approve_article_test.rb b/test/unit/approve_article_test.rb index 5900cc0..229fa95 100644 --- a/test/unit/approve_article_test.rb +++ b/test/unit/approve_article_test.rb @@ -431,4 +431,13 @@ class ApproveArticleTest < ActiveSupport::TestCase end end + should 'create link to referenced article' do + article = fast_create(Article) + a = create(ApproveArticle, :name => 'test name', :article => article, :target => community, :requestor => profile) + a.create_link = true + a.finish + + assert_equal article, LinkArticle.last.reference_article + end + end diff --git a/test/unit/link_article_test.rb b/test/unit/link_article_test.rb new file mode 100644 index 0000000..c2e3745 --- /dev/null +++ b/test/unit/link_article_test.rb @@ -0,0 +1,32 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class LinkArticleTest < ActiveSupport::TestCase + + def setup + @profile = create_user('testing').person + end + attr_reader :profile + + should 'url of article link redirects to referenced article' do + article = fast_create(Article, :profile_id => profile.id) + link = LinkArticle.new(:reference_article => article) + assert_equal article.url, link.url + end + + should 'name of article link is the same as the name of referenced article' do + article = fast_create(Article, :profile_id => profile.id) + link = LinkArticle.new(:reference_article => article) + assert_equal article.name, link.name + end + + should 'destroy link article when reference article is removed' do + target_profile = fast_create(Community) + article = fast_create(Article, :profile_id => profile.id) + link = LinkArticle.create!(:reference_article => article, :profile => target_profile) + article.destroy + assert_raise ActiveRecord::RecordNotFound do + link.reload + end + end + +end -- libgit2 0.21.2