lib/prawn_html/tags/hr.rb



# frozen_string_literal: true

module PrawnHtml
  module Tags
    class Hr < Tag
      ELEMENTS = [:hr].freeze

      MARGIN_BOTTOM = 12
      MARGIN_TOP = 6

      def block?
        true
      end

      def custom_render(pdf, _context)
        dash = attrs.data.include?('dash') ? parse_dash_value(attrs.data['dash']) : nil
        pdf.horizontal_rule(color: attrs.styles[:color], dash: dash)
      end

      def tag_styles
        <<~STYLES
          margin-bottom: #{MARGIN_BOTTOM}px;
          margin-top: #{MARGIN_TOP}px;
        STYLES
      end

      private

      def parse_dash_value(dash_string)
        if dash_string.match? /\A\d+\Z/
          dash_string.to_i
        else
          dash_array = dash_string.split(',')
          dash_array.map(&:to_i) if dash_array.any?
        end
      end
    end
  end
end