bencode 0.8.0 → 0.8.1
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.
- checksums.yaml +6 -14
- data/Gemfile +0 -2
- data/bencode.gemspec +3 -4
- data/lib/bencode.rb +1 -1
- data/lib/bencode/core_ext/hash.rb +1 -1
- data/lib/bencode/core_ext/io.rb +1 -5
- data/lib/bencode/core_ext/string.rb +13 -3
- data/lib/bencode/decode.rb +1 -13
- data/lib/bencode/parser.rb +17 -11
- data/test/bittorrent_test.rb +2 -2
- data/test/decoding_test.rb +12 -14
- data/test/encoding_test.rb +5 -5
- data/test/environment.rb +1 -3
- data/test/shoulda_macros/decoding.rb +3 -3
- data/test/shoulda_macros/encoding.rb +3 -3
- data/test/utf8_decoding_test.rb +4 -6
- metadata +15 -16
- data/lib/bencode/core_ext/stringio.rb +0 -6
- data/lib/bencode/parseio.rb +0 -9
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
MjM1ODBjMmNmMjU1YmY3ZGViNDZiMmE5OTlkZTg4NWZjZGFkZGQ0NzEyNmQ3
|
10
|
-
NjEzOTI2NmVjMDEwNGYwNTI0NTAyNGU5YmE3ZWU5ODg4MWExMGJjZGY1MTll
|
11
|
-
YmE2MzljNTg1YzYzYTdhYjljMGQzOWQxYWYwOWQ2NTllM2M1NGQ=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ZmQ4ODY3NDM3NDZiYThjZDc5MTYzOTNiOTdlOGRhMDJmNjhhNDAxY2Q2OTM2
|
14
|
-
NWUwZmFhMWVkNGI0ZGI5ZWZlM2UzMTJmYWIxNDVmOWMzNzliY2RmMWUwMGVj
|
15
|
-
YjdlMDVhN2YxYzQwZWFiNjA1ZDY2OTI1MmU2YTU3OTYwZWZjZjM=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 07cb5be3744b878726ce641c469802ed586c800a
|
4
|
+
data.tar.gz: 1645e9613e22a9e144f4f766809821bf144ce891
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 59701813409b78eba18008e281fc7c0dbe817baabd2e47d2bef356af3d7f5c43bb8087ba9caefd0ff80e974f61249878021138bb58f46daa62a06fb0a97e073b
|
7
|
+
data.tar.gz: 13aa5d05f693c5386fd6d8500c6e8b76cad3459ed159a03ba60dece5d116d6eb680e53a071d24b303282d80f2965b9b75675168850f9d5cba49f0a077eabf3e9
|
data/Gemfile
CHANGED
data/bencode.gemspec
CHANGED
@@ -7,8 +7,8 @@ Gem::Specification.new do |s|
|
|
7
7
|
## If your rubyforge_project name is different, then edit it and comment out
|
8
8
|
## the sub! line in the Rakefile
|
9
9
|
s.name = 'bencode'
|
10
|
-
s.version = '0.8.
|
11
|
-
s.date = '
|
10
|
+
s.version = '0.8.1'
|
11
|
+
s.date = '2014-05-19'
|
12
12
|
|
13
13
|
s.summary = "Encode and decode bencoded data"
|
14
14
|
s.description = "A simple encoder and decoder for the BitTorrent serialization format."
|
@@ -16,6 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.authors = ["Daniel Schierbeck"]
|
17
17
|
s.email = "daniel.schierbeck@gmail.com"
|
18
18
|
s.homepage = "http://github.com/dasch/ruby-bencode"
|
19
|
+
s.license = 'MIT'
|
19
20
|
|
20
21
|
s.require_paths = %w[lib]
|
21
22
|
|
@@ -41,9 +42,7 @@ Gem::Specification.new do |s|
|
|
41
42
|
lib/bencode/core_ext/io.rb
|
42
43
|
lib/bencode/core_ext/object.rb
|
43
44
|
lib/bencode/core_ext/string.rb
|
44
|
-
lib/bencode/core_ext/stringio.rb
|
45
45
|
lib/bencode/decode.rb
|
46
|
-
lib/bencode/parseio.rb
|
47
46
|
lib/bencode/parser.rb
|
48
47
|
test/benchmark/decoding.rb
|
49
48
|
test/benchmark/encoding.rb
|
data/lib/bencode.rb
CHANGED
data/lib/bencode/core_ext/io.rb
CHANGED
@@ -2,13 +2,23 @@
|
|
2
2
|
class String
|
3
3
|
#
|
4
4
|
# Bencodes the String object. Bencoded strings are represented
|
5
|
-
# as <code>x</code>:<code>y</code>, where +y+ is the string and +x+
|
5
|
+
# as <code>x</code>:<code>y</code>, where +y+ is the string and +x+
|
6
6
|
# is the length of the string.
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# "foo".bencode #=> "3:foo"
|
9
9
|
# "".bencode #=> "0:"
|
10
10
|
#
|
11
11
|
def bencode
|
12
|
-
"#{
|
12
|
+
"#{bytesize}:#{self}"
|
13
|
+
end
|
14
|
+
|
15
|
+
#
|
16
|
+
# Bdecodes the String object and returns the data serialized
|
17
|
+
# through bencoding.
|
18
|
+
#
|
19
|
+
# "li1ei2ei3ee".bdecode #=> [1, 2, 3]
|
20
|
+
#
|
21
|
+
def bdecode
|
22
|
+
BEncode.load(self)
|
13
23
|
end
|
14
24
|
end
|
data/lib/bencode/decode.rb
CHANGED
@@ -22,7 +22,7 @@ module BEncode
|
|
22
22
|
scanner = BEncode::Parser.new(str)
|
23
23
|
obj = scanner.parse!
|
24
24
|
raise BEncode::DecodeError unless (opts[:ignore_trailing_junk] || scanner.eos?)
|
25
|
-
|
25
|
+
obj
|
26
26
|
end
|
27
27
|
|
28
28
|
# Decodes the file located at +path+.
|
@@ -34,15 +34,3 @@ module BEncode
|
|
34
34
|
load(File.open(path, 'rb').read, opts)
|
35
35
|
end
|
36
36
|
end
|
37
|
-
|
38
|
-
class String
|
39
|
-
#
|
40
|
-
# Bdecodes the String object and returns the data serialized
|
41
|
-
# through bencoding.
|
42
|
-
#
|
43
|
-
# "li1ei2ei3ee".bdecode #=> [1, 2, 3]
|
44
|
-
#
|
45
|
-
def bdecode
|
46
|
-
BEncode.load(self)
|
47
|
-
end
|
48
|
-
end
|
data/lib/bencode/parser.rb
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
require 'stringio'
|
2
|
-
require 'bencode/parseio'
|
3
2
|
|
4
3
|
module BEncode
|
5
4
|
class Parser
|
6
5
|
attr_reader :stream
|
7
6
|
|
8
7
|
def initialize(stream)
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
@stream =
|
9
|
+
if stream.kind_of?(IO) || stream.kind_of?(StringIO)
|
10
|
+
stream
|
11
|
+
elsif stream.respond_to? :string
|
12
|
+
StringIO.new stream.string
|
13
|
+
elsif stream.respond_to? :to_s
|
14
|
+
StringIO.new stream.to_s
|
15
|
+
end
|
16
16
|
end
|
17
17
|
|
18
18
|
def parse!
|
19
|
-
case
|
19
|
+
case peek
|
20
20
|
when ?i then parse_integer!
|
21
21
|
when ?l then parse_list!
|
22
22
|
when ?d then parse_dict!
|
@@ -39,7 +39,7 @@ module BEncode
|
|
39
39
|
def parse_list!
|
40
40
|
stream.getc
|
41
41
|
ary = []
|
42
|
-
ary.push(parse!) until
|
42
|
+
ary.push(parse!) until peek == ?e
|
43
43
|
stream.getc
|
44
44
|
ary
|
45
45
|
end
|
@@ -47,7 +47,7 @@ module BEncode
|
|
47
47
|
def parse_dict!
|
48
48
|
stream.getc
|
49
49
|
hsh = {}
|
50
|
-
until
|
50
|
+
until peek == ?e
|
51
51
|
key = parse!
|
52
52
|
|
53
53
|
unless key.is_a? String or key.is_a? Fixnum
|
@@ -76,5 +76,11 @@ module BEncode
|
|
76
76
|
|
77
77
|
str
|
78
78
|
end
|
79
|
+
|
80
|
+
def peek
|
81
|
+
c = stream.getc
|
82
|
+
stream.ungetc(c)
|
83
|
+
c
|
84
|
+
end
|
79
85
|
end
|
80
86
|
end
|
data/test/bittorrent_test.rb
CHANGED
data/test/decoding_test.rb
CHANGED
@@ -1,19 +1,17 @@
|
|
1
1
|
require 'environment'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
should_decode -42, "i-42e"
|
3
|
+
describe "decoding" do
|
4
|
+
it_should_decode 42, "i42e"
|
5
|
+
it_should_decode 0, "i0e"
|
6
|
+
it_should_decode -42, "i-42e"
|
8
7
|
|
9
|
-
|
10
|
-
|
8
|
+
it_should_decode "foo", "3:foo"
|
9
|
+
it_should_decode "", "0:"
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
end
|
11
|
+
it_should_decode [1, 2, 3], "li1ei2ei3ee"
|
12
|
+
|
13
|
+
hsh = {"foo" => "bar", "baz" => "qux"}
|
14
|
+
it_should_decode hsh, "d3:foo3:bar3:baz3:quxe"
|
15
|
+
|
16
|
+
it_should_decode 42, "i42eBOGUS", :ignore_trailing_junk => true
|
19
17
|
end
|
data/test/encoding_test.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'environment'
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
end
|
4
|
+
describe "encoding" do
|
5
|
+
it_should_encode "i42e", 42
|
6
|
+
it_should_encode "3:foo", "foo"
|
7
|
+
it_should_encode "5:café", "café"
|
8
8
|
end
|
data/test/environment.rb
CHANGED
@@ -1,11 +1,9 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'bundler/setup'
|
3
3
|
|
4
|
-
require 'minitest/
|
4
|
+
require 'minitest/autorun'
|
5
5
|
require 'shoulda'
|
6
6
|
|
7
|
-
MiniTest::Unit.autorun
|
8
|
-
|
9
7
|
require File.dirname(__FILE__) + '/../lib/bencode'
|
10
8
|
Dir.glob(File.dirname(__FILE__) + '/shoulda_macros/*.rb').each do |macro|
|
11
9
|
require macro
|
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
|
-
class MiniTest::
|
3
|
-
def self.
|
4
|
-
should
|
2
|
+
class MiniTest::Test
|
3
|
+
def self.it_should_decode(expected, encoded, opts = {})
|
4
|
+
it "should decode #{encoded.inspect} into #{expected.inspect}" do
|
5
5
|
assert_equal expected, BEncode.load(encoded, opts)
|
6
6
|
end
|
7
7
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
|
-
class MiniTest::
|
3
|
-
def self.
|
4
|
-
should
|
2
|
+
class MiniTest::Test
|
3
|
+
def self.it_should_encode(expected, value)
|
4
|
+
it "should encode #{value.inspect} into #{expected.inspect}" do
|
5
5
|
assert_equal expected, value.bencode
|
6
6
|
end
|
7
7
|
end
|
data/test/utf8_decoding_test.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
require 'environment'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
pass
|
8
|
-
end
|
3
|
+
describe "utf encoding" do
|
4
|
+
it "should be able to handle UTF8-encoded data" do
|
5
|
+
BEncode.load_file('test/fixtures/test.torrent')
|
6
|
+
pass
|
9
7
|
end
|
10
8
|
end
|
metadata
CHANGED
@@ -1,69 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bencode
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Schierbeck
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-05-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rdoc
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: shoulda
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
description: A simple encoder and decoder for the BitTorrent serialization format.
|
@@ -86,9 +86,7 @@ files:
|
|
86
86
|
- lib/bencode/core_ext/io.rb
|
87
87
|
- lib/bencode/core_ext/object.rb
|
88
88
|
- lib/bencode/core_ext/string.rb
|
89
|
-
- lib/bencode/core_ext/stringio.rb
|
90
89
|
- lib/bencode/decode.rb
|
91
|
-
- lib/bencode/parseio.rb
|
92
90
|
- lib/bencode/parser.rb
|
93
91
|
- test/benchmark/decoding.rb
|
94
92
|
- test/benchmark/encoding.rb
|
@@ -102,7 +100,8 @@ files:
|
|
102
100
|
- test/shoulda_macros/encoding.rb
|
103
101
|
- test/utf8_decoding_test.rb
|
104
102
|
homepage: http://github.com/dasch/ruby-bencode
|
105
|
-
licenses:
|
103
|
+
licenses:
|
104
|
+
- MIT
|
106
105
|
metadata: {}
|
107
106
|
post_install_message:
|
108
107
|
rdoc_options:
|
@@ -111,17 +110,17 @@ require_paths:
|
|
111
110
|
- lib
|
112
111
|
required_ruby_version: !ruby/object:Gem::Requirement
|
113
112
|
requirements:
|
114
|
-
- -
|
113
|
+
- - '>='
|
115
114
|
- !ruby/object:Gem::Version
|
116
115
|
version: '0'
|
117
116
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
117
|
requirements:
|
119
|
-
- -
|
118
|
+
- - '>='
|
120
119
|
- !ruby/object:Gem::Version
|
121
120
|
version: '0'
|
122
121
|
requirements: []
|
123
122
|
rubyforge_project:
|
124
|
-
rubygems_version: 2.
|
123
|
+
rubygems_version: 2.1.11
|
125
124
|
signing_key:
|
126
125
|
specification_version: 2
|
127
126
|
summary: Encode and decode bencoded data
|