eac_envs-http 0.1.0 → 0.3.0

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: d855da8f92deffe9686e6f6f388334522c3e79f87c9239bd32e488e72c9e6259
4
- data.tar.gz: cf49900f5908f11527516110dc0f6d325c290002a514c23008006fa68d36c939
3
+ metadata.gz: a6c22151cda479613cd35ca7c01f5b838db242db70ab052a646c1e83fcf54509
4
+ data.tar.gz: 27f012142091b0dbefeb57c49cabfa0e31823edc4f4dd84f8bf68fb818802717
5
5
  SHA512:
6
- metadata.gz: e36804df28315e55d42c9c98cfb19a535cf6ba37d601029edde78ea377c077ba4f93ecc48ca02bae4e1e264c052503b79ac47e508404db4deaee1ca0ef0b6496
7
- data.tar.gz: 1f556e7b101ece361ed3f06ae54c223bd7d99bd137779ea0b58e22af9c7e5f37fbb7d22f99500f86f4784cdc100907c2f4a7cec21de2c450a239b2859c1f77ce
6
+ metadata.gz: d42a1a5f35cbb274efb9251fb651bf3ff730b735951a85d9e20b5a6edfa1cd1df4499c40e27c3415d4f41c146266ab87200e1fad559a1dec225490bb47e31ebd
7
+ data.tar.gz: 1778ddfdb370f27756547f89285be738f030a776e194a7a6a0a4f950a3a23ac438c4eb108a02c0aae7b0ce12c6213a8ef2a8a06e218cbe7307263a8e3f12b387
@@ -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
@@ -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
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_envs/http/request'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'webrick'
6
+
7
+ module EacEnvs
8
+ module Http
9
+ module Rspec
10
+ class EchoServer
11
+ class RequestProcessor
12
+ REQUEST_TO_DATA = {
13
+ ssl: :ssl?,
14
+ method: :request_method,
15
+ uri: :unparsed_uri,
16
+ body: :body
17
+ }.freeze
18
+
19
+ common_constructor :request, :response
20
+
21
+ def perform
22
+ response.body = response_body
23
+ response.header['Content-type'] = 'application/json'
24
+ response.status = 200
25
+ end
26
+
27
+ def request_data
28
+ REQUEST_TO_DATA.map { |k, v| [k, request.send(v)] }.to_h.merge(headers: request_headers)
29
+ end
30
+
31
+ def request_headers
32
+ request.header.map { |k, v| [k, v.first] }.to_h
33
+ end
34
+
35
+ def response_body
36
+ ::JSON.generate(request_data)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_envs/http/request'
4
+ require 'eac_envs/http/rspec/echo_server/request_processor'
5
+ require 'eac_ruby_utils/core_ext'
6
+ require 'webrick'
7
+
8
+ module EacEnvs
9
+ module Http
10
+ module Rspec
11
+ class EchoServer
12
+ class WebrickServlet < WEBrick::HTTPServlet::AbstractServlet
13
+ ::EacEnvs::Http::Request.lists.verb.each_value do |verb|
14
+ define_method "do_#{verb.to_s.upcase}" do |request, response|
15
+ ::EacEnvs::Http::Rspec::EchoServer::RequestProcessor.new(request, response).perform
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'addressable'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'webrick'
6
+ require 'webrick/https'
7
+
8
+ module EacEnvs
9
+ module Http
10
+ module Rspec
11
+ class EchoServer
12
+ HOSTNAME = 'localhost'
13
+ SCHEMES = {
14
+ http: { Port: 8080 },
15
+ https: { Port: 8443, SSLEnable: true, SSLCertName: [['CN', HOSTNAME]] }
16
+ }.freeze
17
+
18
+ class << self
19
+ SCHEMES.each do |scheme, webrick_options|
20
+ # @return [::EacEnvs::Http::Rspec::EchoServer]
21
+ define_method scheme do
22
+ new(scheme, webrick_options)
23
+ end
24
+ end
25
+ end
26
+
27
+ common_constructor :scheme, :webrick_options
28
+
29
+ def on_active(&block)
30
+ servlet = webrick_servlet
31
+ ::Thread.abort_on_exception = true
32
+ servlet_thread = ::Thread.new { servlet.start }
33
+ begin
34
+ sleep 0.001 while servlet.status != :Running
35
+ block.call
36
+ ensure
37
+ servlet.shutdown
38
+ servlet_thread.join
39
+ end
40
+ end
41
+
42
+ def root_url
43
+ ::Addressable::URI.new(
44
+ scheme: scheme.to_s,
45
+ host: ::EacEnvs::Http::Rspec::EchoServer::HOSTNAME,
46
+ port: webrick_options.fetch(:Port)
47
+ )
48
+ end
49
+
50
+ private
51
+
52
+ # @return [EacEnvs::Http::Rspec::EchoServer::WebrickServlet]
53
+ def webrick_servlet
54
+ r = ::WEBrick::HTTPServer.new(webrick_options)
55
+ r.mount '/', ::EacEnvs::Http::Rspec::EchoServer::WebrickServlet
56
+ r
57
+ end
58
+
59
+ require_sub __FILE__
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacEnvs
6
+ module Http
7
+ module Rspec
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module EacEnvs
4
4
  module Http
