From 2a5e35c7160624ba5225e065f7d726b01abb2612 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Wed, 18 Dec 2024 15:05:10 +0000 Subject: [PATCH] Convert social share helper library into a real helper --- app/helpers/application_helper.rb | 29 -------------- .../helpers}/social_share_button_helper.rb | 38 +++++++++++++++++-- .../social_share_button_helper_test.rb | 12 ------ 3 files changed, 34 insertions(+), 45 deletions(-) rename {lib => app/helpers}/social_share_button_helper.rb (66%) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 5558e69fb..fcf253289 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,6 +1,5 @@ module ApplicationHelper require "rexml/document" - include SocialShareButtonHelper def linkify(text) if text.html_safe? @@ -76,32 +75,4 @@ module ApplicationHelper rescue StandardError flash.inspect if Rails.env.development? end - - # Generates a set of social share buttons based on the specified options. - def render_social_share_buttons(opts = {}) - sites = opts.fetch(:allow_sites, []) - valid_sites, invalid_sites = SocialShareButtonHelper.filter_allowed_sites(sites) - - # Log invalid sites - invalid_sites.each do |invalid_site| - Rails.logger.error("Invalid site or icon not configured: #{invalid_site}") - end - - tag.div( - :class => "social-share-button d-flex gap-1 align-items-end flex-wrap mb-3" - ) do - valid_sites.map do |site| - link_options = { - :rel => ["nofollow", opts[:rel]].compact, - :class => "ssb-icon rounded-circle", - :title => I18n.t("application.share.#{site}.title"), - :target => "_blank" - } - - link_to SocialShareButtonHelper.generate_share_url(site, opts), link_options do - image_tag(SocialShareButtonHelper.icon_path(site), :alt => I18n.t("application.share.#{site}.alt"), :size => 28) - end - end.join.html_safe - end - end end diff --git a/lib/social_share_button_helper.rb b/app/helpers/social_share_button_helper.rb similarity index 66% rename from lib/social_share_button_helper.rb rename to app/helpers/social_share_button_helper.rb index 9dac9a6c8..edbd056a2 100644 --- a/lib/social_share_button_helper.rb +++ b/app/helpers/social_share_button_helper.rb @@ -11,21 +11,51 @@ module SocialShareButtonHelper :x => "social_icons/x.svg" }.freeze - def self.filter_allowed_sites(sites) + # Generates a set of social share buttons based on the specified options. + def render_social_share_buttons(opts = {}) + sites = opts.fetch(:allow_sites, []) + valid_sites, invalid_sites = filter_allowed_sites(sites) + + # Log invalid sites + invalid_sites.each do |invalid_site| + Rails.logger.error("Invalid site or icon not configured: #{invalid_site}") + end + + tag.div( + :class => "social-share-button d-flex gap-1 align-items-end flex-wrap mb-3" + ) do + valid_sites.map do |site| + link_options = { + :rel => ["nofollow", opts[:rel]].compact, + :class => "ssb-icon rounded-circle", + :title => I18n.t("application.share.#{site}.title"), + :target => "_blank" + } + + link_to generate_share_url(site, opts), link_options do + image_tag(icon_path(site), :alt => I18n.t("application.share.#{site}.alt"), :size => 28) + end + end.join.html_safe + end + end + + private + + def filter_allowed_sites(sites) valid_sites = sites.empty? ? SOCIAL_SHARE_CONFIG.keys : sites.select { |site| valid_site?(site) } invalid_sites = sites - valid_sites [valid_sites, invalid_sites] end - def self.icon_path(site) + def icon_path(site) SOCIAL_SHARE_CONFIG[site.to_sym] || "" end - def self.valid_site?(site) + def valid_site?(site) SOCIAL_SHARE_CONFIG.key?(site.to_sym) end - def self.generate_share_url(site, params) + def generate_share_url(site, params) site = site.to_sym case site when :email diff --git a/test/helpers/social_share_button_helper_test.rb b/test/helpers/social_share_button_helper_test.rb index 9c7569334..397cbd112 100644 --- a/test/helpers/social_share_button_helper_test.rb +++ b/test/helpers/social_share_button_helper_test.rb @@ -2,7 +2,6 @@ require "test_helper" class SocialShareButtonHelperTest < ActionView::TestCase include SocialShareButtonHelper - include ApplicationHelper def setup @options = { @@ -34,15 +33,4 @@ class SocialShareButtonHelperTest < ActionView::TestCase assert_includes result, site.to_s # Convert symbol to string end end - - def test_filter_allowed_sites - valid_sites, invalid_sites = SocialShareButtonHelper.filter_allowed_sites(%w[x facebook invalid_site]) - assert_equal %w[x facebook], valid_sites - assert_equal %w[invalid_site], invalid_sites - end - - def test_icon_path - assert_equal "social_icons/x.svg", SocialShareButtonHelper.icon_path("x") - assert_equal "", SocialShareButtonHelper.icon_path("invalid_site") - end end -- 2.39.5