Sha256: 586f9040b21bdb5f7526dfa4e551b277f4d6dd864b8b33fb660323d1344d0ab5

Contents?: true

Size: 1.68 KB

Versions: 2

Compression:

Stored size: 1.68 KB

Contents

module MicroMicro
  class Relationship
    include Collectible

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

    # @return [String]
    def href
      @href ||= node['href']
    end

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

    # @return [String]
    def inspect
      format(%(#<#{self.class.name}:%#0x href: #{href.inspect}, rels: #{rels.inspect}>), object_id)
    end

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

    # @return [Hash{Symbol => String}]
    def to_h
      {
        href: href,
        rels: rels,
        hreflang: hreflang,
        media: media,
        title: title,
        type: type,
        text: text
      }.select { |_, value| value.present? }
    end

    # @return [Array<String>]
    def rels
      @rels ||= node['rel'].split.uniq.sort
    end

    # @return [String]
    def text
      @text ||= node.text
    end

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

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

    # @param context [Nokogiri::HTML::Document, Nokogiri::XML::Element]
    # @return [Nokogiri::XML::NodeSet]
    def self.nodes_from(context)
      context.css('[href][rel]:not([rel=""])').reject { |node| (node.ancestors.map(&:name) & Document.ignored_node_names).any? }
    end

    # @param context [Nokogiri::HTML::Document, Nokogiri::XML::Element]
    # @return [Array<MicroMicro::Relationship>]
    def self.relationships_from(context)
      nodes_from(context).map { |node| new(node) }
    end

    private

    attr_reader :node
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
micromicro-1.1.0 lib/micro_micro/relationship.rb
micromicro-1.0.0 lib/micro_micro/relationship.rb