mirror of
https://github.com/lostisland/faraday.git
synced 2025-08-30 00:03:09 -04:00
Support for custom request encoding (e.g. POST or JSON).
This commit is contained in:
parent
6488d27880
commit
cf2589a626
@ -9,7 +9,7 @@ Gem::Specification.new do |s|
|
||||
|
||||
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
||||
s.authors = ["rick"]
|
||||
s.date = %q{2009-12-22}
|
||||
s.date = %q{2009-12-31}
|
||||
s.description = %q{HTTP/REST API client library with pluggable components}
|
||||
s.email = %q{technoweenie@gmail.com}
|
||||
s.extra_rdoc_files = [
|
||||
|
@ -21,7 +21,15 @@ module Faraday
|
||||
:Connection => 'connection',
|
||||
:TestConnection => 'test_connection',
|
||||
:Response => 'response',
|
||||
:Error => 'error'
|
||||
:Error => 'error',
|
||||
:Loadable => 'loadable'
|
||||
|
||||
module Request
|
||||
extend AutoloadHelper
|
||||
autoload_all 'faraday/request',
|
||||
:YajlRequest => 'yajl_request',
|
||||
:PostRequest => 'post_request'
|
||||
end
|
||||
|
||||
module Adapter
|
||||
extend AutoloadHelper
|
||||
|
@ -20,11 +20,11 @@ module Faraday
|
||||
end
|
||||
|
||||
def _put(uri, data, request_headers)
|
||||
_perform('PUT', uri, post_encode(data), request_headers)
|
||||
_perform('PUT', uri, encode_params(data), request_headers)
|
||||
end
|
||||
|
||||
def _post(uri, data, request_headers)
|
||||
_perform('POST', uri, post_encode(data), request_headers)
|
||||
_perform('POST', uri, encode_params(data), request_headers)
|
||||
end
|
||||
|
||||
def _get(uri, request_headers)
|
||||
@ -35,19 +35,6 @@ module Faraday
|
||||
_perform('DELETE', uri, uri.query, request_headers)
|
||||
end
|
||||
|
||||
def post_encode data
|
||||
create_post_params data
|
||||
end
|
||||
|
||||
private
|
||||
def create_post_params(params, base = "")
|
||||
[].tap do |toreturn|
|
||||
params.each_key do |key|
|
||||
keystring = base == '' ? key : "#{base}[#{key}]"
|
||||
toreturn << (params[key].kind_of?(Hash) ? create_post_params(params[key], keystring) : "#{keystring}=#{CGI.escape(params[key].to_s)}")
|
||||
end
|
||||
end.join('&')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -26,7 +26,7 @@ module Faraday
|
||||
end
|
||||
|
||||
def _post(uri, data, request_headers)
|
||||
_perform(:post, uri, :headers => request_headers, :params => data)
|
||||
_perform(:post, uri, :headers => request_headers, :body => encode_params(data))
|
||||
end
|
||||
|
||||
def _get(uri, request_headers)
|
||||
@ -34,7 +34,7 @@ module Faraday
|
||||
end
|
||||
|
||||
def _put(uri, data, request_headers)
|
||||
_perform(:put, uri, :headers => request_headers, :params => data)
|
||||
_perform(:put, uri, :headers => request_headers, :body => encode_params(data))
|
||||
end
|
||||
|
||||
def _delete(uri, request_headers)
|
||||
|
@ -17,6 +17,7 @@ module Faraday
|
||||
|
||||
def initialize(url = nil)
|
||||
@response_class = nil
|
||||
@request_class = nil
|
||||
self.url_prefix = url if url
|
||||
end
|
||||
|
||||
@ -28,6 +29,10 @@ module Faraday
|
||||
self.path_prefix = uri.path
|
||||
end
|
||||
|
||||
def encode_params data
|
||||
request_class.new(data).encode
|
||||
end
|
||||
|
||||
# Override in a subclass, or include an adapter
|
||||
#
|
||||
# def _get(uri, headers)
|
||||
@ -59,6 +64,10 @@ module Faraday
|
||||
_delete build_uri(uri, params), headers
|
||||
end
|
||||
|
||||
def request_class
|
||||
@request_class || Request::PostRequest
|
||||
end
|
||||
|
||||
def response_class
|
||||
@response_class || Response
|
||||
end
|
||||
@ -70,6 +79,13 @@ module Faraday
|
||||
@response_class = v
|
||||
end
|
||||
|
||||
def request_class=(v)
|
||||
if v.respond_to?(:loaded?) && !v.loaded?
|
||||
raise ArgumentError, "The request class: #{v.inspect} does not appear to be loaded."
|
||||
end
|
||||
@request_class = v
|
||||
end
|
||||
|
||||
def in_parallel?
|
||||
!!@parallel_manager
|
||||
end
|
||||
|
13
lib/faraday/loadable.rb
Normal file
13
lib/faraday/loadable.rb
Normal file
@ -0,0 +1,13 @@
|
||||
module Faraday
|
||||
module Loadable
|
||||
def self.extended mod
|
||||
class << mod
|
||||
attr_accessor :load_error
|
||||
end
|
||||
end
|
||||
|
||||
def self.loaded?
|
||||
load_error.nil?
|
||||
end
|
||||
end
|
||||
end
|
25
lib/faraday/request/post_request.rb
Normal file
25
lib/faraday/request/post_request.rb
Normal file
@ -0,0 +1,25 @@
|
||||
module Faraday
|
||||
module Request
|
||||
class PostRequest
|
||||
extend Loadable
|
||||
|
||||
def initialize params
|
||||
@params = params
|
||||
end
|
||||
|
||||
def encode
|
||||
create_post_params @params
|
||||
end
|
||||
|
||||
private
|
||||
def create_post_params(params, base = "")
|
||||
[].tap do |toreturn|
|
||||
params.each_key do |key|
|
||||
keystring = base == '' ? key : "#{base}[#{key}]"
|
||||
toreturn << (params[key].kind_of?(Hash) ? create_post_params(params[key], keystring) : "#{keystring}=#{CGI.escape(params[key].to_s)}")
|
||||
end
|
||||
end.join('&')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
22
lib/faraday/request/yajl_request.rb
Normal file
22
lib/faraday/request/yajl_request.rb
Normal file
@ -0,0 +1,22 @@
|
||||
module Faraday
|
||||
module Request
|
||||
class YajlRequest
|
||||
extend Loadable
|
||||
|
||||
begin
|
||||
require 'yajl'
|
||||
|
||||
def initialize params
|
||||
@params = params
|
||||
end
|
||||
|
||||
# TODO streaming
|
||||
def encode
|
||||
Yajl::Encoder.encode @params
|
||||
end
|
||||
rescue LoadError => e
|
||||
self.load_error = e
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -1,11 +1,6 @@
|
||||
module Faraday
|
||||
class Response < Struct.new(:headers, :body)
|
||||
class << self
|
||||
attr_accessor :load_error
|
||||
def loaded?
|
||||
!load_error
|
||||
end
|
||||
end
|
||||
extend Loadable
|
||||
|
||||
extend AutoloadHelper
|
||||
autoload_all 'faraday/response',
|
||||
@ -40,4 +35,4 @@ module Faraday
|
||||
self.body = body.join if body.respond_to?(:join)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -1,5 +1,6 @@
|
||||
require 'rubygems'
|
||||
require 'context'
|
||||
require 'ruby-debug'
|
||||
if ENV['LEFTRIGHT']
|
||||
require 'leftright'
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user