bencode 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/bencode.rb +22 -15
- data/test/tc_bdecode.rb +1 -2
- data/test/tc_bencode.rb +11 -2
- metadata +2 -2
data/lib/bencode.rb
CHANGED
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
#
|
|
6
6
|
# == Synopsis
|
|
7
7
|
#
|
|
8
|
-
# Bencoding (pronounced
|
|
8
|
+
# Bencoding (pronounced <i>bee-encode</i>) is a simple protocol, consisting of
|
|
9
9
|
# only 4 value types.
|
|
10
10
|
#
|
|
11
11
|
# === Integers
|
|
12
12
|
#
|
|
13
|
-
# An integer is encoded an _i_ followed by the numeral itself, followed
|
|
13
|
+
# An integer is encoded as an _i_ followed by the numeral itself, followed
|
|
14
14
|
# by an _e_. Leading zeros are not allowed. Negative values are prefixed
|
|
15
15
|
# with a minus sign.
|
|
16
16
|
#
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
#
|
|
21
21
|
# === Strings
|
|
22
22
|
#
|
|
23
|
-
# Strings are
|
|
24
|
-
#
|
|
23
|
+
# Strings are sequences of zero or more bytes. They are encoded as
|
|
24
|
+
# <i><length>:<contents></i>, where _length_ is the length of _contents_. _length_
|
|
25
25
|
# must be non-negative.
|
|
26
26
|
#
|
|
27
27
|
# "".bencode #=> "0:"
|
|
@@ -36,9 +36,9 @@
|
|
|
36
36
|
#
|
|
37
37
|
# === Dictionaries
|
|
38
38
|
#
|
|
39
|
-
# Dictionaries are encoded as
|
|
40
|
-
#
|
|
41
|
-
#
|
|
39
|
+
# Dictionaries are encoded as _d_ followed by a sequence of key-value pairs, followed by _e_.
|
|
40
|
+
# Each value must be immediately preceded by a key. Keys must be strings, and must appear in
|
|
41
|
+
# lexicographical order.
|
|
42
42
|
#
|
|
43
43
|
# {"foo" => 3, "bar" => 1, "baz" => 2}.bencode
|
|
44
44
|
# #=> "d3:bari1e3:bazi2e3:fooi3ee"
|
|
@@ -67,6 +67,7 @@
|
|
|
67
67
|
#
|
|
68
68
|
|
|
69
69
|
class Object
|
|
70
|
+
#
|
|
70
71
|
# Raises an exception. Subclasses of Object must themselves
|
|
71
72
|
# define meaningful #bencode methods.
|
|
72
73
|
def bencode
|
|
@@ -75,6 +76,7 @@ class Object
|
|
|
75
76
|
end
|
|
76
77
|
|
|
77
78
|
class Integer
|
|
79
|
+
#
|
|
78
80
|
# Bencodes the Integer object. Bencoded integers are represented
|
|
79
81
|
# as +ixe+, where +x+ is the integer with an optional
|
|
80
82
|
# hyphen prepended, indicating negativity.
|
|
@@ -87,8 +89,9 @@ class Integer
|
|
|
87
89
|
end
|
|
88
90
|
|
|
89
91
|
class String
|
|
92
|
+
#
|
|
90
93
|
# Bencodes the String object. Bencoded strings are represented
|
|
91
|
-
# as +x
|
|
94
|
+
# as +x+:+y+, where +y+ is the string and +x+ is the length of the
|
|
92
95
|
# string.
|
|
93
96
|
#
|
|
94
97
|
# "foo".bencode #=> "3:foo"
|
|
@@ -98,6 +101,7 @@ class String
|
|
|
98
101
|
"#{length}:#{self}"
|
|
99
102
|
end
|
|
100
103
|
|
|
104
|
+
#
|
|
101
105
|
# Bdecodes the String object and returns the data serialized
|
|
102
106
|
# through bencoding.
|
|
103
107
|
#
|
|
@@ -107,6 +111,7 @@ class String
|
|
|
107
111
|
Bencode.load(self)
|
|
108
112
|
end
|
|
109
113
|
|
|
114
|
+
#
|
|
110
115
|
# Tests whether the String object is a valid bencoded string.
|
|
111
116
|
def bencoded?
|
|
112
117
|
bdecode
|
|
@@ -118,8 +123,9 @@ class String
|
|
|
118
123
|
end
|
|
119
124
|
|
|
120
125
|
class Array
|
|
126
|
+
#
|
|
121
127
|
# Bencodes the Array object. Bencoded arrays are represented as
|
|
122
|
-
# +lxe+, where x is zero or more bencoded objects.
|
|
128
|
+
# +lxe+, where +x+ is zero or more bencoded objects.
|
|
123
129
|
#
|
|
124
130
|
# [1, "foo"].bencode #=> "li1e3:fooe"
|
|
125
131
|
#
|
|
@@ -129,8 +135,9 @@ class Array
|
|
|
129
135
|
end
|
|
130
136
|
|
|
131
137
|
class Hash
|
|
138
|
+
#
|
|
132
139
|
# Bencodes the Hash object. Bencoded hashes are represented as
|
|
133
|
-
# +dxe+, where x is zero or a power of two bencoded objects.
|
|
140
|
+
# +dxe+, where +x+ is zero or a power of two bencoded objects.
|
|
134
141
|
# each key is immediately followed by its associated value.
|
|
135
142
|
# All keys must be strings. The keys of the bencoded hash will
|
|
136
143
|
# be in lexicographical order.
|
|
@@ -141,12 +148,12 @@ class Hash
|
|
|
141
148
|
end
|
|
142
149
|
|
|
143
150
|
class IO
|
|
144
|
-
def self.bdecode(
|
|
145
|
-
|
|
151
|
+
def self.bdecode(filename)
|
|
152
|
+
open(filename, 'r').bdecode
|
|
146
153
|
end
|
|
147
154
|
|
|
148
|
-
def self.bencode(
|
|
149
|
-
|
|
155
|
+
def self.bencode(filename)
|
|
156
|
+
open(filename, 'r').bencode
|
|
150
157
|
end
|
|
151
158
|
|
|
152
159
|
def bdecode
|
|
@@ -154,7 +161,7 @@ class IO
|
|
|
154
161
|
end
|
|
155
162
|
|
|
156
163
|
def bencode
|
|
157
|
-
read.chomp.
|
|
164
|
+
read.chomp.bencode
|
|
158
165
|
end
|
|
159
166
|
end
|
|
160
167
|
|
data/test/tc_bdecode.rb
CHANGED
data/test/tc_bencode.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
require 'test/unit'
|
|
3
|
-
require
|
|
4
|
-
require 'bencode'
|
|
3
|
+
require "#{File.dirname(__FILE__)}/../lib/bencode"
|
|
5
4
|
|
|
6
5
|
class BencodeTest < Test::Unit::TestCase
|
|
7
6
|
def test_string
|
|
@@ -9,6 +8,11 @@ class BencodeTest < Test::Unit::TestCase
|
|
|
9
8
|
assert_equal "0:", "".bencode
|
|
10
9
|
end
|
|
11
10
|
|
|
11
|
+
def test_multiline_string
|
|
12
|
+
assert_equal "1:\n", "\n".bencode
|
|
13
|
+
assert_equal "2:\n\n", "\n\n".bencode
|
|
14
|
+
end
|
|
15
|
+
|
|
12
16
|
def test_integer
|
|
13
17
|
assert_equal "i42e", 42.bencode
|
|
14
18
|
assert_equal "i-3e", -3.bencode
|
|
@@ -28,4 +32,9 @@ class BencodeTest < Test::Unit::TestCase
|
|
|
28
32
|
assert_equal "d1:a3:foo1:g3:bar1:z3:baze",
|
|
29
33
|
{"a" => "foo", "g" => "bar", "z" => "baz"}.bencode
|
|
30
34
|
end
|
|
35
|
+
|
|
36
|
+
def test_hash_julien
|
|
37
|
+
assert_equal "d1:ai1e2:bbi1e1:ci1ee",
|
|
38
|
+
{'a' => 1, 'c' => 1, 'bb' => 1}.bencode
|
|
39
|
+
end
|
|
31
40
|
end
|
metadata
CHANGED
|
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
|
3
3
|
specification_version: 1
|
|
4
4
|
name: bencode
|
|
5
5
|
version: !ruby/object:Gem::Version
|
|
6
|
-
version: 0.3.
|
|
7
|
-
date: 2006-
|
|
6
|
+
version: 0.3.2
|
|
7
|
+
date: 2006-12-26 00:00:00 +01:00
|
|
8
8
|
summary: A Ruby implementation of the Bencode encoding used by BitTorrent
|
|
9
9
|
require_paths:
|
|
10
10
|
- lib
|