namira 1.0.0.rc2 → 1.0.0.rc3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: da250f857c2e6f20c0d0b09681e892959d660c65
4
- data.tar.gz: 17583cacb46a3dae5e16c8b0756bedd4e618ae48
3
+ metadata.gz: 218528e873d7b85eafe5cc3e31dbb0297d9d1786
4
+ data.tar.gz: ead0b1b476362ffc18352416afde87af3578047f
5
5
  SHA512:
6
- metadata.gz: 49a3ac09358ada8d9566817ff59b54292c24026f59be3f366557e8c98ac5a3ae61f4e70cb65f01ce94874b2bfe2d8f1efa16a1ac8d971381d41dc8d3b83211a5
7
- data.tar.gz: 5c1baca7057c948e73ac578547be39360c531a203bf2cac0593ccfca250243a7d7367d9cba7bdb83718a69c5ea095baf1e0b5d979d30be0a26667422af0367de
6
+ metadata.gz: 4c0bd6e7e24bee243dc0de7abefc331aff7b46941976434acecb0e77bbfdbd6db01fbb38aed4f709112cb477aac71f98b4b7a128258085a9ea3accea8dec2d3a
7
+ data.tar.gz: 9c2bba7ce244f44b33836c1541e12564173c82010649f4f4db9fc489fbeb86d2608c53937113907bcd0697e94a602d6d06f92cb5463ebaf4e1a97b22a1e7f646
data/.rubocop.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.2
2
+ TargetRubyVersion: 2.3
3
3
  Exclude:
4
4
  - Rakefile
5
5
  - spec/**/*
@@ -48,3 +48,6 @@ Style/GuardClause:
48
48
 
49
49
  Style/RaiseArgs:
50
50
  Enabled: false
51
+
52
+ Style/FrozenStringLiteralComment:
53
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
- # 1.0.0.rc1 (master)
1
+ # 1.0.0.rc3 (2018-01-28)
2
+
3
+ * Converted to using a middleware stack for sending requests.
4
+
5
+ # 1.0.0.rc2
6
+
7
+ Namira 1.0.0.rc2
8
+
9
+ # 1.0.0.rc1
2
10
 
3
11
  Namira 1.0
data/lib/namira.rb CHANGED
@@ -1,11 +1,12 @@
1
- require 'namira/version'
2
- require 'namira/request'
3
- require 'namira/response'
4
- require 'namira/errors'
5
1
  require 'namira/config'
2
+ require 'namira/env'
3
+ require 'namira/errors'
4
+ require 'namira/middleware'
6
5
  require 'namira/query_builder'
7
- require 'namira/backend'
8
- require 'namira/auth'
6
+ require 'namira/request'
7
+ require 'namira/response'
8
+ require 'namira/stack'
9
+ require 'namira/version'
9
10
 
10
11
  ##
11
12
  # A Ruby HTTP client
