Sha256: 3efd4bbd5d546692185422d8c540edc360fa0c3a9ad4701ae1447086e5e407e2

Contents?: true

Size: 1.35 KB

Versions: 2

Compression:

Stored size: 1.35 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}]
      def image_candidates
        node["srcset"]
          .split(",")
          .each_with_object({}) do |candidate, hash|
            candidate.strip.match(/^(.+?)(\s+.+)?$/) do
              key = (Regexp.last_match(2) || "1x").strip.to_sym

              hash[key] = Regexp.last_match(1) unless hash[key]
            end
          end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
micromicro-5.0.1 lib/micro_micro/parsers/image_element_parser.rb
micromicro-5.0.0 lib/micro_micro/parsers/image_element_parser.rb