bencoder 0.0.3 → 0.0.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 51e49c375c750bc8fc138694c480243464b72569
4
- data.tar.gz: 61d783b6a72ed79143a178e0b3238d66285174cb
3
+ metadata.gz: dfca12e927ab3e29a541dc509d5bc787ee62b732
4
+ data.tar.gz: d74de695a016dea7000cb8118e1f54ec6889a8d8
5
5
  SHA512:
6
- metadata.gz: 624aefbb8c412f1ad58f8df03a6a3492af110859065e7bff4541d286361e6bee0113fbc0fdbfa388f5c183e4c4b036080fefe036bcdba4cfc08341384fa9b17d
7
- data.tar.gz: 65232d1a24bfcb6cf2e5abea661df2fba8ff0a2441aacbe696fdb0417b8b0ff82a38cdddadaa7bf8058ffeee74c563648b5537b0ab45b866d20d67af39338724
6
+ metadata.gz: 957254eaf5930e4c8898a62a8616c760732db91f508e9af20759388419ee88f006afaf7f0402a0cbd225fd5c3a6b443bcecdff4d2f63f25b756297ca907dbe05
7
+ data.tar.gz: 338dd693748fbd2c36788798c3cfc896abbd1d5d52456ef074f90ecff0a0bcd370552daa6c4cfc98b971e262ea92bf4376da7b51a3aeae206f9efa37bbcae879
data/README.md CHANGED
@@ -1,6 +1,11 @@
1
1
  bencoder
2
2
  ========
3
3
 
4
+ [![Build Status](https://travis-ci.org/kholbekj/bencoder.svg?branch=master)](https://travis-ci.org/kholbekj/bencoder)
5
+ [![Coverage Status](https://coveralls.io/repos/kholbekj/bencoder/badge.png?branch=master)](https://coveralls.io/r/kholbekj/bencoder?branch=master)
6
+ [![Code Climate](https://codeclimate.com/github/kholbekj/bencoder/badges/gpa.svg)](https://codeclimate.com/github/kholbekj/bencoder)
7
+ [![Gem Version](https://badge.fury.io/rb/bencoder.svg)](http://badge.fury.io/rb/bencoder)
8
+
4
9
  Bittorrent encoding in ruby
5
10
 
6
11
  BEncoder will encode the 4 data types in the specification:
@@ -29,6 +34,6 @@ BEncoder.encode ['what', 'strange', { data: 'I', have: 'here' }, 666]
29
34
  => "l4:what7:stranged4:data1:I4:have4:hereei666ee"
30
35
 
31
36
  BEncoder.decode 'l4:what7:stranged4:data1:I4:have4:hereei666ee'
32
- => ['what', 'strange', { data: 'I', have: 'here' }, 666]
37
+ => ['what', 'strange', { 'data' => 'I', 'have' => 'here' }, 666]
33
38
  ```
34
39
  Intentionally minimalistic.
data/lib/bencoder.rb CHANGED
@@ -24,6 +24,8 @@ class BEncoder
24
24
 
25
25
  private
26
26
 
27
+ class InvalidEncodingError < StandardError; end
28
+
27
29
  def parse(string)
28
30
  case string[0]
29
31
  when 'i'
@@ -44,39 +46,47 @@ class BEncoder
44
46
  elsif string[0] == 'l' && string[-1] == 'e'
45
47
  str = StringIO.new string[1..-2]
46
48
  else
47
- raise 'Not a list'
49
+ raise InvalidEncodingError
50
+ end
51
+ parse_io_list str
52
+ end
53
+
54
+ def parse_dict(string)
55
+ if string.is_a? StringIO
56
+ string.getc if peek(string) == 'd'
57
+ list_of_keys_and_values = parse_list(string)
58
+ elsif string[0] == 'd' && string[-1] == 'e'
59
+ list_of_keys_and_values = parse_list("l#{string[1..-2]}e")
60
+ else
61
+ raise InvalidEncodingError
48
62
  end
63
+ make_hash_from_array list_of_keys_and_values
64
+ end
65
+
66
+ def parse_io_list(io)
49
67
  list = []
50
- until peek(str) == 'e' || str.eof?
51
- case peek(str)
68
+ until peek(io) == 'e' || io.eof?
69
+ case peek(io)
52
70
  when 'i'
53
- list << parse_int(str.gets sep='e')
71
+ list << parse_int(io.gets sep='e')
54
72
  when 'l'
55
- list << parse_list(str)
73
+ list << parse_list(io)
56
74
  when 'd'
57
- list << parse_dict(str)
75
+ list << parse_dict(io)
58
76
  when ->(e) { e =~ /\d/ }
59
- length = str.gets(sep=':').to_i
60
- list << str.gets(length)
77
+ length = io.gets(sep=':').to_i
78
+ list << io.gets(length)
61
79
  else
62
- raise str.read
80
+ raise InvalidEncodingError
63
81
  end
64
82
  end
65
- str.getc
83
+ io.getc
66
84
  list
67
85
  end
68
86
 
69
- def parse_dict(string)
70
- if string.is_a? StringIO
71
- string.getc if peek(string) == 'd'
72
- list_of_keys_and_values = parse_list(string)
73
- elsif string[0] == 'd' && string[-1] == 'e'
74
- list_of_keys_and_values = parse_list("l#{string[1..-2]}e")
75
- else
76
- raise 'Something in hash is wrong!'
77
- end
87
+ def make_hash_from_array(list)
78
88
  hash = {}
79
- list_of_keys_and_values.each_slice(2) do |k,v|
89
+ list.each_slice(2) do |k,v|
80
90
  hash[k] = v
81
91
  end
82
92
  hash
@@ -86,7 +96,7 @@ class BEncoder
86
96
  if string[0] == 'i' && string[-1] == 'e'
87
97
  string[1..-2].to_i
88
98
  else
89
- raise 'Int is formatted wrong'
99
+ raise InvalidEncodingError
90
100
  end
91
101
  end
92
102
 
@@ -95,7 +105,7 @@ class BEncoder
95
105
  if content.length == length.to_i
96
106
  content
97
107
  else
98
- raise 'String length is messed up'
108
+ raise InvalidEncodingError
99
109
  end
100
110
  end
101
111
 
@@ -118,7 +128,6 @@ class BEncoder
118
128
  def peek(io)
119
129
  char = io.getc
120
130
  io.ungetc char
121
- puts char
122
131
  char
123
132
  end
124
133
  end
@@ -1,7 +1,12 @@
1
+ require 'coveralls'
2
+
3
+ Coveralls.wear!
4
+
1
5
  require 'minitest/autorun'
2
6
  require 'bencoder'
3
7
 
4
8
  class TestBencoder < Minitest::Test
9
+
5
10
  def setup
6
11
  @be = BEncoder
7
12
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bencoder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kasper Holbek Jensen
@@ -9,7 +9,47 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2014-10-18 00:00:00.000000000 Z
12
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.4'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 5.4.0
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '5.4'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 5.4.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: coveralls
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 0.7.0
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 0.7.0
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: 0.7.0
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 0.7.0
13
53
  description: Minimalistic BEncoding gem
14
54
  email: kholbekj@gmail.com
15
55
  executables: []
@@ -20,7 +60,7 @@ files:
20
60
  - Rakefile
21
61
  - lib/bencoder.rb
22
62
  - test/test_bencoder.rb
23
- homepage: http://rubygems.org/gems/bencoder
63
+ homepage: https://github.com/kholbekj/bencoder
24
64
  licenses:
25
65
  - MIT
26
66
  metadata: {}