我有一些代码可以从简单的定义中将方法添加到模块中,以便通过 REST 客户端周围的包装类与远程资源进行对话。
def service_function(function_name, method, uri, parameters)
class_eval <<-RUBY
def #{function_name}(params)
if !(#{function_name}_required_params - params.keys).empty? || \
!(params.keys - #{function_name}_params).empty?
raise Errors::InvalidParameters.new(service_name, __method__,
params.keys, #{function_name}_params)
end
WebServices::ServiceRequest.perform(self.domain, #{uri}, #{method}, params)
end
def #{function_name}_params
#{function_name}_required_params + #{function_name}_optional_params
end
def #{function_name}_required_params
#{parameters}.select { |param,req| req }.keys
end
def #{function_name}_optional_params
#{parameters}.select { |param,req| !req }.keys
end
RUBY
end
在我什至可以运行代码之前,只需要我在 IRB 中构建的 gem 就会吐出这个错误:
1.9.2p320 :001 > require 'web-services'
SyntaxError: (eval):7: unknown regexp options - rt
违规行是:
WebServices::ServiceRequest.perform(self.domain, #{uri}, #{method}, params)
删除“#{uri}”参数可以修复它,甚至保留“#{method}”参数。有没有人知道为什么会这样?我快束手无策了。