Skip to content

Commit

Permalink
Convert social share helper library into a real helper
Browse files Browse the repository at this point in the history
  • Loading branch information
tomhughes committed Dec 18, 2024
1 parent 6094a97 commit 2664c2e
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 45 deletions.
29 changes: 0 additions & 29 deletions app/helpers/application_helper.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
module ApplicationHelper
require "rexml/document"
include SocialShareButtonHelper

def linkify(text)
if text.html_safe?
Expand Down Expand Up @@ -76,32 +75,4 @@ def render_flash(flash)
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
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,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
Expand Down
12 changes: 0 additions & 12 deletions test/helpers/social_share_button_helper_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

class SocialShareButtonHelperTest < ActionView::TestCase
include SocialShareButtonHelper
include ApplicationHelper

def setup
@options = {
Expand Down Expand Up @@ -34,15 +33,4 @@ def test_render_social_share_buttons_with_no_sites
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

0 comments on commit 2664c2e

Please sign in to comment.