Sha256: 52182e1824465dcf5d5719efff6455feaee140b073c706699a3a04120d877926

Contents?: true

Size: 1.87 KB

Versions: 1

Compression:

Stored size: 1.87 KB

Contents

# frozen_string_literal: true

# 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.

module PacketGen
  module Header
    # @since 2.2.0
    module HTTP
      # @abstract Base class for HTTP headers.
      # @author Kent 'picat' Gruber
      class Headers
        include Inspectable

        # 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
        alias format_inspect to_human

        # 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

1 entries across 1 versions & 1 rubygems

Version Path
packetgen-3.1.5 lib/packetgen/header/http/headers.rb