所以我正在寫一個方法,這會導致向類中添加一些代碼(特別是選擇一個選項並創建一個arel樣式的default_scope
)。雖然我玩過簡單的MyClass.send來獲得代碼,但我覺得instance_eval
會更清晰,更清晰。instance_eval的Rspec測試結果
# test
let(:hash) { {order: "my_column desc"} }
let(:arel) { Proc.new{ order(hash[:order]) } }
it "converts options hash to arel calls" do
MyClass.send(:my_translator_method, hash)
end
# method
def self.my_translator_method(hash)
code = method_to_convert_options_to_arel
self.instance_eval <<CODE
default_scope #{code}
CODE
end
問題是我不知道如何鉤入類,以確定它是以預期的方式改變。