data/lib/namira/env.rb ADDED
@@ -0,0 +1,26 @@
1
+ module Namira
2
+ ##
3
+ # The calling environment for the request
4
+ class Env
5
+ attr_accessor \
6
+ :uri,
7
+ :headers,
8
+ :body,
9
+ :method,
10
+ :config,
11
+ :redirect_count,
12
+ :response,
13
+ :timing
14
+
15
+ def initialize(env)
16
+ @uri = Addressable::URI.parse(env[:uri].to_s)
17
+ @body = env[:body]
18
+ @method = env[:method]
19
+ @headers = Hash(env[:headers])
20
+ @config = Hash(env[:config])
21
+ @redirect_count = 0
22
+ @response = nil
23
+ @timing = nil
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ require_relative 'middleware/config'
2
+ require_relative 'middleware/header'
3
+ require_relative 'middleware/logger'
4
+ require_relative 'middleware/network'
5
+ require_relative 'middleware/redirector'
6
+ require_relative 'middleware/responder'
7
+ require_relative 'middleware/timeout'
8
+ require_relative 'middleware/timing'
9
+
10
+ module Namira
11
+ ##
12
+ # Contains the middleware classes for the default stack
13
+ module Middleware
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ module Namira
2
+ module Middleware
3
+ ##
4
+ # Duplicates the global config for modification by other middleware
5
+ class Config
6
+ def initialize(app)
7
+ @app = app
8
+ end
9
+
10
+ ##
11
+ # Called by the middleware runner.
12
+ #
13
+ # @param env [Namira::Env] The request environment
14
+ def call(env)
15
+ env.config = merge_config(env.config.dup)
16
+ @app.call(env)
17
+ end
18
+
19
+ private
20
+
21
+ def merge_config(config)
22
+ Namira.configure.to_h.merge(config)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,38 @@
1
+ module Namira
2
+ module Middleware
3
+ ##
4
+ # Creates the final request headers by merging global, defaults, and request headers
5
+ class Header
6
+ def initialize(app)
7
+ @app = app
8
+ end
9
+
10
+ ##
11
+ # Called by the middleware runner.
12
+ #
13
+ # @param env [Namira::Env] The request environment
14
+ def call(env)
15
+ headers = Hash(Namira.configure.headers.to_h).dup
16
+ headers.merge!(additional_headers(env))
17
+ headers.merge!(env.headers.to_h)
18
+ env.headers = convert_headers(headers)
19
+ @app.call(env)
20
+ end
21
+
22
+ private
23
+
24
+ def additional_headers(env)
25
+ {
26
+ 'User-Agent' => env.config[:user_agent]
27
+ }
28
+ end
29
+
30
+ def convert_headers(headers)
31
+ headers.each_with_object({}) do |(key, value), obj|
32
+ header = key.to_s.split(/-|_/).map(&:capitalize).join('-')
33
+ obj[header] = value
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,44 @@
1
+ module Namira
2
+ module Middleware
3
+ ##
4
+ # Performs request logging
5
+ class Logger
6
+ ##
7
+ # The key that will disable logging
8
+ SKIP_LOGGING_KEY = :skip_logging
9
+
10
+ def initialize(app)
11
+ @app = app
12
+ end
13
+
14
+ ##
15
+ # Called by the middleware runner.
16
+ #
17
+ # @param env [Namira::Env] The request environment
18
+ def call(env)
19
+ log_request(env)
20
+ @app.call(env)
21
+ end
22
+
23
+ private
24
+
25
+ def logging?(env)
26
+ if env.config.keys.include?(SKIP_LOGGING_KEY)
27
+ env.config[SKIP_LOGGING_KEY] == false
28
+ else
29
+ Namira.configure.log_requests == true
30
+ end
31
+ end
32
+
33
+ def log_request(env)
34
+ return unless logging?(env)
35
+ message = "#{env.method.to_s.upcase} - #{env.uri}"
36
+ if defined?(::Rails)
37
+ Rails.logger.debug(message)
38
+ else
39
+ STDOUT.puts(message)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,28 @@
1
+ module Namira
2
+ module Middleware
3
+ ##
4
+ # Performs the network request
5
+ class Network
6
+ def initialize(app)
7
+ @app = app
8
+ end
9
+
10
+ ##
11
+ # Called by the middleware runner.
12
+ #
13
+ # @param env [Namira::Env] The request environment
14
+ def call(env)
15
+ timeout = env.config[:timeout] || 30.0
16
+ http = HTTP.timeout(
17
+ :per_operation,
18
+ write: timeout,
19
+ connect: timeout,
20
+ read: timeout
21
+ )
22
+ http = http.headers(env.headers)
23
+ env.response = http.send(env.method, env.uri, body: env.body)
24
+ @app.call(env)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,66 @@
1
+ module Namira
2
+ module Middleware
3
+ ##
4
+ # Performs following the redirect and handling multiple redirect errors.
5
+ class Redirector
6
+ ##
7
+ # The HTTP status codes Namira will consider a redirect
8
+ REDIRECT_STATUS = [301, 302].freeze
9
+
10
+ def initialize(app)
11
+ @app = app
12
+ end
13
+
14
+ ##
15
+ # Called by the middleware runner.
16
+ #
17
+ # @param env [Namira::Env] The request environment
18
+ def call(env)
19
+ @app.call(env)
20
+ rescue Errors::HTTPError => e
21
+ if redirect?(e, env)
22
+ handle_redirect(env, e)
23
+ else
24
+ raise e
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def handle_redirect(env, e)
31
+ count = env.redirect_count
32
+ redirect_count_error(env) if count >= max_redirect(env)
33
+ location = e.response.headers['Location']
34
+ redirect_location_error(env) if location.nil?
35
+ env.uri = Addressable::URI.parse(location)
36
+ env.redirect_count += 1
37
+ call(env)
38
+ end
39
+
40
+ def max_redirect(env)
41
+ env.config[:max_redirect] || 3
42
+ end
43
+
44
+ def redirect_count_error(env)
45
+ raise Errors::RedirectError.new(
46
+ "Max number of redirects #{env.redirect_count} for #{env.uri}",
47
+ env.uri.to_s,
48
+ env.redirect_count
49
+ )
50
+ end
51
+
52
+ def redirect_location_error(env)
53
+ raise Errors::RedirectError.new(
54
+ 'Request redirected but no location was supplied',
55
+ nil,
56
+ env.redirect_count
57
+ )
58
+ end
59
+
60
+ def redirect?(e, env)
61
+ return false unless env.config[:follow_redirect].nil? ? true : env.config[:follow_redirect]
62
+ REDIRECT_STATUS.include?(e.status)
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,32 @@
1
+ module Namira
2
+ module Middleware
3
+ ##
4
+ # Builds the {Namira::Response} from the backend responses
5
+ class Responder
6
+ def initialize(app)
7
+ @app = app
8
+ end
9
+
10
+ ##
11
+ # Called by the middleware runner.
12
+ #
13
+ # @param env [Namira::Env] The request environment
14
+ def call(env)
15
+ handle_response(env.response)
16
+ env.response = Namira::Response.new(env.response)
17
+ @app.call(env)
18
+ end
19
+
20
+ private
21
+
22
+ def handle_response(response)
23
+ final = Namira::Response.new(response)
24
+ if (200...300).cover?(response.status)
25
+ final
26
+ else
27
+ raise Errors::HTTPError.new("http_error/#{response.status}", response.status, final)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,21 @@
1
+ module Namira
2
+ module Middleware
3
+ ##
4
+ # Handles timeout errors
5
+ class Timeout
6
+ def initialize(app)
7
+ @app = app
8
+ end
9
+
10
+ ##
11
+ # Called by the middleware runner.
12
+ #
13
+ # @param env [Namira::Env] The request environment
14
+ def call(env)
15
+ @app.call(env)
16
+ rescue HTTP::TimeoutError => e
17
+ raise Errors::TimeoutError.new(e.message)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ module Namira
2
+ module Middleware
3
+ ##
4
+ # Records timing for the request
5
+ class Timing
6
+ def initialize(app)
7
+ @app = app
8
+ end
9
+
10
+ ##
11
+ # Called by the middleware runner.
12
+ #
13
+ # @param env [Namira::Env] The request environment
14
+ def call(env)
15
+ start_time = Time.now
16
+ result = @app.call(env)
17
+ result.timing = Time.now - start_time
18
+ result
19
+ end
20
+ end
21
+ end
22
+ end
@@ -15,19 +15,14 @@ module Namira
15
15
  # @param http_method [Symbol] The HTTP method for the request. (Default `:get`)
