Sha256: 88b570f092a5a43710dbc4039cd28ef92d55d0b0dbc68a7359086c771ef2f073

Contents?: true

Size: 1.81 KB

Versions: 8

Compression:

Stored size: 1.81 KB

Contents

# This file is part of PacketGen
# See https://github.com/sdaubert/packetgen for more informations
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
# This program is published under MIT license.

# frozen_string_literal: true

module PacketGen
  module Header
    # @since 2.2.0
    module HTTP
      # @abstract Base class for HTTP headers.
      # @author Kent 'picat' Gruber
      class Headers
        # Underlying Headers data (or nil).
        # @return [Hash, nil]
        attr_reader :data
        alias to_h data

        def initialize
          @data = nil
        end

        # Populate object from a string or directly from a hash.
        # @param [String, Hash] s_or_h
        # @return [self]
        def read(s_or_h)
          case s_or_h
          when String
            @data = s_or_h.split("\n").map do |h|
              next unless h.include?(':')
              k, v = h.split(':', 2)
              [k, v.strip]
            end.reject(&:nil?).to_h
          when Hash
            @data = s_or_h
          end
          self
        end

        # Get binary string.
        # @return [String]
        def to_s
          return "\r\n" if @data.nil? || @data.empty?
          d = []
          @data.map do |k, v|
            d << k + ': ' + v
          end
          d.join("\r\n") << "\r\n\r\n"
        end

        # Get a human readable string.
        # @return [Hash]
        def to_human
          @data
        end

        # Read human-readable data to populate header data.
        # @param [String, Hash] data
        # @return [self]
        def from_human(data)
          read(data)
        end

        # Check if any headers were given.
        # @return [Boolean]
        def given?
          return true unless @data.nil? || @data.empty?
          false
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
packetgen-2.8.7 lib/packetgen/header/http/headers.rb
packetgen-2.8.6 lib/packetgen/header/http/headers.rb
packetgen-2.8.5 lib/packetgen/header/http/headers.rb
packetgen-2.8.4 lib/packetgen/header/http/headers.rb
packetgen-2.8.3 lib/packetgen/header/http/headers.rb
packetgen-2.8.1 lib/packetgen/header/http/headers.rb
packetgen-2.8.0 lib/packetgen/header/http/headers.rb
packetgen-2.7.0 lib/packetgen/header/http/headers.rb