ruby-http-session 1.0.1
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 +7 -0
- data/.editorconfig +9 -0
- data/.overcommit.yml +36 -0
- data/.rspec +3 -0
- data/.rubocop.yml +11 -0
- data/.tool-versions +1 -0
- data/.yardopts +3 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +34 -0
- data/Gemfile.lock +180 -0
- data/LICENSE.txt +21 -0
- data/README.md +207 -0
- data/Rakefile +10 -0
- data/http-session.gemspec +37 -0
- data/lib/http/session/cache/cache_control.rb +196 -0
- data/lib/http/session/cache/entry.rb +71 -0
- data/lib/http/session/cache/status.rb +20 -0
- data/lib/http/session/cache.rb +95 -0
- data/lib/http/session/client/perform.rb +143 -0
- data/lib/http/session/client.rb +157 -0
- data/lib/http/session/configurable.rb +143 -0
- data/lib/http/session/features/auto_inflate.rb +60 -0
- data/lib/http/session/options/cache_option.rb +83 -0
- data/lib/http/session/options/cookies_option.rb +22 -0
- data/lib/http/session/options.rb +80 -0
- data/lib/http/session/request.rb +31 -0
- data/lib/http/session/requestable.rb +87 -0
- data/lib/http/session/response/string_body.rb +20 -0
- data/lib/http/session/response.rb +176 -0
- data/lib/http/session/version.rb +5 -0
- data/lib/http/session.rb +97 -0
- data/lib/http-session/webmock.rb +30 -0
- data/lib/http-session.rb +14 -0
- metadata +100 -0
    
        data/lib/http/session.rb
    ADDED
    
    | @@ -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
         | 
    
        data/lib/http-session.rb
    ADDED
    
    | @@ -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: []
         |