jessedoyle/prawn-icon

View on GitHub
lib/prawn/icon/compatibility.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

# compatibility.rb - Prawn::Icon FontAwesome 4/5 compatibility shim.
#
# Copyright March 2018, Jesse Doyle. All rights reserved.
#
# This is free software. Please see the LICENSE and COPYING files for details.

module Prawn
  class Icon
    class Compatibility
      # @deprecated Use {Prawn::Icon::Compatibility.shims} instead
      SHIMS = YAML.load_file(
        Prawn::Icon.configuration.font_directory.join(
          'fa4',
          'shims.yml'
        )
      ).freeze

      class << self
        def shims
          @shims ||= YAML.load_file(
            Icon.configuration.font_directory.join('fa4', 'shims.yml').to_s
          )
        end
      end

      attr_accessor :key

      def initialize(opts = {})
        self.key = opts.fetch(:key)
      end

      def translate(io = $stderr)
        @translate ||= if key.start_with?('fa-')
                         map.tap { |replaced| warning(replaced, key, io) }
                       else
                         key
                       end
      end

      private

      def map
        self.class.shims.fetch(key) do
          # FontAwesome shim metadata assumes "fas" as the default
          # font family if not explicity referenced.
          "fas-#{key.sub(/fa-/, '')}"
        end
      end

      def warning(new_key, old_key, io)
        io.puts <<~DEPRECATION
          [Prawn::Icon - DEPRECATION WARNING]
            FontAwesome 4 icon was referenced as '#{old_key}'.
            Use the FontAwesome 5 icon '#{new_key}' instead.
            This compatibility layer will be removed in Prawn::Icon 4.0.0.
        DEPRECATION
      end
    end
  end
end