假設我有一些適當的結構元這樣的代碼如何在ruby中對使用method_missing定義的方法進行存根?
class Administrator < ParseInterface
attr_accessor :args, :new_student
include GeneralHelper
def initialize args = {}
@args = args
@new_student = build_student
end
end
class ParseInterface
PARSE_METHOD_PREFIX = /\A(parse_){1}/
def self.method_missing method_name, args = nil
parse_method?(method_name) ? call_parse(method_name, args) : super
end
def self.parse_method? method_name
method_name.to_s.match(PARSE_METHOD_PREFIX) ? true : false
end
def self.to_parse method_name
(remove_parse_prefix(method_name)).camelize(:lower)
end
def self.remove_parse_prefix method_name
method_name.to_s.gsub(PARSE_METHOD_PREFIX, "")
end
def self.call_parse method_name, args
set_session_token args
begin
Parse::Cloud::Function.new(to_parse(method_name)).call(args)
rescue Exception => e
NewRelic::Agent.agent.error_collector.notice_error(e)
end
end
end
我要打電話之類的東西Administrator.parse_do_stuff
會發現parse
前綴,然後對解析API的後續調用的能力和解析接口類。我想存根其中的一些動態生成的方法,特別是,我希望能夠
allow(Administrator).to receive(:parse_rooms_for_user).and_return([{objectId: @room.parse_pointer }])
但RSpec的是拋出一個未實現的錯誤。我看了一篇相當不錯的博文,http://blog.enriquez.me/2010/2/21/dont-forget-about-respond-to-when-implementing-method-missing/似乎正在接近這一點,但我不清楚解決方案。 Ergo,如何在Ruby中存儲一個動態生成的類方法?
THX,
JD
這場景正是''respond_to_missing加入到支持? –
@JörgWMittag謝謝,編輯。 – Shelvacu