eac_envs-http 0.3.1 → 0.4.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: 815cab06daf5fa4e2baca67a1bb6fb9282228b081e963e34db3c19499b792904
4
- data.tar.gz: 0d35c7cbf823781ae5b11e293b6f8b189bf316a3fa3038374cd183120c39ff0f
3
+ metadata.gz: e3adf3f54d37ab405cde216c5b18d539a1b71df566b20c60990f230458037b90
4
+ data.tar.gz: dc92ed9ee485f23e2a23adb7b974d32f24aa4f12896a7bc768cabb35ec6e2ca4
5
5
  SHA512:
6
- metadata.gz: 1eacb4a2df11f838367dea25261ceb5f3e7a682a2c9cbabe1d3728c18bed33e831817869400fd9b8f21e419fdac9120f5c618b91b8e7c1df2cf6a933b1f80537
7
- data.tar.gz: be9a22cce0b1e9ed7f71009d3d1025bedf1249d0a0d87a5148e445fba06a3b93c28660967c3ba3f5ec8fb39a01e72f3e6d449e65c70b575fac01fe6c889867fd
6
+ metadata.gz: 41cd43755f6513a27da57bc694d8b236522b97912ca5f427e813c3ce4fca948de90baed06d18a10959e9ade5d4255ee08cedbf4aa484388a0caa178b3212255e
7
+ data.tar.gz: 1a5d2065a8fda2def3522feb68396d26d6ca5a22fc2a7ecd2c38f2b4de632db39c5b47be9628790f9b29ad6f00fa03d928240e6cb46a6e17700936b8054f55cf
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'json'
5
+
6
+ module EacEnvs
7
+ module Http
8
+ class Response < ::StandardError
9
+ module Body
10
+ delegate :response_body_data_proc, to: :request
11
+
12
+ def body_data
13
+ r = body_data_method_name.if_present(body_str) do |v|
14
+ respond_to?(v, true) ? send(v) : body_str
15
+ end
16
+ r = response_body_data_proc.call(r) if response_body_data_proc.present?
17
+ r
18
+ end
19
+
20
+ def body_data_or_raise
21
+ raise_unless_200
22
+
23
+ body_data
24
+ end
25
+
26
+ # @return [String]
27
+ def body_str
28
+ performed.body
29
+ end
30
+
31
+ def body_str_or_raise
32
+ raise_unless_200
33
+
34
+ body_str
35
+ end
36
+
37
+ # @param path [Pathname]
38
+ def write_body(path)
39
+ ::File.open(path, 'wb') { |fp| fp.write(performed.body) }
40
+ end
41
+
42
+ private
43
+
44
+ def body_data_from_application_json
45
+ ::JSON.parse(body_str)
46
+ end
47
+
48
+ def body_data_from_application_xml
49
+ Hash.from_xml(body_str)
50
+ end
51
+
52
+ # @return [String]
53
+ def body_data_method_name
54
+ content_type.if_present do |v|
55
+ 'body_data_from_' +
56
+ v.split(';').first.force_encoding(::Encoding::UTF_8).variableize
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacEnvs
6
+ module Http
7
+ class Response < ::StandardError
8
+ module Headers
9
+ COMMON_HEADERS = %w[Content-Type].freeze
10
+ HEADER_LINE_PARSER = /\A([^:]+):(.*)\z/.to_parser do |m|
11
+ [m[1].strip, m[2].strip]
12
+ end
13
+
14
+ def header(name)
15
+ hash_search(headers, name)
16
+ end
17
+
18
+ # @return [Hash<String, String>]
19
+ def headers
20
+ performed.headers.to_hash
21
+ end
22
+
23
+ COMMON_HEADERS.each do |header_key|
24
+ define_method header_key.underscore do
25
+ header(header_key)
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def hash_search(hash, key)
32
+ key = key.to_s.downcase
33
+ hash.each do |k, v|
34
+ return v if k.to_s.downcase == key
35
+ end
36
+ nil
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ module EacEnvs
5
+ module Http
6
+ class Response < ::StandardError
7
+ module Links
8
+ # https://www.w3.org/wiki/LinkHeader
9
+ LINKS_HEADER_NAME = 'Link'
10
+
11
+ # https://www.w3.org/wiki/LinkHeader
12
+ LINK_PARSER = /\A\<(.+)\>\s*;\s*rel\s*=\s*\"(.*)\"\z/.to_parser do |m|
13
+ [m[2], m[1]]
14
+ end
15
+
16
+ def link(rel)
17
+ hash_search(links, rel)
18
+ end
19
+
20
+ def links
21
+ header(LINKS_HEADER_NAME).if_present({}) do |v|
22
+ v.split(',').map { |w| LINK_PARSER.parse!(w.strip) }.to_h
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module EacEnvs
6
+ module Http
7
+ class Response < ::StandardError
8
+ module Statuses
9
+ def raise_unless_200
10
+ return nil if status == 200
11
+
12
+ raise self
13
+ end
14
+
15
+ def status
16
+ performed.status.to_i
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -9,112 +9,22 @@ require 'json'
9
9
  module EacEnvs
10
10
  module Http
11
11
  class Response < ::StandardError
12
- COMMON_HEADERS = %w[Content-Type].freeze
13
- HEADER_LINE_PARSER = /\A([^:]+):(.*)\z/.to_parser do |m|
14
- [m[1].strip, m[2].strip]
15
- end
16
-
17
- # https://www.w3.org/wiki/LinkHeader
18
- LINKS_HEADER_NAME = 'Link'
19
-
20
- # https://www.w3.org/wiki/LinkHeader
21
- LINK_PARSER = /\A\<(.+)\>\s*;\s*rel\s*=\s*\"(.*)\"\z/.to_parser do |m|
22
- [m[2], m[1]]
23
- end
24
-
25
12
  common_constructor :request