16
16
  # @param headers [Hash] Additional headers to send with the request. (Default: `{}`)
17
17
  # @param body [String, #to_s] The body to send. (Default: nil)
18
- # @param auth [Namira::Auth::Base] The auth instance used to sign requests.
19
18
  # @param config [Hash] {Namira::Config} overrides
20
- def initialize(uri:, http_method: :get, headers: {}, body: nil, auth: nil, config: {})
21
- @uri = uri
22
- @http_method = http_method
23
- @headers = Hash(headers)
24
- @body = body
25
- @auth = auth
26
- @timeout = config[:timeout] || Namira.configure.timeout
27
- @max_redirect = config[:max_redirect] || Namira.configure.max_redirect
28
- @backend = config[:backend] || Namira.configure.backend || Namira::Backend
29
- @user_agent = config[:user_agent] || Namira.configure.user_agent
30
- @max_redirect = Backend::NO_FOLLOW_REDIRECT_COUNT if config[:follow_redirect] == false
19
+ def initialize(uri:, http_method: :get, headers: {}, body: nil, config: {})
20
+ @uri = uri
21
+ @http_method = http_method
22
+ @headers = Hash(headers)
23
+ @body = body
24
+ @config = Namira.configure.to_h.merge(Hash(config))
25
+ @stack = Namira::Stack.default
31
26
  end
