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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f17385384c0f2915178b63b4a4e655c826cb6593da72b2c77ba5e93ecb67911e
4
- data.tar.gz: 8088ab907a1f99ae71a0b528fc110639505885e5dcf063060c09442766cda90a
3
+ metadata.gz: 815cab06daf5fa4e2baca67a1bb6fb9282228b081e963e34db3c19499b792904
4
+ data.tar.gz: 0d35c7cbf823781ae5b11e293b6f8b189bf316a3fa3038374cd183120c39ff0f
5
5
  SHA512:
6
- metadata.gz: 55fc48bfb2a0daafec4ccf30d422ca8f69ce850f17bb2a0834b04190bb941c20bdd0f7468996b69b3c7dd6623fd92831705f7b21978ebc4f064a1d8d850b4000
7
- data.tar.gz: cc7ff67747a6001d997407a6c9d511e8a9449010bfe1190de4e97904cd09f500e27c1d5f20bcced5f36fd1d5c3dcfc529f3f43774732b0189a6c1f7de1e4e46a
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 [Faraday::Connection]
29
- def faraday_connection
30
- ::Faraday.default_connection_options[:headers] = {}
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 :body_data_proc, to: :request
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 = body_data_proc.call(r) if body_data_proc.present?
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.header_str.each_line.map(&:strip)[1..-1].reject(&:blank?)
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module EacEnvs
4
4
  module Http
5
- VERSION = '0.2.0'
5
+ VERSION = '0.3.1'
6
6
  end
7
7
  end
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.2.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-03-28 00:00:00.000000000 Z
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