httpi 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile CHANGED
@@ -1,11 +1,2 @@
1
1
  source :rubygems
2
-
3
- group :development, :test do
4
- gem "httpclient", "~> 2.1.5"
5
- gem "curb", "~> 0.7.8"
6
- end
7
-
8
- group :test do
9
- gem "rspec", "2.0.0.beta.22"
10
- gem "mocha", "~> 0.9.8"
11
- end
2
+ gemspec
data/Gemfile.lock CHANGED
@@ -1,3 +1,8 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ httpi (0.2.0)
5
+
1
6
  GEM
2
7
  remote: http://rubygems.org/
3
8
  specs:
@@ -24,5 +29,6 @@ PLATFORMS
24
29
  DEPENDENCIES
25
30
  curb (~> 0.7.8)
26
31
  httpclient (~> 2.1.5)
32
+ httpi!
27
33
  mocha (~> 0.9.8)
28
34
  rspec (= 2.0.0.beta.22)
data/README.md ADDED
@@ -0,0 +1,138 @@
1
+ HTTPI
2
+ =====
3
+
4
+ HTTPI provides a common interface for Ruby HTTP libraries.
5
+
6
+ Installation
7
+ ------------
8
+
9
+ The gem is available through [Rubygems](http://rubygems.org/gems/httpi) and can be installed via:
10
+
11
+ $ gem install httpi
12
+
13
+ Some examples
14
+ -------------
15
+
16
+ Let's create the most basic request object and execute a GET request:
17
+
18
+ request = HTTPI::Request.new :url => "http://example.com"
19
+ HTTPI.get request
20
+
21
+ A POST request with a request object:
22
+
23
+ request = HTTPI::Request.new
24
+ request.url = "http://post.example.com"
25
+ request.body = "send me"
26
+
27
+ HTTPI.post request
28
+
29
+ And a GET request using HTTP basic auth and the Curb adapter:
30
+
31
+ request = HTTPI::Request.new
32
+ request.url = "http://auth.example.com"
33
+ request.basic_auth "username", "password"
34
+
35
+ HTTPI.get request, :curb
36
+
37
+ HTTPI also comes with some shortcuts. This executes a GET request:
38
+
39
+ HTTPI.get "http://example.com"
40
+
41
+ And here's a POST:
42
+
43
+ HTTPI.post "http://example.com", "<some>xml</some>"
44
+
45
+ HTTPI
46
+ -------------
47
+
48
+ The `HTTPI` module uses one of the available adapters to execute HTTP requests.
49
+ It currently supports GET and POST requests:
50
+
51
+ ### GET
52
+
53
+ .get(request, adapter = nil)
54
+ .get(url, adapter = nil)
55
+
56
+ ### POST
57
+
58
+ .post(request, adapter = nil)
59
+ .post(url, body, adapter = nil)
60
+
61
+ ### Notice
62
+
63
+ * You can specify the adapter to use per request
64
+ * And request methods always return an `HTTPI::Response`
65
+
66
+ ### More control
67
+
68
+ If you need more control over the request, you can access the HTTP client instance represented
69
+ by your adapter in a block:
70
+
71
+ HTTPI.post request do |http|
72
+ http.use_ssl = true # Curb example
73
+ end
74
+
75
+ ### TODO
76
+
77
+ * Add support for HEAD, PUT and DELETE requests
78
+
79
+ HTTPI::Request
80
+ --------------
81
+
82
+ The `HTTPI::Request` serves as a common denominator of options that HTTPI adapters need to support.
83
+ It represents an HTTP request and lets you customize various settings through these accessors:
84
+
85
+ #url # the URL to access
86
+ #proxy # the proxy server to use
87
+ #headers # a Hash of HTTP headers
88
+ #body # the HTTP request body
89
+ #open_timeout # the open timeout (sec)
90
+ #read_timeout # the read timeout (sec)
91
+
92
+ It also contains methods for setting up authentication:
93
+
94
+ #basic_auth(username, password) # HTTP basic auth credentials
95
+
96
+ ### TODO
97
+
98
+ * Add support for HTTP digest authentication
99
+ * Add support for SSL client authentication
100
+
101
+ HTTPI::Adapter
102
+ --------------
103
+
104
+ HTTPI uses adapters to support multiple HTTP libraries.
105
+ It currently contains adapters for:
106
+
107
+ * [httpclient](http://rubygems.org/gems/httpclient) ~> 2.1.5
108
+ * [curb](http://rubygems.org/gems/curb) ~> 0.7.8
109
+
110
+ By default, HTTPI uses the `HTTPClient`. But changing the default is fairly easy:
111
+
112
+ HTTPI::Adapter.use = :curb
113
+
114
+ You can find a list of supported adapters via:
115
+
116
+ HTTPI::Adapter.adapters # returns a Hash of supported adapters
117
+
118
+ HTTPI::Response
119
+ ---------------
120
+
121
+ As mentioned before, every request method return an `HTTPI::Response`.
122
+ It contains the response code, headers and body.
123
+
124
+ response = HTTPI.get request
125
+
126
+ response.code # => 200
127
+ response.headers # => { "Content-Encoding" => "gzip" }
128
+ response.body # => "<!DOCTYPE HTML PUBLIC ..."
129
+
130
+ ### TODO
131
+
132
+ * Return the original `HTTPI::Request` for debugging purposes
133
+ * Return the time it took to execute the request
134
+
135
+ Participate
136
+ -----------
137
+
138
+ We appreciate any help and feedback, so please get in touch!
data/Rakefile CHANGED
@@ -4,7 +4,7 @@ begin
4
4
  require "yard"
5
5
 
6
6
  YARD::Rake::YardocTask.new do |t|
7
- t.files = ["README.rdoc", "lib/**/*.rb"]
7
+ t.files = ["README.md", "lib/**/*.rb"]
8
8
  end
9
9
  rescue LoadError
10
10
  desc message = %{"gem install yard" to generate documentation}
@@ -17,6 +17,7 @@ begin
17
17
  MetricFu::Configuration.run do |c|
18
18
  c.metrics = [:churn, :flog, :flay, :reek, :roodi, :saikuro] # :rcov seems to be broken
19
19
  c.graphs = [:flog, :flay, :reek, :roodi]
20
+ c.flay = { :dirs_to_flay => ["lib"], :minimum_score => 20 }
20
21
  c.rcov[:rcov_opts] << "-Ilib -Ispec"
21
22
  end
22
23
  rescue LoadError
data/lib/httpi.rb CHANGED
@@ -1,2 +1,98 @@
1
1
  require "httpi/version"
2
- require "httpi/client"
2
+ require "httpi/request"
3
+ require "httpi/adapter"
4
+
5
+ # = HTTPI
6
+ #
7
+ # Executes HTTP requests using a predefined adapter.
8
+ module HTTPI
9
+ class << self
10
+
11
+ # Executes an HTTP GET request and returns an <tt>HTTPI::Response</tt>.
12
+ #
13
+ # ==== Example
14
+ #
15
+ # Accepts an <tt>HTTPI::Request</tt> and an optional adapter:
16
+ #
17
+ # request = HTTPI::Request.new :url => "http://example.com"
18
+ # HTTPI.get request, :httpclient
19
+ #
20
+ # ==== Shortcut
21
+ #
22
+ # You can also just pass a URL and an optional adapter if you don't
23
+ # need to configure the request:
24
+ #
25
+ # HTTPI.get "http://example.com", :curb
26
+ #
27
+ # ==== More control
28
+ #
29
+ # If you need more control over the request, you can access the HTTP
30
+ # client instance represented by your adapter in a block.
31
+ #
32
+ # HTTPI.get request do |http|
33
+ # http.follow_redirect_count = 3 # HTTPClient example
34
+ # end
35
+ def get(request, adapter = nil)
36
+ request = Request.new :url => request if request.kind_of? String
37
+
38
+ with adapter do |adapter|
39
+ yield adapter.client if block_given?
40
+ adapter.get request
41
+ end
42
+ end
43
+
44
+ # Executes an HTTP POST request and returns an <tt>HTTPI::Response</tt>.
45
+ #
46
+ # ==== Example
47
+ #
48
+ # Accepts an <tt>HTTPI::Request</tt> and an optional adapter:
49
+ #
50
+ # request = HTTPI::Request.new
51
+ # request.url = "http://example.com"
52
+ # request.body = "<some>xml</some>"
53
+ #
54
+ # HTTPI.post request, :httpclient
55
+ #
56
+ # ==== Shortcut
57
+ #
58
+ # You can also just pass a URL, a request body and an optional adapter
59
+ # if you don't need to configure the request:
60
+ #
61
+ # HTTPI.post "http://example.com", "<some>xml</some>", :curb
62
+ #
63
+ # ==== More control
64
+ #
65
+ # If you need more control over the request, you can access the HTTP
66
+ # client instance represented by your adapter in a block.
67
+ #
68
+ # HTTPI.post request do |http|
69
+ # http.use_ssl = true # Curb example
70
+ # end
71
+ def post(*args)
72
+ request, adapter = extract_post_args(args)
73
+
74
+ with adapter do |adapter|
75
+ yield adapter.client if block_given?
76
+ adapter.post request
77
+ end
78
+ end
79
+
80
+ private
81
+
82
+ # Checks whether +args+ contains of an <tt>HTTPI::Request</tt> or a URL
83
+ # and a request body plus an optional adapter and returns an Array with
84
+ # an <tt>HTTPI::Request</tt> and (if given) an adapter.
85
+ def extract_post_args(args)
86
+ return args if args[0].kind_of? Request
87
+ [Request.new(:url => args[0], :body => args[1]), args[2]]
88
+ end
89
+
90
+ # Accepts an +adapter+ (defaults to <tt>Adapter.use</tt>) and yields a
91
+ # new instance of the adapter to a given block.
92
+ def with(adapter)
93
+ adapter ||= Adapter.use
94
+ yield Adapter.find(adapter).new
95
+ end
96
+
97
+ end
98
+ end
data/lib/httpi/adapter.rb CHANGED
@@ -2,9 +2,16 @@ require "httpi/adapter/httpclient"
2
2
  require "httpi/adapter/curb"
3
3
 
4
4
  module HTTPI
5
+
6
+ # = HTTPI::Adapter
7
+ #
8
+ # Manages the adapter classes. Currently supports:
9
+ #
10
+ # * httpclient
11
+ # * curb
5
12
  module Adapter
6
13
 
7
- # The def self.ault adapter.
14
+ # The default adapter.
8
15
  DEFAULT = :httpclient
9
16
 
10
17
  # Returns the adapter to use. Defaults to <tt>HTTPI::Adapter::DEFAULT</tt>.
@@ -2,12 +2,21 @@ require "httpi/response"
2
2
 
3
3
  module HTTPI
4
4
  module Adapter
5
+
6
+ # = HTTPI::Adapter::Curb
7
+ #
8
+ # Adapter for the Curb client.
9
+ # http://rubygems.org/gems/curb
5
10
  class Curb
6
11
 
7
12
  def initialize
8
13
  require "curb"
9
14
  end
10
15
 
16
+ def client
17
+ @client ||= Curl::Easy.new
18
+ end
19
+
11
20
  def get(request)
12
21
  get_request(request) { |client| client.http_get }
13
22
  end
@@ -19,27 +28,25 @@ module HTTPI
19
28
  private
20
29
 
21
30
  def get_request(request)
22
- client = client_for request
31
+ setup_client request
23
32
  yield client
24
33
  respond_with client
25
34
  end
26
35
 
27
36
  def post_request(request)
28
- request.url = request.url.to_s
29
- request.url.gsub!('?wsdl', '') if request.url =~ /\?wsdl$/
37
+ request.url.query = nil if request.url.query == "wsdl"
30
38
 
31
- client = client_for request
39
+ setup_client request
32
40
  yield client, request.body
33
41
  respond_with client
34
42
  end
35
43
 
36
- def client_for(request)
37
- client = Curl::Easy.new request.url.to_s
44
+ def setup_client(request)
45
+ client.url = request.url.to_s
38
46
  client.timeout = request.read_timeout
39
47
  client.connect_timeout = request.open_timeout
40
48
  client.headers = request.headers
41
49
  client.verbose = false
42
- client
43
50
  end
44
51
 
45
52
  def respond_with(client)
@@ -2,12 +2,21 @@ require "httpi/response"
2
2
 
3
3
  module HTTPI
4
4
  module Adapter
5
+
6
+ # = HTTPI::Adapter::HTTPClient
7
+ #
8
+ # Adapter for the HTTPClient client.
9
+ # http://rubygems.org/gems/httpclient
5
10
  class HTTPClient
6
11
 
7
12
  def initialize
8
13
  require "httpclient"
9
14
  end
10
15
 
16
+ def client
17
+ @client ||= ::HTTPClient.new
18
+ end
19
+
11
20
  def get(request)
12
21
  get_request request do |client, url, headers|
13
22
  client.get url, nil, headers
@@ -23,21 +32,19 @@ module HTTPI
23
32
  private
24
33
 
25
34
  def get_request(request)
26
- client = client_for request
35
+ setup_client request
27
36
  respond_with yield(client, request.url, request.headers)
28
37
  end
29
38
 
30
39
  def post_request(request)
31
- client = client_for request
40
+ setup_client request
32
41
  respond_with yield(client, request.url, request.headers, request.body)
33
42
  end
34
43
 
35
- def client_for(request)
36
- client = ::HTTPClient.new
44
+ def setup_client(request)
37
45
  client.proxy = request.proxy if request.proxy
38
46
  client.connect_timeout = request.open_timeout
39
47
  client.receive_timeout = request.read_timeout
40
- client
41
48
  end
42
49
 
43
50
  def respond_with(response)
data/lib/httpi/request.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  require "uri"
2
2
 
3
3
  module HTTPI
4
+
5
+ # = HTTPI::Request
6
+ #
7
+ # Represents an HTTP request and contains various methods for customizing that request.
4
8
  class Request
5
9
 
6
10
  # Request accessor methods.
@@ -2,6 +2,10 @@ require "zlib"
2
2
  require "stringio"
3
3
 
4
4
  module HTTPI
5
+
6
+ # = HTTPI::Response
7
+ #
8
+ # Represents an HTTP response and contains various response details.
5
9
  class Response
6
10
 
7
11
  # Range of HTTP response codes considered to be successful.
data/lib/httpi/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module HTTPI
2
2
 
3
- VERSION = "0.2.0"
3
+ VERSION = "0.3.0"
4
4
 
5
5
  end
@@ -1,8 +1,8 @@
1
1
  require "spec_helper"
2
2
  require "httpi"
3
3
 
4
- describe HTTPI::Client do
5
- let(:client) { HTTPI::Client }
4
+ describe HTTPI do
5
+ let(:client) { HTTPI }
6
6
  let(:default_adapter) { HTTPI::Adapter.find HTTPI::Adapter.use }
7
7
  let(:curb) { HTTPI::Adapter.find :curb }
8
8
 
@@ -43,6 +43,14 @@ describe HTTPI::Client do
43
43
  end
44
44
 
45
45
  describe ".get" do
46
+ context "(with a block)" do
47
+ it "should yield the HTTP client instance used for the request" do
48
+ client.get "http://example.com" do |http|
49
+ http.should be_an(HTTPClient)
50
+ end
51
+ end
52
+ end
53
+
46
54
  it "should raise an ArgumentError in case of an invalid adapter" do
47
55
  lambda { client.get HTTPI::Request.new, :invalid }.should raise_error(ArgumentError)
48
56
  end
@@ -91,6 +99,14 @@ describe HTTPI::Client do
91
99
  end
92
100
 
93
101
  describe ".post" do
102
+ context "(with a block)" do
103
+ it "should yield the HTTP client instance used for the request" do
104
+ client.get "http://example.com", :curb do |http|
105
+ http.should be_a(Curl::Easy)
106
+ end
107
+ end
108
+ end
109
+
94
110
  it "should raise an ArgumentError in case of an invalid adapter" do
95
111
  lambda { client.post HTTPI::Request.new, :invalid }.should raise_error(ArgumentError)
96
112
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: httpi
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 2
8
+ - 3
9
9
  - 0
10
- version: 0.2.0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Daniel Harrington
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-09-23 00:00:00 +02:00
19
+ date: 2010-09-24 00:00:00 +02:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -97,12 +97,12 @@ files:
97
97
  - Gemfile
98
98
  - Gemfile.lock
99
99
  - Rakefile
100
- - README.rdoc
100
+ - README.md
101
+ - .rspec
101
102
  - autotest/discover.rb
102
103
  - lib/httpi/adapter/curb.rb
103
104
  - lib/httpi/adapter/httpclient.rb
104
105
  - lib/httpi/adapter.rb
105
- - lib/httpi/client.rb
106
106
  - lib/httpi/request.rb
107
107
  - lib/httpi/response.rb
108
108
  - lib/httpi/version.rb
@@ -112,13 +112,12 @@ files:
112
112
  - spec/httpi/adapter/curb_spec.rb
113
113
  - spec/httpi/adapter/httpclient_spec.rb
114
114
  - spec/httpi/adapter_spec.rb
115
- - spec/httpi/client_spec.rb
115
+ - spec/httpi/httpi_spec.rb
116
116
  - spec/httpi/request_spec.rb
117
117
  - spec/httpi/response_spec.rb
118
118
  - spec/spec_helper.rb
119
119
  - spec/support/fixture.rb
120
120
  - spec/support/matchers.rb
121
- - .rspec
122
121
  has_rdoc: true
123
122
  homepage: http://github.com/rubiii/httpi
124
123
  licenses: []
@@ -152,6 +151,6 @@ rubyforge_project: httpi
152
151
  rubygems_version: 1.3.7
153
152
  signing_key:
154
153
  specification_version: 3
155
- summary: Common interface for Ruby HTTP libraries
154
+ summary: Interface for Ruby HTTP libraries
156
155
  test_files: []
157
156
 
data/README.rdoc DELETED
@@ -1,114 +0,0 @@
1
- = HTTPI
2
-
3
- HTTPI provides a common interface for Ruby HTTP libraries.
4
-
5
- == Installation
6
-
7
- The gem is available through {Rubygems}[http://rubygems.org/gems/httpi] and can be installed via:
8
-
9
- $ gem install httpi
10
-
11
- == Basic examples
12
-
13
- Let's create the most basic request object and execute a GET request:
14
-
15
- request = HTTPI::Request.new :url => "http://example.com"
16
- HTTPI::Client.get request
17
-
18
- And a POST request with a request object:
19
-
20
- request = HTTPI::Request.new
21
- request.url = "http://post.example.com"
22
- request.body = "send me"
23
-
24
- HTTPI::Client.post request
25
-
26
- Or a GET request using HTTP basic auth and the Curb adapter:
27
-
28
- request = HTTPI::Request.new
29
- request.url = "http://auth.example.com"
30
- request.basic_auth "username", "password"
31
-
32
- HTTPI::Client.get request, :curb
33
-
34
- HTTPI also comes with some shortcuts. This executes a GET request:
35
-
36
- HTTPI::Client.get "http://example.com"
37
-
38
- And here's a POST:
39
-
40
- HTTPI::Client.post "http://example.com", "<some>xml</some>"
41
-
42
- == HTTPI::Request
43
-
44
- The HTTPI::Request serves as a common denominator of options that HTTPI adapters need to support. It represents an HTTP request and lets you customize various settings:
45
-
46
- * [url] the URL to access
47
- * [proxy] the proxy server to use
48
- * [headers] a Hash of HTTP headers
49
- * [body] the HTTP request body
50
- * [open_timeout] the open timeout (sec)
51
- * [read_timeout] the read timeout (sec)
52
-
53
- It also contains methods for setting up authentication:
54
-
55
- * [basic_auth] HTTP basic auth credentials
56
-
57
- ==== TODO:
58
-
59
- * Add support for HTTP digest authentication
60
- * Add support for SSL client authentication
61
-
62
- == HTTPI::Client
63
-
64
- The HTTPI::Client uses one of the available adapters to execute HTTP requests. It currently supports GET and POST requests:
65
-
66
- === GET
67
-
68
- * get(request, adapter = nil)
69
- * get(url, adapter = nil)
70
-
71
- === POST
72
-
73
- * post(request, adapter = nil)
74
- * post(url, body, adapter = nil)
75
-
76
- You can specify the adapter to use per request. Request methods always returns an HTTPI::Response.
77
-
78
- ==== TODO:
79
-
80
- * Add support for HEAD, PUT and DELETE requests
81
-
82
- == HTTPI::Adapter
83
-
84
- HTTPI uses adapters to support multiple HTTP libraries. It currently contains adapters for:
85
-
86
- * {httpclient}[http://rubygems.org/gems/httpclient] ~> 2.1.5
87
- * {curb}[http://rubygems.org/gems/curb] ~> 0.7.8
88
-
89
- By default, HTTPI uses the HTTPClient. But changing the default is fairly easy:
90
-
91
- HTTPI::Adapter.use = :curb
92
-
93
- You can find a list of supported adapters via:
94
-
95
- HTTPI::Adapter.adapters # returns a Hash of supported adapters
96
-
97
- == HTTPI::Response
98
-
99
- As mentioned before, every request method return an HTTPI::Response. It contains the response code, headers and body.
100
-
101
- response = HTTPI::Client.get request
102
-
103
- response.code # => 200
104
- response.headers # => { "Content-Encoding" => "gzip" }
105
- response.body # => "<!DOCTYPE HTML PUBLIC ..."
106
-
107
- ==== TODO
108
-
109
- * Return the original HTTPI::Request for debugging purposes
110
- * Return the time it took to execute the request
111
-
112
- == Participate
113
-
114
- We appreciate any help and feedback, so please get in touch!
data/lib/httpi/client.rb DELETED
@@ -1,70 +0,0 @@
1
- require "httpi/request"
2
- require "httpi/adapter"
3
-
4
- module HTTPI
5
- class Client
6
- class << self
7
-
8
- # Executes an HTTP GET request and returns an <tt>HTTPI::Response</tt>.
9
- #
10
- # ==== Example
11
- #
12
- # Accepts an <tt>HTTPI::Request</tt> and an optional adapter:
13
- #
14
- # request = HTTPI::Request.new :url => "http://example.com"
15
- # HTTPI::Client.get request, :httpclient
16
- #
17
- # ==== Shortcut
18
- #
19
- # You can also just pass a URL and an optional adapter if you don't
20
- # need to configure the request:
21
- #
22
- # HTTPI::Client.get "http://example.com", :curb
23
- def get(request, adapter = nil)
24
- request = Request.new :url => request if request.kind_of? String
25
- find_adapter(adapter).get request
26
- end
27
-
28
- # Executes an HTTP POST request and returns an <tt>HTTPI::Response</tt>.
29
- #
30
- # ==== Example
31
- #
32
- # Accepts an <tt>HTTPI::Request</tt> and an optional adapter:
33
- #
34
- # request = HTTPI::Request.new
35
- # request.url = "http://example.com"
36
- # request.body = "<some>xml</some>"
37
- #
38
- # HTTPI::Client.post request, :httpclient
39
- #
40
- # ==== Shortcut
41
- #
42
- # You can also just pass a URL, a request body and an optional adapter
43
- # if you don't need to configure the request:
44
- #
45
- # HTTPI::Client.post "http://example.com", "<some>xml</some>", :curb
46
- def post(*args)
47
- request, adapter = extract_post_args(args)
48
- find_adapter(adapter).post request
49
- end
50
-
51
- private
52
-
53
- # Checks whether +args+ contains of an <tt>HTTPI::Request</tt> or a URL
54
- # and a request body plus an optional adapter and returns an Array with
55
- # an <tt>HTTPI::Request</tt> and (if given) an adapter.
56
- def extract_post_args(args)
57
- return args if args.first.kind_of? Request
58
- [Request.new(:url => args[0], :body => args[1]), args[2]]
59
- end
60
-
61
- # Accepts an +adapter+ (defaults to <tt>Adapter.use</tt>) and returns
62
- # a new instance of the adapter to use.
63
- def find_adapter(adapter)
64
- adapter ||= Adapter.use
65
- Adapter.find(adapter).new
66
- end
67
-
68
- end
69
- end
70
- end