bencodr 1.0.1 → 1.1.0
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/README.rdoc +11 -3
- data/VERSION +1 -1
- data/{bencode_blatyo.gemspec → bencodr.gemspec} +11 -11
- data/lib/bencodr/parser.rb +14 -0
- data/lib/bencodr.rb +5 -6
- data/spec/bencodr/parser_spec.rb +20 -0
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -12,7 +12,7 @@ This gem provides a way to encode and parse bencodings used by the Bit Torrent p
|
|
12
12
|
== Installation
|
13
13
|
|
14
14
|
# install the gem
|
15
|
-
> gem install bencodr
|
15
|
+
> [sudo] gem install bencodr
|
16
16
|
Successfully installed bencodr
|
17
17
|
1 gem installed
|
18
18
|
Installing ri documentation for bencodr...
|
@@ -80,12 +80,20 @@ followed by an 'e'. Keys appear in sorted order (sorted as raw strings, not alph
|
|
80
80
|
# Note: keys are sorted as raw strings.
|
81
81
|
{:a => 1, "A" => 1, 1=> 1}.bencode #=> "d1:1i1e1:Ai1e1:ai1ee"
|
82
82
|
|
83
|
-
===
|
83
|
+
=== Decoding
|
84
|
+
You can decode a bencoding by calling bdecode on the string.
|
85
|
+
|
86
|
+
"6:string".bdecode #=> "string"
|
87
|
+
"i1e".bdecode #=> 1
|
88
|
+
"le".bdecode #=> []
|
89
|
+
"de".bdecode #=> {}
|
90
|
+
|
91
|
+
=== Encoding and Decoding with BEncodr
|
84
92
|
|
85
93
|
# encoding is just like calling bencode on the object
|
86
94
|
BEncodr.encode("string") #=> "6:string"
|
87
95
|
|
88
|
-
# decoding
|
96
|
+
# decoding is just like calling bdecode on a bencoding
|
89
97
|
BEncodr.decode("6:string") #=> "string"
|
90
98
|
BEncodr.decode("i1e") #=> 1
|
91
99
|
BEncodr.decode("le") #=> []
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0
|
1
|
+
1.1.0
|
@@ -4,13 +4,13 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{
|
8
|
-
s.version = "1.0
|
7
|
+
s.name = %q{bencodr}
|
8
|
+
s.version = "1.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Allen Madsen"]
|
12
|
-
s.date = %q{2010-02-
|
13
|
-
s.description = %q{This gem
|
12
|
+
s.date = %q{2010-02-04}
|
13
|
+
s.description = %q{This gem provides a way to encode and parse bencodings used by the Bit Torrent protocol.}
|
14
14
|
s.email = %q{blatyo@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
@@ -25,21 +25,21 @@ Gem::Specification.new do |s|
|
|
25
25
|
"Rakefile",
|
26
26
|
"VERSION",
|
27
27
|
"autotest/discover.rb",
|
28
|
-
"
|
28
|
+
"bencodr.gemspec",
|
29
29
|
"lib/bencodr.rb",
|
30
30
|
"lib/bencodr/dictionary.rb",
|
31
31
|
"lib/bencodr/integer.rb",
|
32
32
|
"lib/bencodr/list.rb",
|
33
33
|
"lib/bencodr/parser.rb",
|
34
34
|
"lib/bencodr/string.rb",
|
35
|
+
"spec/bencode_spec.rb",
|
35
36
|
"spec/bencodr/dictionary_spec.rb",
|
36
37
|
"spec/bencodr/integer_spec.rb",
|
37
38
|
"spec/bencodr/list_spec.rb",
|
38
39
|
"spec/bencodr/parser_spec.rb",
|
39
40
|
"spec/bencodr/string_spec.rb",
|
40
|
-
"spec/
|
41
|
-
"spec/samples/
|
42
|
-
"spec/samples/mini.bencodr",
|
41
|
+
"spec/samples/bencode.rb.torrent",
|
42
|
+
"spec/samples/mini.bencode",
|
43
43
|
"spec/samples/python.torrent",
|
44
44
|
"spec/spec.opts",
|
45
45
|
"spec/spec_helper.rb"
|
@@ -48,14 +48,14 @@ Gem::Specification.new do |s|
|
|
48
48
|
s.rdoc_options = ["--charset=UTF-8"]
|
49
49
|
s.require_paths = ["lib"]
|
50
50
|
s.rubygems_version = %q{1.3.5}
|
51
|
-
s.summary = %q{This gem
|
51
|
+
s.summary = %q{This gem provides a way to encode and parse bencodings used by the Bit Torrent protocol.}
|
52
52
|
s.test_files = [
|
53
|
-
"spec/
|
53
|
+
"spec/bencode_spec.rb",
|
54
|
+
"spec/bencodr/dictionary_spec.rb",
|
54
55
|
"spec/bencodr/integer_spec.rb",
|
55
56
|
"spec/bencodr/list_spec.rb",
|
56
57
|
"spec/bencodr/parser_spec.rb",
|
57
58
|
"spec/bencodr/string_spec.rb",
|
58
|
-
"spec/bencode_spec.rb",
|
59
59
|
"spec/spec_helper.rb"
|
60
60
|
]
|
61
61
|
|
data/lib/bencodr/parser.rb
CHANGED
@@ -110,4 +110,18 @@ module BEncodr
|
|
110
110
|
private :parse_key_value
|
111
111
|
end
|
112
112
|
end
|
113
|
+
end
|
114
|
+
|
115
|
+
class String
|
116
|
+
# This method decodes a bencoded string into a ruby object.
|
117
|
+
#
|
118
|
+
# "6:string".bdecode #=> "string"
|
119
|
+
# "i-1e".bdecode #=> -1
|
120
|
+
# "le".bdecode #=> []
|
121
|
+
# "de".bdecode #=> {}
|
122
|
+
#
|
123
|
+
# @return [::String, ::Integer, ::Array, ::Hash] the decoded object
|
124
|
+
def bdecode
|
125
|
+
BEncodr::Parser.parse_object(StringScanner.new self) or raise BEncodr::BEncodeError, "Invalid bencoding"
|
126
|
+
end
|
113
127
|
end
|
data/lib/bencodr.rb
CHANGED
@@ -19,8 +19,7 @@ module BEncodr
|
|
19
19
|
# @param [::String] string the bencoded string to decode
|
20
20
|
# @return [::String, ::Integer, ::Hash, ::Array] the decoded object
|
21
21
|
def decode(string)
|
22
|
-
|
23
|
-
Parser.parse_object(scanner) or raise BEncodeError, "Invalid bencoding"
|
22
|
+
string.bdecode
|
24
23
|
end
|
25
24
|
|
26
25
|
# This method decodes a bencoded file.
|
@@ -29,8 +28,8 @@ module BEncodr
|
|
29
28
|
#
|
30
29
|
# @param [::String] file the file to decode
|
31
30
|
# @return [::String, ::Integer, ::Hash, ::Array] the decoded object
|
32
|
-
def decode_file(
|
33
|
-
decode(File.open(
|
31
|
+
def decode_file(name)
|
32
|
+
decode(File.open(name, 'rb') {|file| file.read})
|
34
33
|
end
|
35
34
|
|
36
35
|
# This method encodes a bencoded object.
|
@@ -49,8 +48,8 @@ module BEncodr
|
|
49
48
|
#
|
50
49
|
# @param [::String] file the file to write the bencoded object to
|
51
50
|
# @param [#bencodr] object the object to encode
|
52
|
-
def encode_file(
|
53
|
-
File.open(
|
51
|
+
def encode_file(name, object)
|
52
|
+
File.open(name, 'wb') {|file| file.write encode(object)}
|
54
53
|
end
|
55
54
|
end
|
56
55
|
end
|
data/spec/bencodr/parser_spec.rb
CHANGED
@@ -173,4 +173,24 @@ describe BEncodr::Parser do
|
|
173
173
|
lambda{BEncodr::Parser.parse_dictionary(scanner)}.should raise_error BEncodr::BEncodeError
|
174
174
|
end
|
175
175
|
end
|
176
|
+
end
|
177
|
+
|
178
|
+
describe String do
|
179
|
+
describe "#bdecode" do
|
180
|
+
it "should decode a bencoded string into a ruby string" do
|
181
|
+
"6:string".bdecode.should == "string"
|
182
|
+
end
|
183
|
+
|
184
|
+
it "should decode a bencoded integer into a ruby integer" do
|
185
|
+
"i-1e".bdecode.should == -1
|
186
|
+
end
|
187
|
+
|
188
|
+
it "should decode a bencoded list into a ruby array" do
|
189
|
+
"le".bdecode.should == []
|
190
|
+
end
|
191
|
+
|
192
|
+
it "should decode a bencoded dictionary into a ruby hash" do
|
193
|
+
"de".bdecode.should == {}
|
194
|
+
end
|
195
|
+
end
|
176
196
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bencodr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Allen Madsen
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-02-
|
12
|
+
date: 2010-02-04 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -50,7 +50,7 @@ files:
|
|
50
50
|
- Rakefile
|
51
51
|
- VERSION
|
52
52
|
- autotest/discover.rb
|
53
|
-
-
|
53
|
+
- bencodr.gemspec
|
54
54
|
- lib/bencodr.rb
|
55
55
|
- lib/bencodr/dictionary.rb
|
56
56
|
- lib/bencodr/integer.rb
|