From efef1fc99875b93c1e1b090014b75119f61c1f18 Mon Sep 17 00:00:00 2001 From: Evandro Junior Date: Fri, 4 Sep 2015 18:48:54 -0300 Subject: [PATCH] Avoid duplicated tasks --- db/migrate/20150903210329_add_proposal_discussion_plugin_simplified_abstract_to_tasks.rb | 9 +++++++++ lib/proposals_discussion_plugin/proposal_task.rb | 15 ++++++++++++++- test/unit/proposal_task_test.rb | 10 ++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20150903210329_add_proposal_discussion_plugin_simplified_abstract_to_tasks.rb diff --git a/db/migrate/20150903210329_add_proposal_discussion_plugin_simplified_abstract_to_tasks.rb b/db/migrate/20150903210329_add_proposal_discussion_plugin_simplified_abstract_to_tasks.rb new file mode 100644 index 0000000..c3d016a --- /dev/null +++ b/db/migrate/20150903210329_add_proposal_discussion_plugin_simplified_abstract_to_tasks.rb @@ -0,0 +1,9 @@ +class AddProposalDiscussionPluginSimplifiedAbstractToTasks < ActiveRecord::Migration + def change + add_column :tasks, :proposal_discussion_plugin_simplified_abstract, :text + add_index :tasks, :proposal_discussion_plugin_simplified_abstract + ProposalsDiscussionPlugin::ProposalTask.find_each do |t| + t.update_attribute :proposal_discussion_plugin_simplified_abstract, ProposalsDiscussionPlugin::ProposalTask.simplify(t.abstract) + end + end +end diff --git a/lib/proposals_discussion_plugin/proposal_task.rb b/lib/proposals_discussion_plugin/proposal_task.rb index 743a920..6dc1639 100644 --- a/lib/proposals_discussion_plugin/proposal_task.rb +++ b/lib/proposals_discussion_plugin/proposal_task.rb @@ -10,8 +10,9 @@ class ProposalsDiscussionPlugin::ProposalTask < Task validates_presence_of :requestor_id, :target_id validates_associated :article_object - + before_validation :simplify_abstract validate :require_category + validates_uniqueness_of :proposal_discussion_plugin_simplified_abstract, :scope => ['target_id'], :message => _("Cannot create duplicate proposal") settings_items :name, :type => String settings_items :ip_address, :type => String @@ -258,8 +259,20 @@ class ProposalsDiscussionPlugin::ProposalTask < Task parent.name if parent end + def self.simplify(s) + return nil if s.nil? + s=I18n.transliterate(s) + s.gsub!(/(^\s)|([',.?!])|(\s$)/, "") + s.gsub!(/\s{2,}/, " ") + s.downcase + end + protected + def simplify_abstract + proposal_discussion_plugin_simplified_abstract = ProposalsDiscussionPlugin::ProposalTask.simplify(self[:data][:article]["abstract"]) + end + def require_category if categories.count == 0 && flagged? errors.add :categories, _('Select at least one category') diff --git a/test/unit/proposal_task_test.rb b/test/unit/proposal_task_test.rb index fe9606b..d78d2c8 100644 --- a/test/unit/proposal_task_test.rb +++ b/test/unit/proposal_task_test.rb @@ -1,3 +1,4 @@ +# encoding: UTF-8 require_relative '../test_helper' class ProposalTaskTest < ActiveSupport::TestCase @@ -83,4 +84,13 @@ class ProposalTaskTest < ActiveSupport::TestCase assert task.information.present? end + should 'not register duplicate task' do + task = ProposalsDiscussionPlugin::ProposalTask.create!(:requestor => person, :target => profile, :article => {:name => 'proposal 1', :abstract => ' Alô ! ruby é legal a bêçá. seu moÇo, não Acha? '}) + task.categories = [fast_create(ProposalsDiscussionPlugin::TaskCategory)] + task.save! + task = ProposalsDiscussionPlugin::ProposalTask.new(:requestor => person, :target => profile, :article => {:name => 'proposal 1', :abstract => 'alo ruby e legal a beca seu moco nao acha'}) + task.categories = [fast_create(ProposalsDiscussionPlugin::TaskCategory)] + assert !task.valid? + end + end -- libgit2 0.21.2