Sha256: d4afb4f53cd5f7e546523eaa924c2676af855c60da0fee8963a7b2862dd59f42

Contents?: true

Size: 622 Bytes

Versions: 78

Compression:

Stored size: 622 Bytes

Contents

require 'base64'
require 'zlib'

module Pheme
  module Compression
    def compress(body)
      gz = Zlib::GzipWriter.new(StringIO.new)
      gz << body
      Base64.encode64(gz.close.string)
    end

    def decompress(body)
      return Zlib::GzipReader.new(StringIO.new(Base64.decode64(body))).read if gzip?(body)

      body
    end

    private

    # https://tools.ietf.org/html/rfc1952#page-6
    GZIP_MAGIC_NUMBER = "\037\213".unpack('n').freeze

    def gzip?(body)
      # Decode the first 4 bytes to compare with magic number
      Base64.decode64(body[0..4]).unpack('n') == GZIP_MAGIC_NUMBER
    end
  end
end

Version data entries

78 entries across 78 versions & 1 rubygems

Version Path
pheme-6.0.2 lib/pheme/compression.rb
pheme-6.0.1 lib/pheme/compression.rb
pheme-6.0.0 lib/pheme/compression.rb
pheme-5.3.4 lib/pheme/compression.rb
pheme-5.3.3 lib/pheme/compression.rb
pheme-5.3.0 lib/pheme/compression.rb
pheme-5.2.16 lib/pheme/compression.rb
pheme-5.2.15 lib/pheme/compression.rb
pheme-5.2.14 lib/pheme/compression.rb
pheme-5.2.13 lib/pheme/compression.rb
pheme-5.2.12 lib/pheme/compression.rb
pheme-5.2.11 lib/pheme/compression.rb
pheme-5.2.10 lib/pheme/compression.rb
pheme-5.2.9 lib/pheme/compression.rb
pheme-5.2.8 lib/pheme/compression.rb
pheme-5.2.7 lib/pheme/compression.rb
pheme-5.2.6 lib/pheme/compression.rb
pheme-5.2.5 lib/pheme/compression.rb
pheme-5.2.4 lib/pheme/compression.rb
pheme-5.2.3 lib/pheme/compression.rb