module ActiveRestClient::ProxyBase::ClassMethods

Public Instance Methods

add_mapping(method_type, match, block) click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 25
def add_mapping(method_type, match, block)
  @mappings ||= []

  if match.is_a?(String) && (param_keys = match.scan(/:\w+/)) && param_keys.any?
    param_keys.each do |key|
      match.gsub!(key, "([^/]+)")
    end
    param_keys = param_keys.map {|k| k.gsub(":", "").to_sym}
    match = Regexp.new(match)
  end

  @mappings << OpenStruct.new(http_method:method_type, match:match, block:block, param_keys:param_keys)
end
body(value = nil) click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 39
def body(value = nil)
  @body = value if value
  @body
end
delete(match, &block) click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 21
def delete(match, &block)
  add_mapping(:delete, match, block)
end
find_mapping_for_current_request() click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 131
def find_mapping_for_current_request
  uri = URI.parse(@original_url)
  @mappings ||= []
  @params = {}
  @mappings.each do |mapping|
    match = mapping.match
    if (match_data = uri.path.match(match)) && @request.http_method.to_sym == mapping.http_method
      matches = match_data.to_a
      matches.shift
      matches.each_with_index do |value, index|
        @params[mapping.param_keys[index]] = value
      end
      return mapping
    end
  end
  nil
end
get(match, &block) click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 9
def get(match, &block)
  add_mapping(:get, match, block)
end
get_params(value = nil) click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 49
def get_params(value = nil)
  @get_params = value if value
  @get_params
end
handle(request, &block) click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 108
def handle(request, &block)
  @request = request
  @original_handler = block

  @original_body = request.body
  @body = @original_body.dup

  @original_get_params = request.get_params
  @get_params = @original_get_params.dup

  @original_post_params = request.post_params
  @post_params = (@original_post_params || {}).dup

  @original_url = request.url
  @url = @original_url.dup

  if mapping = find_mapping_for_current_request
    self.class_eval(&mapping.block)
  else
    passthrough
  end
end
params(value = nil) click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 59
def params(value = nil)
  @params = value if value
  @params
end
passthrough() click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 64
def passthrough
  rebuild_request
  @original_handler.call(@request)
end
post(match, &block) click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 13
def post(match, &block)
  add_mapping(:post, match, block)
end
post_params(value = nil) click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 54
def post_params(value = nil)
  @post_params = value if value
  @post_params
end
put(match, &block) click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 17
def put(match, &block)
  add_mapping(:put, match, block)
end
rebuild_request() click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 91
def rebuild_request
  if @url != @original_url
    @request.forced_url = @request.url = @url
  end
  if @body != @original_body
    @request.body = @body
  elsif @post_params != @original_post_params
    @request.body = nil
    @request.prepare_request_body(@post_params)
  end
  if @get_params != @original_get_params
    @request.get_params = @get_params
    @request.prepare_url
    @request.append_get_parameters
  end
end
render(body, status=200, content_type="application/javascript", headers={}) click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 149
def render(body, status=200, content_type="application/javascript", headers={})
  headers["Content-type"] = content_type
  FaradayResponseProxy.new(OpenStruct.new(body:body, status:status, response_headers:headers, proxied:true))
end
result_is_json_or_unspecified?(result) click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 69
def result_is_json_or_unspecified?(result)
  result.headers['Content-Type'].include?('json')
rescue
  true
end
translate(result, options = {}) { |parse| ... } click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 75
def translate(result, options = {})
  incoming_content_type = result.headers['Content-Type']
  if result_is_json_or_unspecified?(result)
    result.headers["content-type"] = "application/hal+json"
  end
  result = FaradayResponseProxy.new(OpenStruct.new(status:result.status, response_headers:result.headers, body:result.body))
  if result.body.present?
    if incoming_content_type && incoming_content_type["xml"]
      result.body = yield Crack::XML.parse(result.body)
    else
      result.body = yield MultiJson.load(result.body)
    end
  end
  result
end
url(value = nil) click to toggle source
# File lib/active_rest_client/proxy_base.rb, line 44
def url(value = nil)
  @url = value if value
  @url
end