From 120bd7940f46722dc80b8b9ea472a4fff75831ab Mon Sep 17 00:00:00 2001 From: Brunno Souza Date: Wed, 7 Oct 2020 02:04:08 -0300 Subject: [PATCH] Move method #approved_liquid_tags to user service (#10663) --- app/controllers/articles_controller.rb | 17 ++--------------- app/services/users/approved_liquid_tags.rb | 13 +++++++++++++ .../services/users/approved_liquid_tags_spec.rb | 17 +++++++++++++++++ 3 files changed, 32 insertions(+), 15 deletions(-) create mode 100644 app/services/users/approved_liquid_tags.rb create mode 100644 spec/services/users/approved_liquid_tags_spec.rb diff --git a/app/controllers/articles_controller.rb b/app/controllers/articles_controller.rb index ad8884ac8..d89705f23 100644 --- a/app/controllers/articles_controller.rb +++ b/app/controllers/articles_controller.rb @@ -18,8 +18,6 @@ class ArticlesController < ApplicationController rowspan size span src start strong title value width ].freeze - RESTRICTED_LIQUID_TAGS = [UserSubscriptionTag].freeze - def feed skip_authorization @@ -70,7 +68,7 @@ class ArticlesController < ApplicationController @version = @article.has_frontmatter? ? "v1" : "v2" @user = @article.user @organizations = @user&.organizations - set_user_approved_liquid_tags + @user_approved_liquid_tags = Users::ApprovedLiquidTags.call(@user) end def manage @@ -213,18 +211,7 @@ class ArticlesController < ApplicationController @organizations = @user&.organizations @tag = Tag.find_by(name: params[:template]) @prefill = params[:prefill].to_s.gsub("\\n ", "\n").gsub("\\n", "\n") - set_user_approved_liquid_tags - end - - def set_user_approved_liquid_tags - @user_approved_liquid_tags = - if @user - RESTRICTED_LIQUID_TAGS.filter_map do |liquid_tag| - liquid_tag if liquid_tag::VALID_ROLES.any? { |role| @user.has_role?(*Array(role)) } - end - else - [] - end + @user_approved_liquid_tags = Users::ApprovedLiquidTags.call(@user) end def handle_user_or_organization_feed diff --git a/app/services/users/approved_liquid_tags.rb b/app/services/users/approved_liquid_tags.rb new file mode 100644 index 000000000..8163eda8c --- /dev/null +++ b/app/services/users/approved_liquid_tags.rb @@ -0,0 +1,13 @@ +module Users + module ApprovedLiquidTags + RESTRICTED_LIQUID_TAGS = [UserSubscriptionTag].freeze + + def self.call(user) + return [] unless user + + RESTRICTED_LIQUID_TAGS.filter_map do |liquid_tag| + liquid_tag if liquid_tag::VALID_ROLES.any? { |role| user.has_role?(*Array(role)) } + end + end + end +end diff --git a/spec/services/users/approved_liquid_tags_spec.rb b/spec/services/users/approved_liquid_tags_spec.rb new file mode 100644 index 000000000..182b37012 --- /dev/null +++ b/spec/services/users/approved_liquid_tags_spec.rb @@ -0,0 +1,17 @@ +require "rails_helper" + +RSpec.describe Users::ApprovedLiquidTags, type: :service do + subject { described_class.call(user) } + + context "when user is admin" do + let(:user) { create(:user, :admin) } + + it { is_expected.to match([UserSubscriptionTag]) } + end + + context "when user has no role" do + let(:user) { create(:user) } + + it { is_expected.to be_empty } + end +end