32
27
 
33
28
  ##
@@ -35,7 +30,7 @@ module Namira
35
30
  #
36
31
  # Every time this method is called a network request will be sent.
37
32
  def send_request
38
- @response = _send_request(uri)
33
+ @response = _send_request
39
34
  end
40
35
 
41
36
  ##
@@ -51,29 +46,20 @@ module Namira
51
46
 
52
47
  private
53
48
 
54
- def build_headers
55
- {}.tap do |headers|
56
- headers['User-Agent'] = @user_agent
57
- Namira.configure.headers.to_h.each do |k, v|
58
- key = k.to_s.split('_').map(&:capitalize).join('-')
59
- headers[key] = v
60
- end
61
- @headers.each do |k, v|
62
- headers[k] = v
63
- end
64
- end
49
+ def env
50
+ Namira::Env.new(
51
+ uri: @uri,
52
+ method: @http_method,
53
+ body: @body,
54
+ headers: @headers,
55
+ config: @config
56
+ )
65
57
  end
66
58
 
67
- def _send_request(uri)
68
- @backend.send_request(
69
- uri: uri,
70
- method: http_method,
71
- headers: build_headers,
72
- max_redirect: @max_redirect,
73
- timeout: @timeout,
74
- body: @body,
75
- auth: @auth
76
- )
59
+ def _send_request
60
+ @stack.call(env).response
61
+ rescue Addressable::URI::InvalidURIError => e
62
+ raise Namira::Errors::InvalidURIError.new(e.message)
77
63
  end
78
64
  end
79
65
  end
@@ -0,0 +1,57 @@
1
+ module Namira
2
+ ##
3
+ # The middleware stack used to send a request
4
+ class Stack
5
+ class << self
6
+ ##
7
+ # The default middleware stack
8
+ def default
9
+ Stack.new do
10
+ use Middleware::Config
11
+ use Middleware::Header
12
+ use Middleware::Timing
13
+ use Middleware::Redirector
14
+ use Middleware::Logger
15
+ use Middleware::Timeout
16
+ use Middleware::Network
17
+ use Middleware::Responder
18
+ end
19
+ end
20
+ end
21
+
22
+ def initialize(&block)
23
+ @middleware = []
24
+ instance_eval(&block)
25
+ end
26
+
27
+ ##
28
+ # Called by the middleware runner.
29
+ #
30
+ # @param env [Namira::Env] The request environment
31
+ def call(env)
32
+ raise ArgumentError, 'Invalid environment' unless env.is_a?(Namira::Env)
33
+ to_app.call(env)
34
+ end
35
+
36
+ ##
37
+ # Add a class to the middleware stack
38
+ #
39
+ # @param klass [Class, #call] The middleware class
40
+ # @param args [Any] Arguments passed to the class initializer
41
+ # @param block [Block] A block to pass to the class initializer
42
+ def use(klass, *args, &block)
43
+ @middleware << lambda do |app|
44
+ klass.new(app, *args, &block)
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def to_app
51
+ application = ->(env) { env }
52
+ @middleware.reverse.inject(application) do |app, component|
53
+ component.call(app)
54
+ end
55
+ end
56
+ end
57
+ end
@@ -1,5 +1,5 @@
1
1
  module Namira
2
2
  ##
3
3
  # The current version of Namira
