2016-08-01 17 views
0

У меня есть объект, содержащий конфиденциальные данные, которые я хочу сделать маршалом (используя Marshal) без чувствительных данных.Измените объект перед его маршалингом в Ruby

Я хотел бы быть в состоянии сказать:

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

но выдает ошибку «не метод суперкласса». Есть ли способ заставить мой объект вести себя так, как я хочу, в ответ на Marshal.dump, используя стандартную реализацию?

Я хочу, чтобы Marshal.dump(my_obj) работал без работы, не требуя, чтобы пользователь API не забывал вызывать другой метод.

+1

Можете ли вы использовать 'marshal_dump' и' marshal_load'? – matt

ответ

1

Возможно, нет метода суперкласса для _dump. Если он определен на вашем объекте, он называется. Если нет, используется обработчик по умолчанию.

Вы, вероятно, хотите clone свой объект и удалить чувствительные поля, возвращая это как Hash внутри вашей _dump функции, то отменить, что в рамках метода _load.

Вы также можете прочитать the documentation on Marshal, где описаны рекомендуемые методы.