Sha256: 4ce84e9172294c0e12a7cc71704b28794cb6c313ebd7d154c74ec7f3804ca20b
Contents?: true
Size: 1.38 KB
Versions: 1
Compression:
Stored size: 1.38 KB
Contents
module LinkHeaderParser class ParsedHeader attr_reader :header def initialize(header, base:) raise ArgumentError, "header must be a String (given #{header.class})" unless header.is_a?(String) raise ArgumentError, "base must be a String (given #{base.class})" unless base.is_a?(String) @header = header @base = base end def inspect format(%(#<#{self.class.name}:%#0x @header="#{header.gsub('"', '\"')}">), object_id) end def parameters @parameters ||= OpenStruct.new(header_attributes) end def relation_types @relation_types ||= relations&.split(' ') || nil end def relations @relations ||= parameters.rel || nil end def target @target ||= header_match_data[:target] end def target_uri @target_uri ||= Absolutely.to_abs(base: @base, relative: target) end def to_h { target: target, target_uri: target_uri, relations: relations, relation_types: relation_types, parameters: parameters.to_h } end private def header_attributes @header_attributes ||= header_match_data[:attributes].tr('"', '').split(';').map { |tuple| tuple.split('=').map(&:strip) }.sort.to_h end def header_match_data @header_match_data ||= header.match(/^<\s*(?<target>[^>]+)\s*>\s*;\s*(?<attributes>.*)$/) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
link-header-parser-0.1.0 | lib/link_header_parser/parsed_header.rb |