excon 0.9.4 → 0.9.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of excon might be problematic. Click here for more details.

data/Gemfile CHANGED
@@ -2,6 +2,8 @@ source "http://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
+ gem 'jruby-openssl', :platform => :jruby
6
+
5
7
  group :benchmark do
6
8
  gem 'em-http-request'
7
9
  gem 'httparty'
@@ -1,23 +1,26 @@
1
- = excon
1
+ excon
2
+ =====
2
3
 
3
4
  Http(s) EXtended CONnections
4
5
 
5
- {<img src="https://secure.travis-ci.org/geemus/excon.png" />}[http://travis-ci.org/geemus/excon]
6
+ [![Build Status](https://secure.travis-ci.org/geemus/excon.png)](http://travis-ci.org/geemus/excon)
7
+ [![Dependency Status](https://gemnasium.com/geemus/excon.png)](https://gemnasium.com/geemus/excon)
6
8
 
7
- == Getting Started
9
+ Getting Started
10
+ ---------------
8
11
 
9
12
  Install the gem.
10
13
 
11
- $ sudo gem install excon
14
+ $ sudo gem install excon
12
15
 
13
16
  Require with rubygems.
14
17
 
15
- require 'rubygems'
16
- require 'excon'
18
+ require 'rubygems'
19
+ require 'excon'
17
20
 
18
21
  The simplest way to use excon is with one-off requests:
19
22
 
20
- response = Excon.get('http://geemus.com')
23
+ response = Excon.get('http://geemus.com')
21
24
 
22
25
  Supported one-off request methods are #connect, #delete, #get, #head, #options, #post, #put, and #trace.
23
26
 
@@ -25,97 +28,102 @@ The returned response object has #body, #headers and #status attributes.
25
28
 
26
29
  Alternately you can create a connection object which is reusable across multiple requests (more performant!).
27
30
 
28
- connection = Excon.new('http://geemus.com')
29
- response_one = connection.get
30
- response_two = connection.post(:path => '/foo')
31
- response_three = connection.delete(:path => '/bar')
31
+ connection = Excon.new('http://geemus.com')
32
+ response_one = connection.get
33
+ response_two = connection.post(:path => '/foo')
34
+ response_three = connection.delete(:path => '/bar')
32
35
 
33
36
  Sometimes it is more convenient to specify the request type as an argument:
34
37
 
35
- response_four = connection.request(:method => :get, :path => '/more')
38
+ response_four = connection.request(:method => :get, :path => '/more')
36
39
 
37
40
  Both one-off and persistent connections support many other options. Here are a few common examples:
38
41
 
39
- # Custom headers
40
- Excon.get('http://geemus.com', :headers => {'Authorization' => 'Basic 0123456789ABCDEF'})
41
- connection.get(:headers => {'Authorization' => 'Basic 0123456789ABCDEF'})
42
+ # Custom headers
43
+ Excon.get('http://geemus.com', :headers => {'Authorization' => 'Basic 0123456789ABCDEF'})
44
+ connection.get(:headers => {'Authorization' => 'Basic 0123456789ABCDEF'})
42
45
 
43
- # Changing query strings
44
- connection = Excon.new('http://geemus.com/')
45
- connection.get(:query => {:foo => 'bar'})
46
+ # Changing query strings
47
+ connection = Excon.new('http://geemus.com/')
48
+ connection.get(:query => {:foo => 'bar'})
46
49
 
47
- # POST body
48
- Excon.post('http://geemus.com', :body => 'language=ruby&class=fog')
50
+ # POST body
51
+ Excon.post('http://geemus.com', :body => 'language=ruby&class=fog')
49
52
 
50
- # request accepts either symbols or strings
51
- connection.request(:method => :get)
52
- connection.request(:method => 'GET')
53
+ # request accepts either symbols or strings
54
+ connection.request(:method => :get)
55
+ connection.request(:method => 'GET')
53
56
 
54
57
  These options can be combined to make pretty much any request you might need.
55
58
 
56
- == Streaming Responses
59
+ Streaming Responses
60
+ -------------------
57
61
 
58
62
  You can stream responses by passing a block that will receive each chunk.
59
63
 
60
- Excon.get('http://geemus.com') do |chunk, remaining_bytes, total_bytes|
61
- puts chunk
62
- puts "Remaining: #{remaining_bytes.to_f / total_bytes}%"
63
- end
64
+ Excon.get('http://geemus.com') do |chunk, remaining_bytes, total_bytes|
65
+ puts chunk
66
+ puts "Remaining: #{remaining_bytes.to_f / total_bytes}%"
67
+ end
64
68
 
65
69
  Iterating over each chunk will allow you to do work on the response incrementally without buffering the entire response first. For very large responses this can lead to significant memory savings.
66
70
 
67
- == Proxy Support
71
+ Proxy Support
72
+ -------------
68
73
 
69
74
  You can specify a proxy URL that Excon will use with both HTTP and HTTPS connections:
70
75
 
71
- connection = Excon.new('http://geemus.com', :proxy => 'http://my.proxy:3128')
72
- connection.request(:method => 'GET')
76
+ connection = Excon.new('http://geemus.com', :proxy => 'http://my.proxy:3128')
77
+ connection.request(:method => 'GET')
73
78
 
74
79
  The proxy URL must be fully specified, including scheme (e.g. "http://") and port.
75
80
 
76
81
  Proxy support must be set when establishing a connection object and cannot be overridden in individual requests. Because of this it is unavailable in one-off requests (Excon.get, etc.)
77
82
 
78
- NOTE: Excon will use the environment variables "http_proxy" and "https_proxy" if they are present. If these variables are set they will take precedence over a :proxy option specified in code. If "https_proxy" is not set, the value of "http_proxy" will be used for both HTTP and HTTPS connections.
83
+ NOTE: Excon will use the environment variables `http_proxy` and `https_proxy` if they are present. If these variables are set they will take precedence over a :proxy option specified in code. If "https_proxy" is not set, the value of "http_proxy" will be used for both HTTP and HTTPS connections.
79
84
 
80
- == Stubs
85
+ Stubs
86
+ -----
81
87
 
82
88
  You can stub out requests for testing purposes by enabling mock mode on a connection.
83
89
 
84
- connection = Excon.new('http://example.com', :mock => true)
90
+ connection = Excon.new('http://example.com', :mock => true)
85
91
 
86
92
  Or by enabling mock mode for a request.
87
93
 
88
- connection.request(:method => :get, :path => 'example', :mock => true)
94
+ connection.request(:method => :get, :path => 'example', :mock => true)
89
95
 
90
96
  Then you can add stubs, for instance:
91
97
 
92
- # Excon.stub(request_attributes, response_attributes)
93
- Excon.stub({:method => :get}, {:body => 'body', :status => 200})
98
+ # Excon.stub(request_attributes, response_attributes)
99
+ Excon.stub({:method => :get}, {:body => 'body', :status => 200})
94
100
 
95
101
  Omitted attributes are assumed to match, so this stub will match any get request and return an Excon::Response with a body of 'body' and status of 200. You can add whatever stubs you might like this way and they will be checked against in the order they were added, if none of them match then excon will raise an error to let you know.
96
102
 
97
- Alternatively you can pass a block instead of response_attributes and it will be called with the request params. For example, you could create a stub that echoes the body given to it like this:
103
+ Alternatively you can pass a block instead of `response_attributes` and it will be called with the request params. For example, you could create a stub that echoes the body given to it like this:
98
104
 
99
- # Excon.stub(request_attributes, &response_block)
100
- Excon.stub({:method => :put}) do |params|
101
- {:body => params[:body], :status => 200}
102
- end
105
+ # Excon.stub(request_attributes, &response_block)
106
+ Excon.stub({:method => :put}) do |params|
107
+ {:body => params[:body], :status => 200}
108
+ end
103
109
 
104
- == HTTPS/SSL Issues
110
+ HTTPS/SSL Issues
111
+ ----------------
105
112
 
106
- By default excon will try to verify peer certificates when using SSL for HTTPS. Unfortunately on some operating systems the defaults will not work. This will likely manifest itself as something like "Excon::Errors::SocketError: SSL_connect returned=1 ..."
113
+ By default excon will try to verify peer certificates when using SSL for HTTPS. Unfortunately on some operating systems the defaults will not work. This will likely manifest itself as something like `Excon::Errors::SocketError: SSL_connect returned=1 ...`
107
114
 
108
115
  If you have the misfortune of running into this problem you have a couple options. If you have certificates but they aren't being auto-discovered, you can specify the path to your certificates:
109
116
 
110
- Excon.ssl_ca_path = '/path/to/certs'
117
+ Excon.ssl_ca_path = '/path/to/certs'
111
118
 
112
119
  Failing that, you can turn off peer verification (less secure):
113
120
 
114
- Excon.ssl_verify_peer = false
121
+ Excon.ssl_verify_peer = false
115
122
 
116
123
  Either of these should allow you to work around the socket error and continue with your work.
117
124
 
118
- == Copyright
125
+ Copyright
126
+ ---------
119
127
 
120
128
  (The MIT License)
121
129
 
@@ -1,3 +1,10 @@
1
+ 0.9.5 01/16/12
2
+ ==============
3
+
4
+ * fix getaddrinfo usage for rbx
5
+ * fix mock handling when a block in passed
6
+ * add jruby to ci
7
+
1
8
  0.9.4 12/21/11
2
9
  ==============
3
10
 
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
13
13
  ## If your rubyforge_project name is different, then edit it and comment out
14
14
  ## the sub! line in the Rakefile
15
15
  s.name = 'excon'
16
- s.version = '0.9.4'
17
- s.date = '2011-12-21'
16
+ s.version = '0.9.5'
17
+ s.date = '2012-01-16'
18
18
  s.rubyforge_project = 'excon'
19
19
 
20
20
  ## Make sure your summary is short. The description may be as long
@@ -44,7 +44,7 @@ Gem::Specification.new do |s|
44
44
  ## Specify any RDoc options here. You'll want to add your README and
45
45
  ## LICENSE files to the extra_rdoc_files list.
46
46
  s.rdoc_options = ["--charset=UTF-8"]
47
- s.extra_rdoc_files = %w[README.rdoc]
47
+ s.extra_rdoc_files = %w[README.md]
48
48
 
49
49
  ## List your runtime dependencies here. Runtime dependencies are those
50
50
  ## that are needed for an end user to actually USE your code.
@@ -58,7 +58,7 @@ Gem::Specification.new do |s|
58
58
  s.add_development_dependency('open4')
59
59
  s.add_development_dependency('rake')
60
60
  s.add_development_dependency('rdoc')
61
- s.add_development_dependency('shindo', '0.2.0')
61
+ s.add_development_dependency('shindo')
62
62
  s.add_development_dependency('sinatra')
63
63
 
64
64
  ## Leave this section as-is. It will be automatically generated from the
@@ -67,7 +67,7 @@ Gem::Specification.new do |s|
67
67
  # = MANIFEST =
68
68
  s.files = %w[
69
69
  Gemfile
70
- README.rdoc
70
+ README.md
71
71
  Rakefile
72
72
  benchmarks/class_vs_lambda.rb
73
73
  benchmarks/concat_vs_insert.rb
@@ -236,6 +236,7 @@ module Excon
236
236
  end
237
237
 
238
238
  def invoke_stub(params)
239
+ block_given = block_given?
239
240
  params[:captures] = {:headers => {}} # setup data to hold captures
240
241
  for stub, response in Excon.stubs
241
242
  headers_match = !stub.has_key?(:headers) || stub[:headers].keys.all? do |key|
@@ -267,7 +268,13 @@ module Excon
267
268
  else
268
269
  response
269
270
  end
270
- if block_given? && response_attributes.has_key?(:body)
271
+
272
+ # don't pass stuff into a block if there was an error
273
+ if params[:expects] && ![*params[:expects]].include?(response_attributes[:status])
274
+ block_given = false
275
+ end
276
+
277
+ if block_given && response_attributes.has_key?(:body)
271
278
  body = response_attributes.delete(:body)
272
279
  content_length = remaining = body.bytesize
273
280
  i = 0
@@ -1,6 +1,6 @@
1
1
  module Excon
2
2
  unless const_defined?(:VERSION)
3
- VERSION = '0.9.4'
3
+ VERSION = '0.9.5'
4
4
  end
5
5
 
6
6
  unless const_defined?(:CHUNK_SIZE)
@@ -21,9 +21,9 @@ module Excon
21
21
  exception = nil
22
22
 
23
23
  addrinfo = if @proxy
24
- ::Socket.getaddrinfo(@proxy[:host], @proxy[:port].to_i, nil, ::Socket::Constants::SOCK_STREAM)
24
+ ::Socket.getaddrinfo(@proxy[:host], @proxy[:port].to_i, ::Socket::Constants::AF_UNSPEC, ::Socket::Constants::SOCK_STREAM)
25
25
  else
26
- ::Socket.getaddrinfo(@params[:host], @params[:port].to_i, nil, ::Socket::Constants::SOCK_STREAM)
26
+ ::Socket.getaddrinfo(@params[:host], @params[:port].to_i, ::Socket::Constants::AF_UNSPEC, ::Socket::Constants::SOCK_STREAM)
27
27
  end
28
28
 
29
29
  addrinfo.each do |_, port, _, ip, a_family, s_type|
@@ -1,7 +1,5 @@
1
1
  require 'sinatra'
2
2
 
3
- require 'rack/head' # workaround for rbx thread safety issue (most likely autoload related)
4
-
5
3
  class App < Sinatra::Base
6
4
  get('/id/:id/wait/:wait') do |id, wait|
7
5
  sleep(wait.to_i)
@@ -9,4 +7,7 @@ class App < Sinatra::Base
9
7
  end
10
8
  end
11
9
 
10
+ # get everything autoloaded, mainly for rbx
11
+ App.new
12
+
12
13
  run App
@@ -125,15 +125,26 @@ Shindo.tests('Excon stubs') do
125
125
 
126
126
  Excon.stubs.clear
127
127
 
128
- tests("stub({}, {:status => 404}") do
128
+ tests("stub({}, {:status => 404, :body => 'Not Found'}") do
129
129
 
130
130
  connection = Excon.new('http://127.0.0.1:9292', :mock => true)
131
- Excon.stub({}, {:status => 404})
131
+ Excon.stub({}, {:status => 404, :body => 'Not Found'})
132
132
 
133
133
  tests("request(:expects => 200, :method => :get, :path => '/')").raises(Excon::Errors::NotFound) do
134
134
  connection.request(:expects => 200, :method => :get, :path => '/')
135
135
  end
136
136
 
137
+ test("request(:expects => 200, :method => :get, :path => '/') with block does not invoke the block since it raises an error") do
138
+ block_called = false
139
+ begin
140
+ connection.request(:expects => 200, :method => :get, :path => '/') do |_, _, _|
141
+ block_called = true
142
+ end
143
+ rescue Excon::Errors::NotFound
144
+ end
145
+ !block_called
146
+ end
147
+
137
148
  Excon.stubs.clear
138
149
 
139
150
  end
@@ -54,7 +54,7 @@ def basic_tests(url = 'http://127.0.0.1:9292')
54
54
  tests('POST /body-sink') do
55
55
 
56
56
  connection = Excon.new(url)
57
- response = connection.request(:method => :post, :path => '/body-sink', :body => 'x' * 5_000_000)
57
+ response = connection.request(:method => :post, :path => '/body-sink', :headers => { 'Content-Type' => 'text/plain' }, :body => 'x' * 5_000_000)
58
58
 
59
59
  tests('response.body').returns("5000000") do
60
60
  response.body
@@ -67,13 +67,20 @@ def rackup_path(*parts)
67
67
  end
68
68
 
69
69
  def with_rackup(name)
70
- GC.disable
71
- pid, w, r, e = Open4.popen4("rackup #{rackup_path(name)}")
70
+ unless RUBY_PLATFORM == 'java'
71
+ GC.disable
72
+ pid, w, r, e = Open4.popen4("rackup", rackup_path(name))
73
+ else
74
+ pid, w, r, e = IO.popen4("rackup", rackup_path(name))
75
+ end
72
76
  until e.gets =~ /HTTPServer#start:/; end
73
77
  yield
74
78
  ensure
75
- GC.enable
76
79
  Process.kill(9, pid)
80
+ unless RUBY_PLATFORM == 'java'
81
+ GC.enable
82
+ Process.wait(pid)
83
+ end
77
84
  end
78
85
 
79
86
  def server_path(*parts)
@@ -81,11 +88,18 @@ def server_path(*parts)
81
88
  end
82
89
 
83
90
  def with_server(name)
84
- GC.disable
85
- pid, w, r, e = Open4.popen4(server_path("#{name}.rb"))
91
+ unless RUBY_PLATFORM == 'java'
92
+ GC.disable
93
+ pid, w, r, e = Open4.popen4(server_path("#{name}.rb"))
94
+ else
95
+ pid, w, r, e = IO.popen4(server_path("#{name}.rb"))
96
+ end
86
97
  until e.gets =~ /ready/; end
87
98
  yield
88
99
  ensure
89
- GC.enable
90
100
  Process.kill(9, pid)
101
+ unless RUBY_PLATFORM == 'java'
102
+ GC.enable
103
+ Process.wait(pid)
104
+ end
91
105
  end
metadata CHANGED
@@ -1,123 +1,104 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: excon
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 9
8
- - 4
9
- version: 0.9.4
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.5
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - dpiddy (Dan Peterson)
13
9
  - geemus (Wesley Beary)
14
10
  - nextmat (Matt Sanders)
15
11
  autorequire:
16
12
  bindir: bin
17
13
  cert_chain: []
18
-
19
- date: 2011-12-21 00:00:00 -06:00
20
- default_executable:
21
- dependencies:
22
- - !ruby/object:Gem::Dependency
14
+ date: 2012-01-16 00:00:00.000000000Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
23
17
  name: activesupport
24
- prerelease: false
25
- requirement: &id001 !ruby/object:Gem::Requirement
26
- requirements:
18
+ requirement: &70238243324360 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
27
21
  - - ~>
28
- - !ruby/object:Gem::Version
29
- segments:
30
- - 3
31
- - 1
32
- - 3
22
+ - !ruby/object:Gem::Version
33
23
  version: 3.1.3
34
24
  type: :development
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: delorean
38
25
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- segments:
44
- - 0
45
- version: "0"
26
+ version_requirements: *70238243324360
27
+ - !ruby/object:Gem::Dependency
28
+ name: delorean
29
+ requirement: &70238243323780 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
46
35
  type: :development
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: open4
50
36
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- segments:
56
- - 0
57
- version: "0"
37
+ version_requirements: *70238243323780
38
+ - !ruby/object:Gem::Dependency
39
+ name: open4
40
+ requirement: &70238243322680 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
58
46
  type: :development
59
- version_requirements: *id003
60
- - !ruby/object:Gem::Dependency
61
- name: rake
62
47
  prerelease: false
63
- requirement: &id004 !ruby/object:Gem::Requirement
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- segments:
68
- - 0
69
- version: "0"
48
+ version_requirements: *70238243322680
49
+ - !ruby/object:Gem::Dependency
50
+ name: rake
51
+ requirement: &70238243322040 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
70
57
  type: :development
71
- version_requirements: *id004
72
- - !ruby/object:Gem::Dependency
73
- name: rdoc
74
58
  prerelease: false
75
- requirement: &id005 !ruby/object:Gem::Requirement
76
- requirements:
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- segments:
80
- - 0
81
- version: "0"
59
+ version_requirements: *70238243322040
60
+ - !ruby/object:Gem::Dependency
61
+ name: rdoc
62
+ requirement: &70238243321160 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
82
68
  type: :development
83
- version_requirements: *id005
84
- - !ruby/object:Gem::Dependency
85
- name: shindo
86
69
  prerelease: false
87
- requirement: &id006 !ruby/object:Gem::Requirement
88
- requirements:
89
- - - "="
90
- - !ruby/object:Gem::Version
91
- segments:
92
- - 0
93
- - 2
94
- - 0
95
- version: 0.2.0
70
+ version_requirements: *70238243321160
71
+ - !ruby/object:Gem::Dependency
72
+ name: shindo
73
+ requirement: &70238243320420 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
96
79
  type: :development
97
- version_requirements: *id006
98
- - !ruby/object:Gem::Dependency
99
- name: sinatra
100
80
  prerelease: false
101
- requirement: &id007 !ruby/object:Gem::Requirement
102
- requirements:
103
- - - ">="
104
- - !ruby/object:Gem::Version
105
- segments:
106
- - 0
107
- version: "0"
81
+ version_requirements: *70238243320420
82
+ - !ruby/object:Gem::Dependency
83
+ name: sinatra
84
+ requirement: &70238243319760 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
108
90
  type: :development
109
- version_requirements: *id007
91
+ prerelease: false
92
+ version_requirements: *70238243319760
110
93
  description: EXtended http(s) CONnections
111
94
  email: geemus@gmail.com
112
95
  executables: []
113
-
114
96
  extensions: []
115
-
116
- extra_rdoc_files:
117
- - README.rdoc
118
- files:
97
+ extra_rdoc_files:
98
+ - README.md
99
+ files:
119
100
  - Gemfile
120
- - README.rdoc
101
+ - README.md
121
102
  - Rakefile
122
103
  - benchmarks/class_vs_lambda.rb
123
104
  - benchmarks/concat_vs_insert.rb
@@ -164,35 +145,32 @@ files:
164
145
  - tests/stub_tests.rb
165
146
  - tests/test_helper.rb
166
147
  - tests/thread_safety_tests.rb
167
- has_rdoc: true
168
148
  homepage: https://github.com/geemus/excon
169
149
  licenses: []
170
-
171
150
  post_install_message:
172
- rdoc_options:
151
+ rdoc_options:
173
152
  - --charset=UTF-8
174
- require_paths:
153
+ require_paths:
175
154
  - lib
176
- required_ruby_version: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- segments:
181
- - 0
182
- version: "0"
183
- required_rubygems_version: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - ">="
186
- - !ruby/object:Gem::Version
187
- segments:
155
+ required_ruby_version: !ruby/object:Gem::Requirement
156
+ none: false
157
+ requirements:
158
+ - - ! '>='
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ segments:
188
162
  - 0
189
- version: "0"
163
+ hash: 1843710619352471147
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ none: false
166
+ requirements:
167
+ - - ! '>='
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
190
170
  requirements: []
191
-
192
171
  rubyforge_project: excon
193
- rubygems_version: 1.3.6
172
+ rubygems_version: 1.8.10
194
173
  signing_key:
195
174
  specification_version: 2
196
175
  summary: speed, persistence, http(s)
197
176
  test_files: []
198
-