class Fossyl::Parser
Attributes
scanner[R]
Public Class Methods
new(string)
click to toggle source
# File lib/fossyl/parser.rb, line 6 def initialize(string) @scanner = StringScanner.new(string) end
Public Instance Methods
parse()
click to toggle source
# File lib/fossyl/parser.rb, line 10 def parse return parse_bytes if scanner.scan(/\d+/) return parse_integer if scanner.scan(/i/) return parse_list if scanner.scan(/l/) return parse_dictionary if scanner.scan(/d/) raise Fossyl::InvalidBencoding end
Private Instance Methods
parse_bytes()
click to toggle source
# File lib/fossyl/parser.rb, line 20 def parse_bytes length = scanner.matched.to_i scanner.get_byte # Skip the ':' length.times.map { scanner.get_byte }.join end
parse_dictionary()
click to toggle source
# File lib/fossyl/parser.rb, line 36 def parse_dictionary hash = {} hash[parse] = parse until scanner.scan(/e/) hash end
parse_integer()
click to toggle source
# File lib/fossyl/parser.rb, line 26 def parse_integer scanner.scan_until(/e/).chop.to_i end
parse_list()
click to toggle source
# File lib/fossyl/parser.rb, line 30 def parse_list list = [] list << parse until scanner.scan(/e/) list end