eac_envs-http 0.2.0 → 0.3.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 +4 -4
- data/lib/eac_envs/http/request/faraday_connection.rb +75 -0
- data/lib/eac_envs/http/request.rb +5 -31
- data/lib/eac_envs/http/response.rb +11 -5
- data/lib/eac_envs/http/version.rb +1 -1
- metadata +45 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 815cab06daf5fa4e2baca67a1bb6fb9282228b081e963e34db3c19499b792904
|
4
|
+
data.tar.gz: 0d35c7cbf823781ae5b11e293b6f8b189bf316a3fa3038374cd183120c39ff0f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1eacb4a2df11f838367dea25261ceb5f3e7a682a2c9cbabe1d3728c18bed33e831817869400fd9b8f21e419fdac9120f5c618b91b8e7c1df2cf6a933b1f80537
|
7
|
+
data.tar.gz: be9a22cce0b1e9ed7f71009d3d1025bedf1249d0a0d87a5148e445fba06a3b93c28660967c3ba3f5ec8fb39a01e72f3e6d449e65c70b575fac01fe6c889867fd
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
require 'faraday'
|
5
|
+
require 'faraday/follow_redirects'
|
6
|
+
require 'faraday/gzip'
|
7
|
+
require 'faraday/multipart'
|
8
|
+
require 'faraday/retry'
|
9
|
+
|
10
|
+
module EacEnvs
|
11
|
+
module Http
|
12
|
+
class Request
|
13
|
+
class FaradayConnection
|
14
|
+
enable_method_class
|
15
|
+
common_constructor :request
|
16
|
+
|
17
|
+
SETUPS = %i[multipart authorization follow_redirect gzip retry].freeze
|
18
|
+
|
19
|
+
# @return [Faraday::Connection]
|
20
|
+
def result
|
21
|
+
::Faraday.default_connection_options[:headers] = {}
|
22
|
+
::Faraday::Connection.new(connection_options) do |conn|
|
23
|
+
SETUPS.each { |setup| send("setup_#{setup}", conn) }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
# @return [Boolean]
|
30
|
+
def body_with_file?
|
31
|
+
request.body_fields.with_file?
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return [Hash]
|
35
|
+
def connection_options
|
36
|
+
{
|
37
|
+
request: { params_encoder: Faraday::FlatParamsEncoder },
|
38
|
+
ssl: { verify: request.ssl_verify? }
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
# @param conn [Faraday::Connection]
|
43
|
+
def setup_authorization(conn)
|
44
|
+
request.auth.if_present do |v|
|
45
|
+
conn.request :authorization, :basic, v.username, v.password
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# @param conn [Faraday::Connection]
|
50
|
+
def setup_follow_redirect(conn)
|
51
|
+
conn.response :follow_redirects if request.follow_redirect?
|
52
|
+
end
|
53
|
+
|
54
|
+
# @param conn [Faraday::Connection]
|
55
|
+
def setup_gzip(conn)
|
56
|
+
conn.request :gzip
|
57
|
+
end
|
58
|
+
|
59
|
+
# @param conn [Faraday::Connection]
|
60
|
+
def setup_multipart(conn)
|
61
|
+
if body_with_file?
|
62
|
+
conn.request :multipart, flat_encode: true
|
63
|
+
else
|
64
|
+
conn.request :url_encoded
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# @param conn [Faraday::Connection]
|
69
|
+
def setup_retry(conn)
|
70
|
+
conn.request :retry if request.retry?
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -2,13 +2,11 @@
|
|
2
2
|
|
3
3
|
require 'eac_envs/http/response'
|
4
4
|
require 'eac_ruby_utils/core_ext'
|
5
|
-
require 'faraday'
|
6
|
-
require 'faraday/multipart'
|
7
5
|
|
8
6
|
module EacEnvs
|
9
7
|
module Http
|
10
8
|
class Request
|
11
|
-
BOOLEAN_MODIFIERS = %w[ssl_verify].freeze
|
9
|
+
BOOLEAN_MODIFIERS = %w[follow_redirect retry ssl_verify].freeze
|
12
10
|
COMMON_MODIFIERS = %w[auth body_data response_body_data_proc url verb].freeze
|
13
11
|
HASH_MODIFIERS = %w[header].freeze
|
14
12
|
MODIFIERS = COMMON_MODIFIERS + BOOLEAN_MODIFIERS + HASH_MODIFIERS.map(&:pluralize)
|
@@ -25,24 +23,9 @@ module EacEnvs
|
|
25
23
|
auth(::Struct.new(:username, :password).new(username, password))
|
26
24
|
end
|
27
25
|
|
28
|
-
# @return [
|
29
|
-
def
|
30
|
-
::
|
31
|
-
::Faraday::Connection.new(faraday_connection_options) do |conn|
|
32
|
-
if body_with_file?
|
33
|
-
conn.request :multipart, flat_encode: true
|
34
|
-
else
|
35
|
-
conn.request :url_encoded
|
36
|
-
end
|
37
|
-
auth.if_present { |v| conn.request :authorization, :basic, v.username, v.password }
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
# @return [Hash]
|
42
|
-
def faraday_connection_options
|
43
|
-
{
|
44
|
-
request: { params_encoder: Faraday::FlatParamsEncoder }, ssl: { verify: ssl_verify? }
|
45
|
-
}
|
26
|
+
# @return [EacEnvs::Http::Request::BodyFields]
|
27
|
+
def body_fields
|
28
|
+
@body_fields ||= ::EacEnvs::Http::Request::BodyFields.new(body_data)
|
46
29
|
end
|
47
30
|
|
48
31
|
# @return [Faraday::Response]
|
@@ -65,20 +48,11 @@ module EacEnvs
|
|
65
48
|
|
66
49
|
private
|
67
50
|
|
68
|
-
def body_fields
|
69
|
-
@body_fields ||= ::EacEnvs::Http::Request::BodyFields.new(body_data)
|
70
|
-
end
|
71
|
-
|
72
|
-
# @return [Boolean]
|
73
|
-
def body_with_file?
|
74
|
-
body_fields.with_file?
|
75
|
-
end
|
76
|
-
|
77
51
|
def sanitized_body_data
|
78
52
|
body_fields.to_h || body_data
|
79
53
|
end
|
80
54
|
|
81
|
-
require_sub __FILE__
|
55
|
+
require_sub __FILE__, require_dependency: true
|
82
56
|
end
|
83
57
|
end
|
84
58
|
end
|
@@ -9,6 +9,7 @@ require 'json'
|
|
9
9
|
module EacEnvs
|
10
10
|
module Http
|
11
11
|
class Response < ::StandardError
|
12
|
+
COMMON_HEADERS = %w[Content-Type].freeze
|
12
13
|
HEADER_LINE_PARSER = /\A([^:]+):(.*)\z/.to_parser do |m|
|
13
14
|
[m[1].strip, m[2].strip]
|
14
15
|
end
|
@@ -22,14 +23,14 @@ module EacEnvs
|
|
22
23
|
end
|
23
24
|
|
24
25
|
common_constructor :request
|
25
|
-
delegate :
|
26
|
+
delegate :response_body_data_proc, to: :request
|
26
27
|
|
27
28
|
def body_data
|
28
29
|
r = performed.headers['Accept'].if_present(body_str) do |v|
|
29
30
|
method_name = "body_data_from_#{v.parameterize.underscore}"
|
30
31
|
respond_to?(method_name) ? send(method_name) : body_str
|
31
32
|
end
|
32
|
-
r =
|
33
|
+
r = response_body_data_proc.call(r) if response_body_data_proc.present?
|
33
34
|
r
|
34
35
|
end
|
35
36
|
|
@@ -54,10 +55,9 @@ module EacEnvs
|
|
54
55
|
hash_search(headers, name)
|
55
56
|
end
|
56
57
|
|
58
|
+
# @return [Hash<String, String>]
|
57
59
|
def headers
|
58
|
-
performed.
|
59
|
-
.map { |header_line| HEADER_LINE_PARSER.parse!(header_line) }
|
60
|
-
.to_h
|
60
|
+
performed.headers.to_hash
|
61
61
|
end
|
62
62
|
|
63
63
|
def link(rel)
|
@@ -86,6 +86,12 @@ module EacEnvs
|
|
86
86
|
"URL: #{url}\nStatus: #{status}\nBody:\n\n#{body_str}"
|
87
87
|
end
|
88
88
|
|
89
|
+
COMMON_HEADERS.each do |header_key|
|
90
|
+
define_method header_key.underscore do
|
91
|
+
header(header_key)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
89
95
|
private
|
90
96
|
|
91
97
|
def body_data_from_application_json
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eac_envs-http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Put here the authors
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-04-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eac_fs
|
@@ -58,6 +58,34 @@ dependencies:
|
|
58
58
|
- - ">="
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: 2.7.4
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: faraday-follow_redirects
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0.3'
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0.3'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: faraday-gzip
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0.1'
|
82
|
+
type: :runtime
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0.1'
|
61
89
|
- !ruby/object:Gem::Dependency
|
62
90
|
name: faraday-multipart
|
63
91
|
requirement: !ruby/object:Gem::Requirement
|
@@ -78,6 +106,20 @@ dependencies:
|
|
78
106
|
- - ">="
|
79
107
|
- !ruby/object:Gem::Version
|
80
108
|
version: 1.0.4
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: faraday-retry
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - "~>"
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '2.1'
|
116
|
+
type: :runtime
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '2.1'
|
81
123
|
- !ruby/object:Gem::Dependency
|
82
124
|
name: aranha-parsers
|
83
125
|
requirement: !ruby/object:Gem::Requirement
|
@@ -124,6 +166,7 @@ files:
|
|
124
166
|
- lib/eac_envs/http/request/body_field.rb
|
125
167
|
- lib/eac_envs/http/request/body_field_value.rb
|
126
168
|
- lib/eac_envs/http/request/body_fields.rb
|
169
|
+
- lib/eac_envs/http/request/faraday_connection.rb
|
127
170
|
- lib/eac_envs/http/response.rb
|
128
171
|
- lib/eac_envs/http/rspec.rb
|
129
172
|
- lib/eac_envs/http/rspec/echo_server.rb
|