]> git.openstreetmap.org Git - rails.git/commitdiff
Convert social share helper library into a real helper
authorTom Hughes <tom@compton.nu>
Wed, 18 Dec 2024 15:05:10 +0000 (15:05 +0000)
committerTom Hughes <tom@compton.nu>
Wed, 18 Dec 2024 15:07:08 +0000 (15:07 +0000)
app/helpers/application_helper.rb
app/helpers/social_share_button_helper.rb [moved from lib/social_share_button_helper.rb with 66% similarity]
test/helpers/social_share_button_helper_test.rb

index 5558e69fbd6819f701a6baf3addcaf78ceee0bfa..fcf253289ea45ff65e11f0f30c5909146bfa1f10 100644 (file)
@@ -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
similarity index 66%
rename from lib/social_share_button_helper.rb
rename to app/helpers/social_share_button_helper.rb
index 9dac9a6c8a08e917d8348540375f4c951449930c..edbd056a2e82521b48e1305f7ef80bf013a9d2cc 100644 (file)
@@ -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
index 9c7569334d04a423f2482edb4351a519d3737b3a..397cbd11235db2878657874e50656d4f2e02878c 100644 (file)
@@ -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