48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/howkast/base.rb', line 48
def service name, spec = { }
arguments_guard = ->(argcount) do
maxarity = spec[:maxarity] || 1
raise ArgumentError, "wrong number of arguments (#{argcount} for #{maxarity})" \
unless maxarity == argcount
end
has_named_parameters name, spec[:options] || { }
(@services ||= []) << name.to_sym
define_method name do |*args, &block|
arguments_guard[args.count]
self.class.default_params api_key: configuration.api_key
procname = (spec[:processor] || name).to_s.modulize
processor = Processor.const_defined?(procname) ?
Processor.const_get(procname) :
Processor::Base
path = "/#{processor.path || name}"
query = args.last
args = args[0..-2] if query.instance_of? Hash
query = { } unless query.instance_of? Hash
processor.filter args, query
path << "/#{args.join('/')}" unless args.empty?
path << '.xml'
data = request(path, query: query)
processor.parse_element data
end
end
|