Sha256: d94208bd7c011019896cc81e31a48a980519511c751bf458b4b94c2e31e9880d
Contents?: true
Size: 1.2 KB
Versions: 3
Compression:
Stored size: 1.2 KB
Contents
module LinkHeaderParser class LinkHeadersCollection extend Forwardable include Enumerable def_delegators :members, :[], :<<, :each, :last, :length, :push attr_reader :headers # @param headers [Array<String>] # @param base [String] def initialize(*headers, base:) @headers = headers.flatten @base = base discrete_headers.each { |header| push(LinkHeader.new(header, base: base)) } end # @return [Hash{Symbol => Array<LinkHeaderParser::LinkHeader>}] def group_by_relation_type relation_types.map do |relation_type| [relation_type, find_all { |member| member.relation_types.include?(relation_type) }] end.to_h.transform_keys(&:to_sym) end def inspect format(%(#<#{self.class.name}:%#0x headers: #{headers.inspect}, relation_types: #{relation_types.inspect}>), object_id) end # @return [Array<String>] def relation_types @relation_types ||= flat_map(&:relation_types).uniq.sort end private attr_reader :base def discrete_headers @discrete_headers ||= headers.flat_map { |header| header.split(/,(?=[\s|<])/) }.map(&:strip) end def members @members ||= [] end end end
Version data entries
3 entries across 3 versions & 1 rubygems