eac_envs-http 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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