lib/restful_resource/base.rb in restful_resource-0.0.6 vs lib/restful_resource/base.rb in restful_resource-0.0.7

- old
+ new

@@ -2,24 +2,37 @@ class Base def self.url=(url) @url = url end - def self.url(params={}) + def self.processed_url_and_params(params={}) url = @url - params.keys.each do |key| - url = url.gsub(':'+key.to_s, params[key].to_s) + other_params = params.clone + missing_params = [] + + url_params = url.scan(/:([A-Za-z][^\/]*)/).flatten + url_params.each do |key| + value = other_params.delete(key.to_sym) + if value.nil? + missing_params << key + else + url = url.gsub(':'+key.to_s, value.to_s) + end end - url_params = url.scan(/:([A-Za-z][^\/]*)/) - if url_params.any? - raise ParameterMissingError.new(url_params) + if missing_params.any? + raise ParameterMissingError.new(missing_params) end - url + [url, other_params] end + def self.url(params={}) + processed_url_and_params(params).first + end + + def self.has_one(nested_resource_type) klass = nested_resource_type.to_s.camelize.safe_constantize klass = OpenStruct if (klass.nil? || klass.superclass != RestResource) self.send(:define_method, nested_resource_type) do @@ -79,10 +92,11 @@ response = RestClient.get("#{url}/search", params: params) paginate_response(response) end def self.all(params = {}) - response = RestClient.get("#{url}", params: params) + url, other_params = processed_url_and_params(params) + response = RestClient.get("#{url}", params: other_params) paginate_response(response) end def self.get(postfix_url = "", params = {}) response = RestClient.get("#{url}#{postfix_url}", params: params)