From 708a41ee1c694ec1b79944e8badcfc66db0a5c9e Mon Sep 17 00:00:00 2001 From: rgarcia Date: Mon, 28 Sep 2015 19:23:27 +0200 Subject: [PATCH] refactors debate and proposal controllers --- app/controllers/concerns/commentable.rb | 105 ++++++++++++++++++++++++ app/controllers/debates_controller.rb | 67 +-------------- app/controllers/proposals_controller.rb | 67 +-------------- 3 files changed, 111 insertions(+), 128 deletions(-) create mode 100644 app/controllers/concerns/commentable.rb diff --git a/app/controllers/concerns/commentable.rb b/app/controllers/concerns/commentable.rb new file mode 100644 index 000000000..82c17ad15 --- /dev/null +++ b/app/controllers/concerns/commentable.rb @@ -0,0 +1,105 @@ +module Commentable + extend ActiveSupport::Concern + + def index + @commentables = @search_terms.present? ? commentable_model.search(@search_terms) : commentable_model.all + @commentables = @commentables.tagged_with(@tag_filter) if @tag_filter + @commentables = @commentables.page(params[:page]).for_render.send("sort_by_#{@current_order}") + @tag_cloud = tag_cloud + + set_commentable_votes(@commentables) + set_commentables_instance + end + + def show + set_commentable_votes(commentable) + @root_comments = commentable.comments.roots.recent.page(params[:page]).per(10).for_render + @comments = @root_comments.inject([]){|all, root| all + Comment.descendants_of(root).for_render} + @all_visible_comments = @root_comments + @comments + + set_comment_flags(@all_visible_comments) + set_commentable_instance + end + + def new + @commentable = commentable_model.new + set_commentable_instance + load_featured_tags + end + + def create + @commentable = commentable_model.new(strong_params) + @commentable.author = current_user + + if @commentable.save_with_captcha + track_event + redirect_to @commentable, notice: t('flash.actions.create.notice', resource_name: "#{controller_name.singularize.capitalize}") + else + load_featured_tags + set_commentable_instance + render :new + end + end + + def edit + load_featured_tags + end + + def update + commentable.assign_attributes(strong_params) + if commentable.save_with_captcha + redirect_to commentable, notice: t('flash.actions.update.notice', resource_name: "#{controller_name.singularize.capitalize}") + else + load_featured_tags + set_commentable_instance + render :edit + end + end + + private + def commentable + @commentable ||= instance_variable_get("@#{controller_name.singularize}") + end + + def commentable_model + @commentable_model ||= controller_name.singularize.capitalize.constantize + end + + def set_commentable_instance + instance_variable_set("@#{controller_name.singularize}", @commentable) + end + + def set_commentables_instance + instance_variable_set("@#{controller_name}", @commentables) + end + + def set_commentable_votes(instance) + send("set_#{controller_name.singularize}_votes", instance) + end + + def strong_params + send("#{controller_name.singularize}_params") + end + + def track_event + ahoy.track "#{controller_name.singularize}_created".to_sym, "#{controller_name.singularize}_id": commentable.id + end + + def tag_cloud + commentable_model.tag_counts.order("#{controller_name}_count": :desc, name: :asc).limit(20) + end + + def load_featured_tags + @featured_tags = ActsAsTaggableOn::Tag.where(featured: true) + end + + def parse_tag_filter + if params[:tag].present? + @tag_filter = params[:tag] if ActsAsTaggableOn::Tag.named(params[:tag]).exists? + end + end + + def parse_search_terms + @search_terms = params[:search] if params[:search].present? + end +end \ No newline at end of file diff --git a/app/controllers/debates_controller.rb b/app/controllers/debates_controller.rb index b43219d71..2bff1f0f8 100644 --- a/app/controllers/debates_controller.rb +++ b/app/controllers/debates_controller.rb @@ -1,64 +1,16 @@ class DebatesController < ApplicationController + include Commentable include FlagActions - before_action :parse_tag_filter, only: :index before_action :parse_search_terms, only: :index + before_action :parse_tag_filter, only: :index before_action :authenticate_user!, except: [:index, :show] + has_orders %w{hot_score confidence_score created_at most_commented random}, only: :index load_and_authorize_resource respond_to :html, :js - def index - @debates = @search_terms.present? ? Debate.search(@search_terms) : Debate.all - @debates = @debates.tagged_with(@tag_filter) if @tag_filter - @debates = @debates.page(params[:page]).for_render.send("sort_by_#{@current_order}") - @tag_cloud = Debate.tag_counts.order(debates_count: :desc, name: :asc).limit(20) - set_debate_votes(@debates) - end - - def show - set_debate_votes(@debate) - @commentable = @debate - @root_comments = @debate.comments.roots.recent.page(params[:page]).per(10).for_render - @comments = @root_comments.inject([]){|all, root| all + Comment.descendants_of(root).for_render} - - @all_visible_comments = @root_comments + @comments - set_comment_flags(@all_visible_comments) - end - - def new - @debate = Debate.new - load_featured_tags - end - - def create - @debate = Debate.new(debate_params) - @debate.author = current_user - - if @debate.save_with_captcha - ahoy.track :debate_created, debate_id: @debate.id - redirect_to @debate, notice: t('flash.actions.create.notice', resource_name: 'Debate') - else - load_featured_tags - render :new - end - end - - def edit - load_featured_tags - end - - def update - @debate.assign_attributes(debate_params) - if @debate.save_with_captcha - redirect_to @debate, notice: t('flash.actions.update.notice', resource_name: 'Debate') - else - load_featured_tags - render :edit - end - end - def vote @debate.register_vote(current_user, params[:value]) set_debate_votes(@debate) @@ -70,17 +22,4 @@ class DebatesController < ApplicationController params.require(:debate).permit(:title, :description, :tag_list, :terms_of_service, :captcha, :captcha_key) end - def load_featured_tags - @featured_tags = ActsAsTaggableOn::Tag.where(featured: true) - end - - def parse_tag_filter - if params[:tag].present? - @tag_filter = params[:tag] if ActsAsTaggableOn::Tag.named(params[:tag]).exists? - end - end - - def parse_search_terms - @search_terms = params[:search] if params[:search].present? - end end diff --git a/app/controllers/proposals_controller.rb b/app/controllers/proposals_controller.rb index fc5d954b6..b5069b184 100644 --- a/app/controllers/proposals_controller.rb +++ b/app/controllers/proposals_controller.rb @@ -1,64 +1,16 @@ class ProposalsController < ApplicationController + include Commentable include FlagActions - before_action :parse_tag_filter, only: :index before_action :parse_search_terms, only: :index + before_action :parse_tag_filter, only: :index before_action :authenticate_user!, except: [:index, :show] + has_orders %w{hot_score confidence_score created_at most_commented random}, only: :index load_and_authorize_resource respond_to :html, :js - def index - @proposals = @search_terms.present? ? Proposal.search(@search_terms) : Proposal.all - @proposals = @proposals.tagged_with(@tag_filter) if @tag_filter - @proposals = @proposals.page(params[:page]).for_render.send("sort_by_#{@current_order}") - @tag_cloud = Proposal.tag_counts.order(proposals_count: :desc, name: :asc).limit(20) - set_proposal_votes(@proposals) - end - - def show - set_proposal_votes(@proposal) - @commentable = @proposal - @root_comments = @proposal.comments.roots.recent.page(params[:page]).per(10).for_render - @comments = @root_comments.inject([]){|all, root| all + Comment.descendants_of(root).for_render} - - @all_visible_comments = @root_comments + @comments - set_comment_flags(@all_visible_comments) - end - - def new - @proposal = Proposal.new - load_featured_tags - end - - def create - @proposal = Proposal.new(proposal_params) - @proposal.author = current_user - - if @proposal.save_with_captcha - ahoy.track :proposal_created, proposal_id: @proposal.id - redirect_to @proposal, notice: t('flash.actions.create.notice', resource_name: 'Proposal') - else - load_featured_tags - render :new - end - end - - def edit - load_featured_tags - end - - def update - @proposal.assign_attributes(proposal_params) - if @proposal.save_with_captcha - redirect_to @proposal, notice: t('flash.actions.update.notice', resource_name: 'Proposal') - else - load_featured_tags - render :edit - end - end - def vote @proposal.register_vote(current_user, 'yes') set_proposal_votes(@proposal) @@ -70,17 +22,4 @@ class ProposalsController < ApplicationController params.require(:proposal).permit(:title, :question, :summary, :description, :external_url, :video_url, :responsible_name, :tag_list, :terms_of_service, :captcha, :captcha_key) end - def load_featured_tags - @featured_tags = ActsAsTaggableOn::Tag.where(featured: true) - end - - def parse_tag_filter - if params[:tag].present? - @tag_filter = params[:tag] if ActsAsTaggableOn::Tag.named(params[:tag]).exists? - end - end - - def parse_search_terms - @search_terms = params[:search] if params[:search].present? - end end