Sha256: 87da8a6de79e42996cbac3e993d222a0f5dc8acbfc2bfa538261d3795094b467

Contents?: true

Size: 1.57 KB

Versions: 1

Compression:

Stored size: 1.57 KB

Contents

# encoding: UTF-8

path = File.expand_path(File.dirname(__FILE__)) + "/bencodr"

require path + "/string"
require path + "/integer"
require path + "/list"
require path + "/dictionary"
require path + "/parser"

module BEncodr
  class BEncodeError < StandardError; end

  class << self
    # This method decodes a bencoded string.
    #
    #   BEncode.decode("6:string") #=> "string"
    #
    # @param [::String] string the bencoded string to decode
    # @return [::String, ::Integer, ::Hash, ::Array] the decoded object
    def decode(string)
      scanner = StringScanner.new(string)
      Parser.parse_object(scanner) or raise BEncodeError, "Invalid bencoding"
    end

    # This method decodes a bencoded file.
    #
    #   BEncode.decode_file("simple.torrent") #=> "d8:announce32:http://www..."
    #
    # @param [::String] file the file to decode
    # @return [::String, ::Integer, ::Hash, ::Array] the decoded object
    def decode_file(file)
      decode(File.open(file, 'rb') {|f| f.read})
    end

    # This method encodes a bencoded object.
    #
    #   BEncode.encode("string") #=> "6:string"
    #
    # @param [#bencodr] object the object to encode
    # @return [::String] the bencoded object
    def encode(object)
      object.bencode
    end

    # This method encodes a bencoded object.
    #
    #   BEncode.encode("string") #=> "6:string"
    #
    # @param [::String] file the file to write the bencoded object to
    # @param [#bencodr] object the object to encode
    def encode_file(file, object)
      File.open(file, 'wb') {|f| f.write encode(object)}
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bencodr-1.0.1 lib/bencodr.rb