Source code for rubymarshal.classes
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
__author__ = 'Matthieu Gallet'
[docs]class RubyClass(object):
def __init__(self, cls, values):
if isinstance(cls, Symbol):
cls = cls.name
self.cls = cls
self.values = values
def __eq__(self, other):
return isinstance(other, self.__class__) and self.cls == other.cls and self.values == other.values
def __hash__(self):
return hash(hash(self.cls) + hash(self.values))
def __repr__(self):
return '%s:%s(%r)' % (self.__class__.__name__, self.cls, self.values)
def __str__(self):
return '%s:%s(%r)' % (self.__class__.__name__, self.cls, self.values)
def __unicode__(self):
return '%s:%s(%r)' % (self.__class__.__name__, self.cls, self.values)
[docs]class UsrMarshal(RubyClass):
pass
[docs]class UserDef(RubyClass):
pass
[docs]class Extended(RubyClass):
pass
[docs]class Module(RubyClass):
pass
[docs]class Object(RubyClass):
def __init__(self, cls, values, **kwargs):
self.kwargs = kwargs
super(Object, self).__init__(cls, values)
[docs]class Symbol(object):
__registered_symbols__ = {}
def __new__(cls, name):
if name in cls.__registered_symbols__:
return cls.__registered_symbols__[name]
return super(Symbol, cls).__new__(cls)
def __init__(self, name):
self.name = name
self.__registered_symbols__[name] = self
def __hash__(self):
return hash('<<<:%s:>>>' % self.name)
def __repr__(self):
return 'Symbol("%s")' % self.name
def __str__(self):
return ':%s' % self.name
def __unicode__(self):
return ':%s' % self.name