26
- delegate :response_body_data_proc, to: :request
27
-
28
- def body_data
29
- r = performed.headers['Accept'].if_present(body_str) do |v|
30
- method_name = "body_data_from_#{v.parameterize.underscore}"
31
- respond_to?(method_name) ? send(method_name) : body_str
32
- end
33
- r = response_body_data_proc.call(r) if response_body_data_proc.present?
34
- r
35
- end
36
-
37
- def body_data_or_raise
38
- raise_unless_200
39
-
40
- body_data
41
- end
42
-
43
- # @return [String]
44
- def body_str
45
- performed.body
46
- end
47
-
48
- def body_str_or_raise
49
- raise_unless_200
50
-
51
- body_str
52
- end
53
-
54
- def header(name)
55
- hash_search(headers, name)
56
- end
57
-
58
- # @return [Hash<String, String>]
59
- def headers
60
- performed.headers.to_hash
61
- end
62
-
63
- def link(rel)
64
- hash_search(links, rel)
65
- end
66
-
67
- def links
68
- header(LINKS_HEADER_NAME).if_present({}) do |v|
69
- v.split(',').map { |w| LINK_PARSER.parse!(w.strip) }.to_h
70
- end
71
- end
72
-
73
- def raise_unless_200
74
- return nil if status == 200
75
-
76
- raise self
77
- end
78
-
79
- def status
80
- performed.status.to_i
81
- end
82
-
83
13
  delegate :url, to: :request
84
14
 
85
15
  def to_s
86
16
  "URL: #{url}\nStatus: #{status}\nBody:\n\n#{body_str}"
87
17
  end
88
18
 
89
- COMMON_HEADERS.each do |header_key|
90
- define_method header_key.underscore do
91
- header(header_key)
92
- end
93
- end
94
-
95
19
  private
96
20
 
97
- def body_data_from_application_json
98
- ::JSON.parse(body_str)
99
- end
100
-
101
- def body_data_from_application_xml
102
- Hash.from_xml(body_str)
103
- end
104
-
105
- def hash_search(hash, key)
106
- key = key.to_s.downcase
107
- hash.each do |k, v|
108
- return v if k.to_s.downcase == key
109
- end
110
- nil
111
- end
112
-
113
21
  def performed
114
22
  @performed ||= request.faraday_response
115
23
  rescue ::Faraday::Error
116
24
  raise ::EacEnvs::Http::Error
117
25
  end
26
+
27
+ require_sub __FILE__, include_modules: true
118
28
  end
119
29
  end
120
30
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module EacEnvs
4
4
  module Http
5
- VERSION = '0.3.1'
5
+ VERSION = '0.4.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.3.1
4
+ version: 0.4.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-04-30 00:00:00.000000000 Z
11
+ date: 2023-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eac_fs
@@ -30,14 +30,20 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.112'
33
+ version: '0.117'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 0.117.1
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
41
  - - "~>"
39
42
  - !ruby/object:Gem::Version
40
- version: '0.112'
43
+ version: '0.117'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 0.117.1
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: faraday
43
49
  requirement: !ruby/object:Gem::Requirement
@@ -47,7 +53,7 @@ dependencies:
47
53
  version: '2.7'
48
54
  - - ">="
49
55
  - !ruby/object:Gem::Version
50
- version: 2.7.4
56
+ version: 2.7.6
51
57
  type: :runtime
52
58
  prerelease: false
53
59
  version_requirements: !ruby/object:Gem::Requirement
@@ -57,7 +63,7 @@ dependencies:
57
63
  version: '2.7'
58
64
  - - ">="
59
65
  - !ruby/object:Gem::Version
60
- version: 2.7.4
66
+ version: 2.7.6
61
67
  - !ruby/object:Gem::Dependency
62
68
  name: faraday-follow_redirects
63
69
  requirement: !ruby/object:Gem::Requirement
@@ -112,14 +118,14 @@ dependencies:
112
118
  requirements:
113
119
  - - "~>"
114
120
  - !ruby/object:Gem::Version
115
- version: '2.1'
121
+ version: '2.2'
116
122
  type: :runtime
117
123
  prerelease: false
118
124
  version_requirements: !ruby/object:Gem::Requirement
119
125
  requirements:
120
126
  - - "~>"
121
127
  - !ruby/object:Gem::Version
122
- version: '2.1'
128
+ version: '2.2'
123
129
  - !ruby/object:Gem::Dependency
124
130
  name: aranha-parsers
125
131
  requirement: !ruby/object:Gem::Requirement
@@ -168,6 +174,10 @@ files:
168
174
  - lib/eac_envs/http/request/body_fields.rb
169
175
  - lib/eac_envs/http/request/faraday_connection.rb
170
176
  - lib/eac_envs/http/response.rb
177
+ - lib/eac_envs/http/response/body.rb
178
+ - lib/eac_envs/http/response/headers.rb
179
+ - lib/eac_envs/http/response/links.rb
180
+ - lib/eac_envs/http/response/statuses.rb
171
181
  - lib/eac_envs/http/rspec.rb
172
182
  - lib/eac_envs/http/rspec/echo_server.rb
173
183
  - lib/eac_envs/http/rspec/echo_server/request_processor.rb