http 0.8.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ca4f83715e058d0fd9d76333e0acc15ef369ad0c
4
- data.tar.gz: c040a30b4733d5438368e83c21bfc7d83ebc20f9
3
+ metadata.gz: a1b547d3276525790693e859ac473904b061f64b
4
+ data.tar.gz: e00cd095b96cd623c7e57a76c0203cf0c6f36854
5
5
  SHA512:
6
- metadata.gz: f10c3683cb13697bb8be4aa893041cfca2f823d5df98e3259a2cac238ab69721e4d3ddc5e68bd524301f3be6cfbc5c7cf266a36baf356396685fac4f253a56ff
7
- data.tar.gz: 67ca53156ac393947f01e3e4e4620856f57751c5a85a64645d621779627a0dcf752e43995ae0ff1d3ee1a19975fa63de0d0573a939912e7971f3609915e17d2c
6
+ metadata.gz: 01c71cc5f4123f61b30ba0152def5c55e694846813d0a007f0db30c42e83671a078459e048e84eeef80df5c5d3e930bd8afe6d20dd3822227c145fe03efa004e
7
+ data.tar.gz: 2ba200f4d59a4ff5b1f6ad1ea5412b100ed8599a926b4657c970e046439679a0506341372c7ba92eb6a3d18b0f38c9c90bef99e2de7bf071fdd749b6a3a6b086
data/CHANGES.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 0.8.1 (2015-04-02)
2
+
3
+ * Add missing `require "resolv"`. See #202. (@ixti)
4
+ * Add block-form `#persistent` calls. See #200, #201. (@ixti)
5
+
6
+
1
7
  ## 0.8.0 (2015-04-01)
2
8
 
3
9
  * Properly handle WaitWritable for SSL. See #199. (@zanker)
@@ -72,11 +72,41 @@ module HTTP
72
72
  branch(options).request verb, uri
73
73
  end
74
74
 
75
- # Flag as persistent
76
- # @param [String] host
77
- # @raise [Request::Error] if Host is invalid
75
+ # @overload persistent(host)
76
+ # Flags as persistent
77
+ # @param [String] host
78
+ # @raise [Request::Error] if Host is invalid
79
+ # @return [HTTP::Client] Persistent client
80
+ # @overload persistent(host, &block)
81
+ # Executes given block with persistent client and automatically closes
82
+ # connection at the end of execution.
83
+ #
84
+ # @example
85
+ #
86
+ # def keys(users)
87
+ # HTTP.persistent("https://github.com") do |http|
88
+ # users.map { |u| http.get("/#{u}.keys").to_s }
89
+ # end
90
+ # end
91
+ #
92
+ # # same as
93
+ #
94
+ # def keys(users)
95
+ # http = HTTP.persistent "https://github.com"
96
+ # users.map { |u| http.get("/#{u}.keys").to_s }
97
+ # ensure
98
+ # http.close if http
99
+ # end
100
+ #
101
+ #
102
+ # @yieldparam [HTTP::Client] client Persistent client
103
+ # @return [Object] result of last expression in the block
78
104
  def persistent(host)
79
- branch default_options.with_persistent host
105
+ p_client = branch default_options.with_persistent host
106
+ return p_client unless block_given?
107
+ yield p_client
108
+ ensure
109
+ p_client.close
80
110
  end
81
111
 
82
112
  # Make a request through an HTTP proxy
data/lib/http/client.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require "forwardable"
2
+
1
3
  require "cgi"
2
4
  require "uri"
3
5
 
@@ -10,6 +12,7 @@ require "http/uri"
10
12
  module HTTP
11
13
  # Clients make requests and receive responses
12
14
  class Client
15
+ extend Forwardable
13
16
  include Chainable
14
17
 
15
18
  CONNECTION = "Connection".freeze
@@ -58,6 +61,11 @@ module HTTP
58
61
  end
59
62
  end
60
63
 
64
+ # @!method persistent?
65
+ # @see Options#persistent?
66
+ # @return [Boolean] whenever client is persistent
67
+ def_delegator :default_options, :persistent?
68
+
61
69
  def make_request(req, options)
62
70
  verify_connection!(req.uri)
63
71
 
@@ -79,12 +87,10 @@ module HTTP
79
87
  @state = :clean
80
88
 
81
89
  res
82
-
83
- # On any exception we reset the conn. This is a safety measure, to ensure
84
- # we don't have conns in a bad state resulting in mixed requests/responses
85
90
  rescue
86
- close if default_options.persistent?
87
-
91
+ # On any exception we reset the conn. This is a safety measure, to ensure
92
+ # we don't have conns in a bad state resulting in mixed requests/responses
93
+ close if persistent?
88
94
  raise
89
95
  end
90
96
 
@@ -1,7 +1,9 @@
1
+ require "resolv"
2
+
1
3
  module HTTP
2
4
  module Timeout
3
5
  class PerOperation < Null
4
- HostResolver = Resolv::Hosts.new.tap(&:lazy_initialize)
6
+ HostResolver = ::Resolv::Hosts.new.tap(&:lazy_initialize)
5
7
 
6
8
  CONNECT_TIMEOUT = 0.25
7
9
  WRITE_TIMEOUT = 0.25
data/lib/http/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module HTTP
2
- VERSION = "0.8.0"
2
+ VERSION = "0.8.1"
3
3
  end
@@ -163,4 +163,27 @@ RSpec.describe HTTP do
163
163
  expect(client.default_options[:cache]).to eq cache
164
164
  end
165
165
  end
166
+
167
+ describe ".persistent" do
168
+ let(:host) { "https://api.github.com" }
169
+
170
+ context "with host only given" do
171
+ subject { HTTP.persistent host }
172
+ it { is_expected.to be_an HTTP::Client }
173
+ it { is_expected.to be_persistent }
174
+ end
175
+
176
+ context "with host and block given" do
177
+ it "returns last evaluation of last expression" do
178
+ expect(HTTP.persistent(host) { :http }).to be :http
179
+ end
180
+
181
+ it "auto-closes connection" do
182
+ HTTP.persistent host do |client|
183
+ expect(client).to receive(:close).and_call_original
184
+ client.get("/repos/httprb/http.rb")
185
+ end
186
+ end
187
+ end
188
+ end
166
189
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Arcieri
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-04-01 00:00:00.000000000 Z
13
+ date: 2015-04-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: http_parser.rb
@@ -180,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
180
  version: '0'
181
181
  requirements: []
182
182
  rubyforge_project:
183
- rubygems_version: 2.2.2
183
+ rubygems_version: 2.4.5
184
184
  signing_key:
185
185
  specification_version: 4
186
186
  summary: HTTP should be easy