ruby-http-session 1.0.1 → 2.1.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.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/Gemfile.lock +3 -1
- data/README.md +164 -71
- data/http-session.gemspec +2 -2
- data/lib/http/session/cache.rb +22 -17
- data/lib/http/session/client/perform.rb +7 -7
- data/lib/http/session/client.rb +75 -49
- data/lib/http/session/configurable.rb +1 -2
- data/lib/http/session/connection_pool.rb +88 -0
- data/lib/http/session/context/follow_context.rb +24 -0
- data/lib/http/session/context.rb +13 -0
- data/lib/http/session/cookies.rb +55 -0
- data/lib/http/session/exceptions.rb +7 -0
- data/lib/http/session/features/auto_inflate.rb +0 -4
- data/lib/http/session/features.rb +5 -0
- data/lib/http/session/options/cache_option.rb +20 -26
- data/lib/http/session/options/cookies_option.rb +31 -11
- data/lib/http/session/options/optionable.rb +21 -0
- data/lib/http/session/options/persistent_option.rb +35 -0
- data/lib/http/session/options.rb +15 -0
- data/lib/http/session/pool_manager.rb +67 -0
- data/lib/http/session/redirector.rb +89 -0
- data/lib/http/session/response/string_body.rb +0 -2
- data/lib/http/session/version.rb +1 -1
- data/lib/http/session.rb +45 -48
- data/lib/http-session.rb +1 -0
- metadata +15 -5
data/lib/http/session.rb
CHANGED
@@ -1,51 +1,61 @@
|
|
1
|
+
require "forwardable"
|
1
2
|
require "http"
|
2
3
|
require "monitor"
|
4
|
+
require "set"
|
3
5
|
|
6
|
+
require_relative "session/exceptions"
|
7
|
+
require_relative "session/options/optionable"
|
8
|
+
require_relative "session/options/cache_option"
|
9
|
+
require_relative "session/options/cookies_option"
|
10
|
+
require_relative "session/options/persistent_option"
|
11
|
+
require_relative "session/options"
|
4
12
|
require_relative "session/cache/cache_control"
|
5
13
|
require_relative "session/cache/entry"
|
6
14
|
require_relative "session/cache/status"
|
7
15
|
require_relative "session/cache"
|
16
|
+
require_relative "session/cookies"
|
17
|
+
require_relative "session/connection_pool"
|
18
|
+
require_relative "session/pool_manager"
|
19
|
+
require_relative "session/request"
|
20
|
+
require_relative "session/response/string_body"
|
21
|
+
require_relative "session/response"
|
22
|
+
require_relative "session/features/auto_inflate"
|
23
|
+
require_relative "session/features"
|
24
|
+
require_relative "session/context/follow_context"
|
25
|
+
require_relative "session/context"
|
8
26
|
require_relative "session/client/perform"
|
9
27
|
require_relative "session/client"
|
28
|
+
require_relative "session/redirector"
|
10
29
|
require_relative "session/configurable"
|
11
|
-
require_relative "session/features/auto_inflate"
|
12
|
-
require_relative "session/options/cache_option"
|
13
|
-
require_relative "session/options/cookies_option"
|
14
|
-
require_relative "session/options"
|
15
|
-
require_relative "session/request"
|
16
30
|
require_relative "session/requestable"
|
17
|
-
require_relative "session/response/string_body"
|
18
|
-
require_relative "session/response"
|
19
31
|
require_relative "session/version"
|
20
32
|
|
21
33
|
# Use session to manage cookies and cache across requests.
|
22
34
|
class HTTP::Session
|
23
|
-
include MonitorMixin
|
24
35
|
include HTTP::Session::Configurable
|
25
36
|
include HTTP::Session::Requestable
|
26
37
|
|
27
|
-
# @!
|
28
|
-
# @return [Options]
|
38
|
+
# @!visibility private
|
29
39
|
attr_reader :default_options
|
30
40
|
|
31
|
-
# @!
|
32
|
-
|
33
|
-
attr_reader :cache
|
41
|
+
# @!visibility private
|
42
|
+
attr_reader :cookies_mgr
|
34
43
|
|
35
|
-
# @!
|
36
|
-
|
37
|
-
attr_reader :jar
|
44
|
+
# @!visibility private
|
45
|
+
attr_reader :cache_mgr
|
38
46
|
|
39
47
|
# @param [Hash] default_options
|
40
48
|
# @option default_options [Boolean, Hash] :cookies session cookies option
|
41
49
|
# @option default_options [Boolean, Hash] :cache session cache option
|
50
|
+
# @option default_options [Boolean, Hash] :persistent session persistent option
|
42
51
|
# @option default_options [Hash] :http http client options
|
43
52
|
def initialize(default_options = {})
|
44
53
|
super()
|
45
54
|
|
46
55
|
@default_options = HTTP::Session::Options.new(default_options)
|
47
|
-
@
|
48
|
-
@
|
56
|
+
@cookies_mgr = HTTP::Session::Cookies.new(@default_options.cookies)
|
57
|
+
@cache_mgr = HTTP::Session::Cache.new(@default_options.cache)
|
58
|
+
@pool_mgr = HTTP::Session::PoolManager.new(@default_options.persistent, self)
|
49
59
|
end
|
50
60
|
|
51
61
|
# @param verb
|
@@ -53,45 +63,32 @@ class HTTP::Session
|
|
53
63
|
# @param [Hash] opts
|
54
64
|
# @return [Response]
|
55
65
|
def request(verb, uri, opts = {})
|
56
|
-
|
57
|
-
|
58
|
-
|
66
|
+
http_opts = @default_options.http.merge(opts)
|
67
|
+
opts[:follow] = false
|
68
|
+
|
69
|
+
res = perform(verb, uri, opts)
|
70
|
+
return res unless http_opts.follow
|
71
|
+
|
72
|
+
redirector = HTTP::Session::Redirector.new(http_opts.follow)
|
73
|
+
redirector.perform(res) do |new_verb, new_uri, follow_ctx|
|
74
|
+
new_opts = follow_ctx.same_origin? ? opts : {}
|
75
|
+
ctx = HTTP::Session::Context.new(follow: follow_ctx)
|
76
|
+
perform(new_verb, new_uri, new_opts, ctx)
|
59
77
|
end
|
60
78
|
end
|
61
79
|
|
62
80
|
# @!visibility private
|
63
|
-
def
|
64
|
-
|
65
|
-
|
66
|
-
cookies: extract_cookie_from_jar
|
67
|
-
}
|
81
|
+
def freeze
|
82
|
+
super.tap do
|
83
|
+
default_options.freeze
|
68
84
|
end
|
69
85
|
end
|
70
86
|
|
71
87
|
private
|
72
88
|
|
73
|
-
def
|
74
|
-
|
75
|
-
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def extract_cookie_from_jar
|
80
|
-
return unless @default_options.cookies.enabled?
|
81
|
-
|
82
|
-
return if @jar.empty?
|
83
|
-
@jar.cookies.each_with_object({}) { |c, h| h[c.name] = c.value }
|
84
|
-
end
|
85
|
-
|
86
|
-
def extract_cookie_to_jar(res)
|
87
|
-
return unless @default_options.cookies.enabled?
|
88
|
-
|
89
|
-
all = ([] << res.history << res).flatten
|
90
|
-
all.each do |r|
|
91
|
-
req = r.request
|
92
|
-
r.headers.get(HTTP::Headers::SET_COOKIE).each do |header|
|
93
|
-
@jar.parse(header, req.uri)
|
94
|
-
end
|
89
|
+
def perform(verb, uri, opts, ctx = nil)
|
90
|
+
@pool_mgr.with(uri) do |c|
|
91
|
+
c.request(verb, uri, opts, ctx)
|
95
92
|
end
|
96
93
|
end
|
97
94
|
end
|
data/lib/http-session.rb
CHANGED
@@ -5,6 +5,7 @@ module HTTP
|
|
5
5
|
# @param [Hash] default_options
|
6
6
|
# @option default_options [Boolean, Hash] :cookies session cookies option
|
7
7
|
# @option default_options [Boolean, Hash] :cache session cache option
|
8
|
+
# @option default_options [Boolean, Hash] :persistent session persistent option
|
8
9
|
# @option default_options [Hash] :http http client options
|
9
10
|
# @return [Session] a new instance of Session.
|
10
11
|
def session(default_options = {})
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-http-session
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Doe
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-10-
|
11
|
+
date: 2023-10-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 5.1.1
|
33
33
|
description: HTTP::Session - a session abstraction for http.rb in order to support
|
34
|
-
|
34
|
+
Cookies and Caching.
|
35
35
|
email:
|
36
36
|
- johndoe@example.com
|
37
37
|
executables: []
|
@@ -61,10 +61,20 @@ files:
|
|
61
61
|
- lib/http/session/client.rb
|
62
62
|
- lib/http/session/client/perform.rb
|
63
63
|
- lib/http/session/configurable.rb
|
64
|
+
- lib/http/session/connection_pool.rb
|
65
|
+
- lib/http/session/context.rb
|
66
|
+
- lib/http/session/context/follow_context.rb
|
67
|
+
- lib/http/session/cookies.rb
|
68
|
+
- lib/http/session/exceptions.rb
|
69
|
+
- lib/http/session/features.rb
|
64
70
|
- lib/http/session/features/auto_inflate.rb
|
65
71
|
- lib/http/session/options.rb
|
66
72
|
- lib/http/session/options/cache_option.rb
|
67
73
|
- lib/http/session/options/cookies_option.rb
|
74
|
+
- lib/http/session/options/optionable.rb
|
75
|
+
- lib/http/session/options/persistent_option.rb
|
76
|
+
- lib/http/session/pool_manager.rb
|
77
|
+
- lib/http/session/redirector.rb
|
68
78
|
- lib/http/session/request.rb
|
69
79
|
- lib/http/session/requestable.rb
|
70
80
|
- lib/http/session/response.rb
|
@@ -95,6 +105,6 @@ requirements: []
|
|
95
105
|
rubygems_version: 3.3.7
|
96
106
|
signing_key:
|
97
107
|
specification_version: 4
|
98
|
-
summary: HTTP::Session - a session abstraction for http.rb in order to support
|
99
|
-
and
|
108
|
+
summary: HTTP::Session - a session abstraction for http.rb in order to support Cookies
|
109
|
+
and Caching.
|
100
110
|
test_files: []
|