2016-08-01 49 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您的對象並刪除敏感字段,將其作爲您的_dump函數中的哈希值返回,然後在_load方法中撤消該哈希值。

您還可以閱讀the documentation on Marshal它描述了推薦的方法。