Sha256: 54e66880f47fd57f454bc8c18b42ea6e46b29febdc7965e72366846ffe3fd3c6

Contents?: true

Size: 1.02 KB

Versions: 2

Compression:

Stored size: 1.02 KB

Contents

require 'strscan'

module BEncode
  # Encodes the Ruby object +obj+ into a bencoded string.
  #
  # @param [Hash, Array, Integer, String] obj the object to encode
  # @return [String] a bencoded string
  # @raise [EncodeError] if +obj+ is not a supported object type
  def self.dump(obj)
    obj.bencode
  end

  # Decodes +str+ into a Ruby structure.
  #
  # @param [String] str a bencoded string
  # @option opts [Boolean] :ignore_trailing_junk (false) whether
  #  to ignore invalid bencode at the end of +str+
  # @return [Object] a Ruby object
  # @raise [DecodeError] if +str+ is malformed
  def self.load(str, opts = {})
    scanner = BEncode::Parser.new(str)
    obj = scanner.parse!
    raise BEncode::DecodeError unless (opts[:ignore_trailing_junk] || scanner.eos?)
    obj
  end

  # Decodes the file located at +path+.
  #
  # @param [String] path path to the bencoded file
  # @option (see .load)
  # @return (see .load)
  def self.load_file(path, opts = {})
    File.open(path, 'rb') do |io|
      load(io, opts)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bencode-1.0.0 lib/bencode/decode.rb
bencode-0.8.2 lib/bencode/decode.rb