class Firebug::Unserializer
This class will unserialize a PHP serialized string into a ruby object.
@attr [StringIOReader] str
Attributes
str[RW]
Public Class Methods
new(string)
click to toggle source
@param [String] string
# File lib/firebug/unserializer.rb, line 14 def initialize(string) self.str = StringIOReader.new(string) end
parse(value)
click to toggle source
Convenience method for unserializing a PHP serialized string.
@see parse
@param [String] value @return [Object]
# File lib/firebug/unserializer.rb, line 24 def self.parse(value) new(value).parse end
Public Instance Methods
parse()
click to toggle source
Parse a PHP serialized string into a Ruby object.
@note Hashes will be returned with symbolized keys.
@raise [ParserError] @return [Hash, Array, String, Integer, Float, nil]
# File lib/firebug/unserializer.rb, line 34 def parse ch = str.getc return if ch.nil? str.getc # : or ; case ch when 'a' parse_enumerable.tap { str.getc } when 's' parse_string when 'i' parse_int when 'd' parse_double when 'b' parse_bool when 'N' nil else raise ParserError, "Unknown token '#{ch}' at position #{str.pos} (#{str.string})" end end
Private Instance Methods
parse_bool()
click to toggle source
@raise [ParserError] @return [Boolean]
# File lib/firebug/unserializer.rb, line 94 def parse_bool str.read(2)[0] == '1' end
parse_double()
click to toggle source
@raise [ParserError] @return [Float]
# File lib/firebug/unserializer.rb, line 88 def parse_double str.read_until(';')[0..-1].to_f end
parse_enumerable()
click to toggle source
@raise [ParseError] @return [Hash, Array]
# File lib/firebug/unserializer.rb, line 61 def parse_enumerable size = str.read_until('{')[0..-3].to_i # n:{ return {} if size.zero? val = Array.new(size) { [parse, parse] } if val[0][0].is_a?(Integer) val.map! { |_, v| v } else val = Hash[val].transform_keys!(&:to_sym) end val end
parse_int()
click to toggle source
@raise [ParserError] @return [Integer]
# File lib/firebug/unserializer.rb, line 82 def parse_int str.read_until(';')[0..-1].to_i end
parse_string()
click to toggle source
@return [String]
# File lib/firebug/unserializer.rb, line 75 def parse_string size = str.read_until(':').to_i + 3 # add 3 for the 2 double quotes and semicolon String.new(str.read(size)[1..-3], encoding: Encoding::UTF_8) end