2016-08-01 48 views
0

Ich habe ein Objekt mit sensiblen Daten, die ich marschieren möchte (Marshal) ohne die sensiblen Daten.Ändern Sie ein Objekt vor dem Marshalling in Ruby

Ich möchte in der Lage sein, zu sagen:

def _dump(*args) 
    # Clean-up sensitive data 
    super 
end 

aber dies erzeugt einen ‚kein Super Methode‘ Fehler. Gibt es eine Möglichkeit, dass ich mein Objekt so verhalten kann, wie ich es als Antwort auf Marshal.dump will, während ich die Standardimplementierung verwende?

Ich möchte Marshal.dump(my_obj) out-of-the-Box arbeiten, ohne dass der API-Consumer daran denken muss, eine andere Methode aufzurufen.

+1

Können Sie 'marshal_dump' und' marshal_load' verwenden? – matt

Antwort

1

Es kann sein, dass es keine Superklassenmethode für _dump gibt. Wenn es auf Ihrem Objekt definiert ist, wird es aufgerufen. Wenn nicht, wird der Standard-Handler verwendet.

Sie wahrscheinlich Ihr Objekt und entfernen Sie die sensiblen Bereiche clone wollen, dass als Hash in Ihrer _dump Funktion zurückkehrt, löst dann, dass innerhalb der _load Methode.

Sie können auch the documentation on Marshal lesen, wo es die empfohlenen Methoden beschreibt.