eac_envs-http 0.1.0 → 0.2.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: f17385384c0f2915178b63b4a4e655c826cb6593da72b2c77ba5e93ecb67911e
4
+ data.tar.gz: 8088ab907a1f99ae71a0b528fc110639505885e5dcf063060c09442766cda90a
5
5
  SHA512:
6
- metadata.gz: e36804df28315e55d42c9c98cfb19a535cf6ba37d601029edde78ea377c077ba4f93ecc48ca02bae4e1e264c052503b79ac47e508404db4deaee1ca0ef0b6496
7
- data.tar.gz: 1f556e7b101ece361ed3f06ae54c223bd7d99bd137779ea0b58e22af9c7e5f37fbb7d22f99500f86f4784cdc100907c2f4a7cec21de2c450a239b2859c1f77ce
6
+ metadata.gz: 55fc48bfb2a0daafec4ccf30d422ca8f69ce850f17bb2a0834b04190bb941c20bdd0f7468996b69b3c7dd6623fd92831705f7b21978ebc4f064a1d8d850b4000
7
+ data.tar.gz: cc7ff67747a6001d997407a6c9d511e8a9449010bfe1190de4e97904cd09f500e27c1d5f20bcced5f36fd1d5c3dcfc529f3f43774732b0189a6c1f7de1e4e46a
@@ -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.2.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.2.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-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eac_fs
@@ -92,20 +92,6 @@ dependencies:
92
92
  - - "~>"
93
93
  - !ruby/object:Gem::Version
94
94
  version: '0.17'
95
- - !ruby/object:Gem::Dependency
96
- name: eac_docker
97
- requirement: !ruby/object:Gem::Requirement
98
- requirements:
99
- - - "~>"
100
- - !ruby/object:Gem::Version
101
- version: '0.5'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- requirements:
106
- - - "~>"
107
- - !ruby/object:Gem::Version
108
- version: '0.5'
109
95
  - !ruby/object:Gem::Dependency
110
96
  name: eac_ruby_gem_support
111
97
  requirement: !ruby/object:Gem::Requirement
@@ -139,6 +125,10 @@ files:
139
125
  - lib/eac_envs/http/request/body_field_value.rb
140
126
  - lib/eac_envs/http/request/body_fields.rb
141
127
  - lib/eac_envs/http/response.rb
128
+ - lib/eac_envs/http/rspec.rb
129
+ - lib/eac_envs/http/rspec/echo_server.rb
130
+ - lib/eac_envs/http/rspec/echo_server/request_processor.rb
131
+ - lib/eac_envs/http/rspec/echo_server/webrick_servlet.rb
142
132
  - lib/eac_envs/http/version.rb
143
133
  homepage:
144
134
  licenses: []