ruby-http-session 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ module HTTP
2
+ class Session
3
+ VERSION = "1.0.1"
4
+ end
5
+ end
@@ -0,0 +1,97 @@
1
+ require "http"
2
+ require "monitor"
3
+
4
+ require_relative "session/cache/cache_control"
5
+ require_relative "session/cache/entry"
6
+ require_relative "session/cache/status"
7
+ require_relative "session/cache"
8
+ require_relative "session/client/perform"
9
+ require_relative "session/client"
10
+ 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
+ require_relative "session/requestable"
17
+ require_relative "session/response/string_body"
18
+ require_relative "session/response"
19
+ require_relative "session/version"
20
+
21
+ # Use session to manage cookies and cache across requests.
22
+ class HTTP::Session
23
+ include MonitorMixin
24
+ include HTTP::Session::Configurable
25
+ include HTTP::Session::Requestable
26
+
27
+ # @!attribute [r] default_options
28
+ # @return [Options]
29
+ attr_reader :default_options
30
+
31
+ # @!attribute [r] cache
32
+ # @return [Cache]
33
+ attr_reader :cache
34
+
35
+ # @!attribute [r] jar
36
+ # @return [HTTP::CookieJar]
37
+ attr_reader :jar
38
+
39
+ # @param [Hash] default_options
40
+ # @option default_options [Boolean, Hash] :cookies session cookies option
41
+ # @option default_options [Boolean, Hash] :cache session cache option
42
+ # @option default_options [Hash] :http http client options
43
+ def initialize(default_options = {})
44
+ super()
45
+
46
+ @default_options = HTTP::Session::Options.new(default_options)
47
+ @cache = HTTP::Session::Cache.new(@default_options.cache)
48
+ @jar = HTTP::CookieJar.new
49
+ end
50
+
51
+ # @param verb
52
+ # @param uri
53
+ # @param [Hash] opts
54
+ # @return [Response]
55
+ def request(verb, uri, opts = {})
56
+ c = HTTP::Session::Client.new(@default_options.http, self)
57
+ c.request(verb, uri, opts).tap do |res|
58
+ handle_http_response(res)
59
+ end
60
+ end
61
+
62
+ # @!visibility private
63
+ def make_http_request_data
64
+ synchronize do
65
+ {
66
+ cookies: extract_cookie_from_jar
67
+ }
68
+ end
69
+ end
70
+
71
+ private
72
+
73
+ def handle_http_response(res)
74
+ synchronize do
75
+ extract_cookie_to_jar(res)
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
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,30 @@
1
+ require "webmock"
2
+
3
+ class HTTP::Session
4
+ class WebMockPerform < HTTP::WebMockPerform
5
+ def replay
6
+ webmock_response = response_for_request request_signature
7
+ return unless webmock_response
8
+
9
+ raise_timeout_error if webmock_response.should_timeout
10
+ webmock_response.raise_error_if_any
11
+
12
+ invoke_callbacks(webmock_response, real_request: false)
13
+ response = HTTP::Response.from_webmock @request, webmock_response, request_signature
14
+ HTTP::Session::Response.new(response)
15
+ end
16
+ end
17
+
18
+ class Client
19
+ alias_method :__perform__, :httprb_perform
20
+
21
+ def httprb_perform(request, options)
22
+ return __perform__(request, options) unless webmock_enabled?
23
+ HTTP::Session::WebMockPerform.new(request, options) { __perform__(request, options) }.exec
24
+ end
25
+
26
+ def webmock_enabled?
27
+ WebMock::HttpLibAdapters::HttpRbAdapter.enabled?
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,14 @@
1
+ require_relative "http/session"
2
+
3
+ module HTTP
4
+ class << self
5
+ # @param [Hash] default_options
6
+ # @option default_options [Boolean, Hash] :cookies session cookies option
7
+ # @option default_options [Boolean, Hash] :cache session cache option
8
+ # @option default_options [Hash] :http http client options
9
+ # @return [Session] a new instance of Session.
10
+ def session(default_options = {})
11
+ HTTP::Session.new(default_options)
12
+ end
13
+ end
14
+ end
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-http-session
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - John Doe
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2023-10-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: http
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.1'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 5.1.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '5.1'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 5.1.1
33
+ description: HTTP::Session - a session abstraction for http.rb in order to support
34
+ cookies and caching.
35
+ email:
36
+ - johndoe@example.com
37
+ executables: []
38
+ extensions: []
39
+ extra_rdoc_files: []
40
+ files:
41
+ - ".editorconfig"
42
+ - ".overcommit.yml"
43
+ - ".rspec"
44
+ - ".rubocop.yml"
45
+ - ".tool-versions"
46
+ - ".yardopts"
47
+ - CODE_OF_CONDUCT.md
48
+ - Gemfile
49
+ - Gemfile.lock
50
+ - LICENSE.txt
51
+ - README.md
52
+ - Rakefile
53
+ - http-session.gemspec
54
+ - lib/http-session.rb
55
+ - lib/http-session/webmock.rb
56
+ - lib/http/session.rb
57
+ - lib/http/session/cache.rb
58
+ - lib/http/session/cache/cache_control.rb
59
+ - lib/http/session/cache/entry.rb
60
+ - lib/http/session/cache/status.rb
61
+ - lib/http/session/client.rb
62
+ - lib/http/session/client/perform.rb
63
+ - lib/http/session/configurable.rb
64
+ - lib/http/session/features/auto_inflate.rb
65
+ - lib/http/session/options.rb
66
+ - lib/http/session/options/cache_option.rb
67
+ - lib/http/session/options/cookies_option.rb
68
+ - lib/http/session/request.rb
69
+ - lib/http/session/requestable.rb
70
+ - lib/http/session/response.rb
71
+ - lib/http/session/response/string_body.rb
72
+ - lib/http/session/version.rb
73
+ homepage: https://github.com/souk4711/http-session
74
+ licenses:
75
+ - MIT
76
+ metadata:
77
+ homepage_uri: https://github.com/souk4711/http-session
78
+ source_code_uri: https://github.com/souk4711/http-session
79
+ changelog_uri: https://github.com/souk4711/http-session
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 2.6.0
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubygems_version: 3.3.7
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: HTTP::Session - a session abstraction for http.rb in order to support cookies
99
+ and caching.
100
+ test_files: []