class Patchboard::Mapping
Attributes
klass[RW]
name[R]
path[R]
query[R]
resource[R]
template[R]
url[R]
Public Class Methods
new(api, name, definition)
click to toggle source
# File lib/patchboard/api.rb, line 90 def initialize(api, name, definition) @api = api @name = name @definition = definition @resource = @definition[:resource] @query = @definition[:query] @url = @definition[:url] @path = @definition[:path] @template = @definition[:template] unless (resource_name = @definition[:resource]) raise "Mapping does not specify 'resource'" end unless (@resource = @api.resources[resource_name.to_sym]) raise "Mapping specifies a resource that is not defined" end unless (@definition[:url] || @definition[:path] || @definition[:template]) raise "Mapping is missing any form of URL specification" end end
Public Instance Methods
generate_url(params={})
click to toggle source
# File lib/patchboard/api.rb, line 114 def generate_url(params={}) if @url base = @url elsif params[:url] base = params[:url] elsif @path if @api.service_url base = [@api.service_url, @path].join("/") else raise "Tried to generate url from path, but API did not define service_url" end elsif @template raise "Template mappings are not yet implemented in the client" end if @query parts = [] keys = @query.keys.sort() # TODO check query schema keys.each do |key| if string = (params[key.to_s] || params[key.to_sym]) parts << "#{CGI::escape(key.to_s)}=#{CGI::escape(string)}" end end if parts.size > 0 query_string = "?#{parts.join("&")}" else query_string = "" end [base, query_string].join() else base end end