4
- VERSION = '1.0.0.rc2'.freeze
4
+ VERSION = '1.0.0.rc3'.freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: namira
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc2
4
+ version: 1.0.0.rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Skylar Schipper
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-23 00:00:00.000000000 Z
11
+ date: 2018-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -148,20 +148,27 @@ files:
148
148
  - bin/console
149
149
  - bin/setup
150
150
  - lib/namira.rb
151
- - lib/namira/auth.rb
152
- - lib/namira/auth/base.rb
153
- - lib/namira/auth/http_basic.rb
154
- - lib/namira/backend.rb
155
151
  - lib/namira/config.rb
152
+ - lib/namira/env.rb
156
153
  - lib/namira/errors.rb
157
154
  - lib/namira/errors/base_error.rb
158
155
  - lib/namira/errors/http_error.rb
159
156
  - lib/namira/errors/invalid_uri_error.rb
160
157
  - lib/namira/errors/redirect_error.rb
161
158
  - lib/namira/errors/timeout_error.rb
159
+ - lib/namira/middleware.rb
160
+ - lib/namira/middleware/config.rb
161
+ - lib/namira/middleware/header.rb
162
+ - lib/namira/middleware/logger.rb
163
+ - lib/namira/middleware/network.rb
164
+ - lib/namira/middleware/redirector.rb
165
+ - lib/namira/middleware/responder.rb
166
+ - lib/namira/middleware/timeout.rb
167
+ - lib/namira/middleware/timing.rb
162
168
  - lib/namira/query_builder.rb
163
169
  - lib/namira/request.rb
164
170
  - lib/namira/response.rb
171
+ - lib/namira/stack.rb
165
172
  - lib/namira/version.rb
166
173
  - namira.gemspec
167
174
  homepage: https://github.com/skylarsch/namira
