class PHPSession::Decoder::State::VarType

Public Class Methods

parse(decoder) click to toggle source
# File lib/php_session/decoder.rb, line 135
def self.parse(decoder)
  case decoder.buffer
  when /\As:(\d+):(.*)\Z/m # string
    decoder.buffer = $2
    decoder.stack.push($1.to_i)
    decoder.state = String
  when /\Ai:(-?\d+);(.*)\Z/m #int
    decoder.buffer = $2
    decoder.process_value($1.to_i)
  when /\Ad:(-?\d+(?:\.\d+)?);(.*)\Z/m # double
    decoder.buffer = $2
    decoder.process_value($1.to_f)
  when /\Aa:(\d+):(.*)\Z/m # array
    decoder.buffer = $2
    decoder.start_array($1.to_i)
    decoder.state = ArrayStart
  when /\A(N);(.*)\Z/m # null
    decoder.buffer = $2
    decoder.process_value(nil)
  when /\Ab:([01]);(.*)\Z/m # boolean
    decoder.buffer = $2
    bool = case $1
           when "0" then false
           when "1" then true
           end
    decoder.process_value(bool)
  when /\AO:(\d+):(.*)\Z/m # object
    decoder.buffer = $2
    decoder.stack.push($1.to_i);
    decoder.state = ClassName
  when /\A[Rr]:(\d+);(.*)\Z/m # reference count?
    decoder.buffer = $2
    decoder.process_value($1)
  else
    raise Errors::ParseError, "invalid session format"
  end
end