Sha256: dda931bd6e5209ba79e9e753f094fab1d10841c32b84e8225a4266fe4c8fa3da

Contents?: true

Size: 1.41 KB

Versions: 2

Compression:

Stored size: 1.41 KB

Contents

# frozen_string_literal: true

module MicroMicro
  module Parsers
    class ImageElementParser
      # @return [String]
      attr_reader :value

      # @param node [Nokogiri::XML::Element]
      # @param value [String]
      def initialize(node, value)
        @node = node
        @value = value
      end

      # @return [String, nil]
      def alt
        @alt ||= node['alt']&.strip
      end

      # @return [Boolean]
      def alt?
        !alt.nil?
      end

      # @return [Hash{Symbol => String}, nil]
      def srcset
        @srcset ||= image_candidates if node['srcset']
      end

      # @return [Boolean]
      def srcset?
        srcset.present?
      end

      # @return [Hash{Symbol => String, Hash{Symbol => String}}]
      def to_h
        hash = { value: value }

        hash[:srcset] = srcset if srcset?
        hash[:alt] = alt if alt?

        hash
      end

      private

      # @return [Nokogiri::XML::Element]
      attr_reader :node

      # @return [Hash{Symbol => String}]
      #
      # rubocop:disable Style/PerlBackrefs
      def image_candidates
        node['srcset']
          .split(',')
          .each_with_object({}) do |candidate, hash|
            candidate.strip.match(/^(.+?)(\s+.+)?$/) do
              key = ($2 || '1x').strip.to_sym

              hash[key] = $1 unless hash[key]
            end
          end
      end
      # rubocop:enable Style/PerlBackrefs
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
micromicro-4.0.0 lib/micro_micro/parsers/image_element_parser.rb
micromicro-3.1.0 lib/micro_micro/parsers/image_element_parser.rb