5
- VERSION = '0.1.0'
5
+ VERSION = '0.3.0'
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.1.0
4
+ version: 0.3.0
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-21 00:00:00.000000000 Z
11
+ date: 2023-04-08 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
@@ -79,33 +107,33 @@ dependencies:
79
107
  - !ruby/object:Gem::Version
80
108
  version: 1.0.4
81
109
  - !ruby/object:Gem::Dependency
82
- name: aranha-parsers
110
+ name: faraday-retry
83
111
  requirement: !ruby/object:Gem::Requirement
84
112
  requirements:
85
113
  - - "~>"
86
114
  - !ruby/object:Gem::Version
87
- version: '0.17'
88
- type: :development
115
+ version: '2.1'
116
+ type: :runtime
89
117
  prerelease: false
90
118
  version_requirements: !ruby/object:Gem::Requirement
91
119
  requirements:
92
120
  - - "~>"
93
121
  - !ruby/object:Gem::Version
94
- version: '0.17'
122
+ version: '2.1'
95
123
  - !ruby/object:Gem::Dependency
96
- name: eac_docker
124
+ name: aranha-parsers
97
125
  requirement: !ruby/object:Gem::Requirement
98
126
  requirements:
99
127
  - - "~>"
100
128
  - !ruby/object:Gem::Version
101
- version: '0.5'
129
+ version: '0.17'
102
130
  type: :development
103
131
  prerelease: false
104
132
  version_requirements: !ruby/object:Gem::Requirement
105
133
  requirements:
106
134
  - - "~>"
107
135
  - !ruby/object:Gem::Version
108
- version: '0.5'
136
+ version: '0.17'
109
137
  - !ruby/object:Gem::Dependency
110
138
  name: eac_ruby_gem_support
111
139
  requirement: !ruby/object:Gem::Requirement
@@ -138,7 +166,12 @@ files:
138
166
  - lib/eac_envs/http/request/body_field.rb
139
167
  - lib/eac_envs/http/request/body_field_value.rb
140
168
  - lib/eac_envs/http/request/body_fields.rb
169
+ - lib/eac_envs/http/request/faraday_connection.rb
141
170
  - lib/eac_envs/http/response.rb
171
+ - lib/eac_envs/http/rspec.rb
172
+ - lib/eac_envs/http/rspec/echo_server.rb
173
+ - lib/eac_envs/http/rspec/echo_server/request_processor.rb
174
+ - lib/eac_envs/http/rspec/echo_server/webrick_servlet.rb
142
175
  - lib/eac_envs/http/version.rb
143
176
  homepage:
144
177
  licenses: []