data/lib/namira/auth.rb DELETED
@@ -1,2 +0,0 @@
1
- require_relative 'auth/base'
2
- require_relative 'auth/http_basic'
@@ -1,39 +0,0 @@
1
- module Namira
2
- ##
3
- # Authentication
4
- module Auth
5
- ##
6
- # The base authentication class
7
- class Base
8
- attr_accessor :sign_redirects
9
-
10
- def sign_redirects?
11
- if @sign_redirects.nil?
12
- true
13
- else
14
- @sign_redirects == true
15
- end
16
- end
17
-
18
- ##
19
- # @private
20
- #
21
- # Signs a request.
22
- #
23
- # @param backend [HTTP] The request being signed
24
- # @param redirect_count [Integer] The number of redirects this request has encountered
25
- def sign_request(backend, redirect_count)
26
- return if redirect_count > 0 && !sign_redirects?
27
- sign(backend)
28
- end
29
-
30
- ##
31
- # Perform the signing of the request
32
- #
33
- # @param backend [HTTP] The instance of the backend request to sign.
34
- def sign(_backend)
35
- raise NotImplementedError, 'Auth should override the `sign` method'
36
- end
37
- end
38
- end
39
- end
@@ -1,25 +0,0 @@
1
- module Namira
2
- module Auth
3
- ##
4
- # Signs a HTTP request with HTTP basic authentication
5
- class HTTPBasic < Base
6
- attr_reader :user, :pass
7
-
8
- ##
9
- # Create a new instance
10
- #
11
- # @param user [String] The username
12
- # @param pass [String] The password
13
- def initialize(user:, pass:)
14
- @user = user
15
- @pass = pass
16
- end
17
-
18
- ##
19
- # Signs the request
20
- def sign(request)
21
- request.basic_auth(user: user, pass: pass)
22
- end
23
- end
24
- end
25
- end
@@ -1,138 +0,0 @@
1
- module Namira
2
- ##
3
- # The backend is responsible for sending the requests.
4
- #
5
- # Namira uses HTTP Gem as its default backend. You can create your own backend and override `.send_request` to
6
- # use a different network stack.
7
- #
8
- # Namira.config do |c|
9
- # c.backend = CustomBackend
10
- # end
11
- #
12
- # A fully compatable backend should handle redirects, respecting the max_redirect parameter as well as
13
- # throwing a Errors::HTTPError for anything but a redirect & 2xx status code.
14
- class Backend
15
- ##
16
- # This allows anyone to substitute in their own networking stack.
17
- #
18
- # Any class that implements this method and resturns a `Namira::Response` object can be a fully qualified backend.
19
- #
20
- # @param uri [String] The URI to fetch
21
- # @param method [Symbol] The HTTP method to use, expressed as a Symbol i.e. `:get`
22
- # @param headers [Hash] The full HTTP headers to send from the request expressed as a Hash
23
- # @param max_redirect [Integer] The maximum number of redirects to follow. Passed from the Request
24
- # @param timeout [Integer] The number of seconds before a timeout should occure
25
- # @param auth [Namira::Auth::Base] The `Namira::Auth::Base` subclass instance or nil to sign the request with
26
- #
27
- # @return [Namira::Response] The HTTP response
28
- def self.send_request(uri:, method:, headers:, max_redirect:, timeout:, body:, auth:)
29
- Backend.new(
30
- uri: uri,
31
- method: method,
32
- headers: headers,
33
- max_redirect: max_redirect,
34
- timeout: timeout,
35
- body: body,
36
- auth: auth
37
- ).execute
38
- end
39
-
40
- ##
41
- # The default max redirects to consider the request a "no follow"
42
- NO_FOLLOW_REDIRECT_COUNT = -1
43
-
44
- ##
45
- # @private
46
- def initialize(opts = {})
47
- opts.each do |key, value|
48
- instance_variable_set("@#{key}", value)
49
- end
50
- @redirect_count = 0
51
- end
52
-
53
- ##
54
- # @private
55
- #
56
- # Perform the request
57
- def execute(location = nil)
58
- ensure_redirect_count!(location)
59
- prepare_request
60
- sign_request_if_needed
61
- send_request(location || @uri)
62
- handle_response
63
- end
64
-
65
- private
66
-
67
- def ensure_redirect_count!(location)
68
- return if @redirect_count.zero?
69
- return if @redirect_count <= @max_redirect
70
- raise Errors::RedirectError.new(
71
- "Max number of redirects #{@redirect_count} for #{@uri}",
72
- location,
73
- @redirect_count
74
- )
75
- end
76
-
77
- def prepare_request
78
- @http = HTTP.timeout(
79
- :per_operation,
80
- write: @timeout,
81
- connect: @timeout,
82
- read: @timeout
83
- ).headers(@headers)
84
- end
85
-
86
- def log_request(method, uri)
87
- return unless Namira.configure.log_requests
88
- if defined?(::Rails)
89
- Rails.logger.debug "#{method.to_s.upcase} - #{uri}"
90
- else
91
- STDOUT.puts "#{method.to_s.upcase} - #{uri}"
92
- end
93
- end
94
-
95
- def send_request(location)
96
- log_request(@method, location)
97
- @response = @http.send(@method, location, body: @body)
98
- rescue HTTP::TimeoutError => e
99
- raise Namira::Errors::TimeoutError.new(e.message)
100
- rescue Addressable::URI::InvalidURIError => e
101
- raise Namira::Errors::InvalidURIError.new(e.message)
102
- end
103
-
104
- def sign_request_if_needed
105
- @http = @auth.sign_request(@http, @redirect_count) unless @auth.nil?
106
- end
107
-
108
- def handle_response
109
- case @response.status
110
- when 200..299
111
- create_response
112
- when 301, 302
113
- handle_redirect
114
- else
115
- create_error_response
116
- end
117
- end
118
-
119
- def create_response
120
- Namira::Response.new(@response)
121
- end
122
-
123
- def create_error_response
124
- raise Errors::HTTPError.new("http_error/#{@response.status}", @response.status, create_response)
125
- end
126
-
127
- def handle_redirect
128
- if @max_redirect == NO_FOLLOW_REDIRECT_COUNT
129
- create_error_response
130
- else
131
- @redirect_count += 1
132
- location = @response.headers['Location']
133
- raise Errors::RedirectError.new('Request redirected but no location was supplied', nil, @redirect_count) if location.nil?
134
- execute(location)
135
- end
136
- end
137
- end
138
- end