mirror of
https://github.com/lostisland/faraday.git
synced 2025-10-07 00:11:11 -04:00
91 lines
2.9 KiB
Plaintext
91 lines
2.9 KiB
Plaintext
= faraday
|
|
|
|
Experiments in a REST API lib
|
|
|
|
Super alpha! Don't use it if you mind throwing away all the code when I change
|
|
the API on a whim.
|
|
|
|
This mess is gonna get raw, like sushi. So, haters to the left.
|
|
|
|
== Usage
|
|
|
|
# uses Net/HTTP, no response parsing
|
|
conn = Faraday::Connection.new("http://sushi.com")
|
|
conn.extend Faraday::Adapter::NetHttp
|
|
resp = conn.get("/sake.json")
|
|
resp.body # => %({"name":"Sake"})
|
|
|
|
# uses Net/HTTP, Yajl parsing
|
|
conn = Faraday::Connection.new("http://sushi.com")
|
|
conn.extend Faraday::Adapter::NetHttp
|
|
conn.response_class = Faraday::Response::YajlResponse
|
|
resp = conn.get("/sake.json")
|
|
resp.body # => {"name": "Sake"}
|
|
|
|
# uses Typhoeus, no response parsing
|
|
conn = Faraday::Connection.new("http://sushi.com")
|
|
conn.extend Faraday::Adapter::Typhoeus
|
|
resp = conn.get("/sake.json")
|
|
resp.body # => %({"name":"Sake"})
|
|
|
|
# uses Typhoeus, Yajl parsing, performs requests in parallel
|
|
conn = Faraday::Connection.new("http://sushi.com")
|
|
conn.extend Faraday::Adapter::Typhoeus
|
|
conn.response_class = Faraday::Response::YajlResponse
|
|
resp1, resp2 = nil, nil
|
|
conn.in_parallel do
|
|
resp1 = conn.get("/sake.json")
|
|
resp2 = conn.get("/unagi.json")
|
|
|
|
# requests have not been made yet
|
|
resp1.body # => nil
|
|
resp2.body # => nil
|
|
end
|
|
resp1.body # => {"name": "Sake"}
|
|
resp2.body # => {"name": "Unagi"}
|
|
|
|
== Testing
|
|
|
|
* Yajl is needed for tests :(
|
|
* Live Sinatra server is required for tests: `ruby test/live_server.rb` to start it.
|
|
|
|
=== Writing tests based on faraday
|
|
|
|
Using the MockRequest connection adapter you can implement your own test
|
|
connection class:
|
|
|
|
# customize your own TestConnection or just use Faraday::TestConnection
|
|
class TestConnection < Faraday::Connection
|
|
include Faraday::Adapter::MockRequest
|
|
end
|
|
|
|
conn = TestConnection.new do |stub|
|
|
# response mimics a rack response
|
|
stub.get('/hello.json') { [200, {}, 'hi world'] }
|
|
end
|
|
resp = conn.get '/hello.json'
|
|
resp.body # => 'hi world'
|
|
resp = conn.get '/whatever' # => <not stubbed, raises connection error>
|
|
|
|
== TODO
|
|
|
|
* other HTTP methods besides just GET
|
|
* gracefully skip tests for Yajl and other optional libraries if they don't exist.
|
|
* gracefully skip live http server tests if the sinatra server is not running.
|
|
* use Typhoeus' request mocking facilities in the Typhoeus adapter test
|
|
* lots of other crap
|
|
|
|
== Note on Patches/Pull Requests
|
|
|
|
* Fork the project.
|
|
* Make your feature addition or bug fix.
|
|
* Add tests for it. This is important so I don't break it in a
|
|
future version unintentionally.
|
|
* Commit, do not mess with rakefile, version, or history.
|
|
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
|
* Send me a pull request. Bonus points for topic branches.
|
|
|
|
== Copyright
|
|
|
|
Copyright (c) 2009 rick. See LICENSE for details.
|