假设我有一些适当的结构元这样的代码如何在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