eac_rest 0.7.1 → 0.7.2

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: 66c3020339ccd5df2e47dfd97c85114a10aaa67da61bacf21ca43ac834bbfc24
4
- data.tar.gz: d2e34918c150896f372a686dc093905adf54b6f30db300622f07f6b187368af6
3
+ metadata.gz: 877e75934091f0d5f8dd8384c81c9cf426e9612302e3d4d2c6c0ebe152cfe055
4
+ data.tar.gz: 9dccadaff0e6213f94316cf029f2bc45983842d3403c3f43f48eaeadce52f5fd
5
5
  SHA512:
6
- metadata.gz: 6fc42e19e74493f10ffd0e30473dd5b173c96317946b8950e021f996c211c8e2769d81785bdb4b60a471156f085fd0cc20c32747b78dc63b549e1bc964f2e818
7
- data.tar.gz: fa104d01ea1de4bb202c40b5c602de8754300bd16cb358b9744e01575a77ce91f7206cfafb48f691850e84b61d31f379e096b6dedd50af38cd6aa2227efdeb00
6
+ metadata.gz: 4676621a795a38f56dc60dd6f1792312e75ae8893f4590d4cf23a67395dca945179d0c99601b9e0cdb9fab3fbd7071a92714878481afef512643bc854c47253b
7
+ data.tar.gz: b84074c9d236764a9e275c130392ef170145072b41c0a64cb361ff5db6eb83f9183c6923305e8104427d1bb7489c038deda25e942fe17a9b8c9d89abbe8a25a7
@@ -1,88 +1,46 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_envs/http/request'
3
4
  require 'eac_rest/response'
4
5
  require 'eac_ruby_utils/core_ext'
5
- require 'faraday'
6
- require 'faraday/multipart'
7
6
 
8
7
  module EacRest
9
8
  class Request
10
- BOOLEAN_MODIFIERS = %w[ssl_verify].freeze
11
- COMMON_MODIFIERS = %w[auth body_data verb].freeze
12
- HASH_MODIFIERS = %w[header].freeze
13
- MODIFIERS = COMMON_MODIFIERS + BOOLEAN_MODIFIERS + HASH_MODIFIERS.map(&:pluralize)
14
-
15
- enable_immutable
16
- immutable_accessor(*BOOLEAN_MODIFIERS, type: :boolean)
17
- immutable_accessor(*COMMON_MODIFIERS, type: :common)
18
- immutable_accessor(*HASH_MODIFIERS, type: :hash)
19
-
20
- enable_listable
21
- lists.add_symbol :verb, :get, :delete, :options, :post, :put
22
-
23
- common_constructor :url, :body_data_proc, default: [nil]
24
-
25
- def autenticate(username, password)
26
- auth(::Struct.new(:username, :password).new(username, password))
27
- end
28
-
29
- # @return [Faraday::Connection]
30
- def faraday_connection
31
- ::Faraday.default_connection_options[:headers] = {}
32
- ::Faraday::Connection.new(faraday_connection_options) do |conn|
33
- if body_with_file?
34
- conn.request :multipart, flat_encode: true
35
- else
36
- conn.request :url_encoded
37
- end
38
- auth.if_present { |v| conn.request :authorization, :basic, v.username, v.password }
9
+ attr_reader :internal_request
10
+
11
+ # @param url [EacEnvs::Http::Request, String]
12
+ # @param response_body_data_proc [Proc, nil]
13
+ def initialize(url, response_body_data_proc = nil)
14
+ if url.is_a?(::EacEnvs::Http::Request)
15
+ @internal_request = url
16
+ else
17
+ @internal_request = ::EacEnvs::Http::Request.new.url(url)
18
+ response_body_data_proc.if_present { |v| @internal_request.response_body_data_proc = v }
39
19
  end
40
20
  end
41
21
 
42
- # @return [Hash]
43
- def faraday_connection_options
44
- {
45
- request: { params_encoder: Faraday::FlatParamsEncoder }, ssl: { verify: ssl_verify? }
46
- }
47
- end
22
+ delegate :sanitized_verb, to: :internal_request
48
23
 
49
- # @return [Faraday::Response]
50
- def faraday_response
51
- conn = faraday_connection
52
- conn.send(sanitized_verb, url) do |req|
53
- req.headers = conn.headers.merge(headers)
54
- sanitized_body_data.if_present { |v| req.body = v }
24
+ {
25
+ auth: 0, body_data: 0, header: 1, headers: 0, ssl_verify: 0, verb: 0
26
+ }.each do |method_name, read_args_count|
27
+ define_method method_name do |*args|
28
+ if args.count <= read_args_count
29
+ internal_request.send(method_name, *args)
30
+ else
31
+ self.class.new(internal_request.send(method_name, *args))
32
+ end
55
33
  end
56
34
  end
57
35
 
58
- def immutable_constructor_args
59
- [url, body_data_proc]
36
+ # @return [EacRest::Request]
37
+ def autenticate(username, password)
38
+ self.class.new(internal_request.basic_auth(username, password))
60
39
  end
61
40
 
41
+ # @return [EacRest::Response]
62
42
  def response
63
43
  ::EacRest::Response.new(self)
64
44
  end
65
-
66
- # @return [Symbol]
67
- def sanitized_verb
68
- verb.if_present(VERB_GET) { |v| self.class.lists.verb.value_validate!(v) }
69
- end
70
-
71
- private
72
-
73
- def body_fields
74
- @body_fields ||= ::EacRest::Request::BodyFields.new(body_data)
75
- end
76
-
77
- # @return [Boolean]
78
- def body_with_file?
79
- body_fields.with_file?
80
- end
81
-
82
- def sanitized_body_data
83
- body_fields.to_h || body_data
84
- end
85
-
86
- require_sub __FILE__
87
45
  end
88
46
  end
@@ -1,111 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/core_ext/hash/conversions'
4
- require 'eac_rest'
3
+ require 'eac_rest/error'
4
+ require 'eac_envs/http/error'
5
5
  require 'eac_ruby_utils/core_ext'
6
- require 'json'
7
6
 
8
7
  module EacRest
9
8
  class Response < ::StandardError
10
- HEADER_LINE_PARSER = /\A([^:]+):(.*)\z/.to_parser do |m|
11
- [m[1].strip, m[2].strip]
12
- end
13
-
14
- # https://www.w3.org/wiki/LinkHeader
15
- LINKS_HEADER_NAME = 'Link'
16
-
17
- # https://www.w3.org/wiki/LinkHeader
18
- LINK_PARSER = /\A\<(.+)\>\s*;\s*rel\s*=\s*\"(.*)\"\z/.to_parser do |m|
19
- [m[2], m[1]]
20
- end
21
-
22
9
  common_constructor :request
23
10
  delegate :body_data_proc, to: :request
24
11
 
25
- def body_data
26
- r = performed.headers['Accept'].if_present(body_str) do |v|
27
- method_name = "body_data_from_#{v.parameterize.underscore}"
28
- respond_to?(method_name) ? send(method_name) : body_str
29
- end
30
- r = body_data_proc.call(r) if body_data_proc.present?
31
- r
32
- end
33
-
34
- def body_data_or_raise
35
- raise_unless_200
36
-
37
- body_data
38
- end
39
-
40
- # @return [String]
41
- def body_str
42
- performed.body
43
- end
44
-
45
- def body_str_or_raise
46
- raise_unless_200
47
-
48
- body_str
49
- end
50
-
51
- def header(name)
52
- hash_search(headers, name)
53
- end
54
-
55
- def headers
56
- performed.header_str.each_line.map(&:strip)[1..-1].reject(&:blank?)
57
- .map { |header_line| HEADER_LINE_PARSER.parse!(header_line) }
58
- .to_h
59
- end
60
-
61
- def link(rel)
62
- hash_search(links, rel)
12
+ def internal_response
13
+ @internal_response ||= request.internal_request.response
63
14
  end
64
15
 
65
- def links
66
- header(LINKS_HEADER_NAME).if_present({}) do |v|
67
- v.split(',').map { |w| LINK_PARSER.parse!(w.strip) }.to_h
16
+ %i[body_data body_data_or_raise body_str body_str_or_raise header headers
17
+ link links raise_unless_200 status to_s url].each do |method_name|
18
+ define_method method_name do |*args, &block|
19
+ internal_response.send(method_name, *args, &block)
20
+ rescue ::EacEnvs::Http::Error
21
+ raise ::EacRest::Error
68
22
  end
69
23
  end
70
-
71
- def raise_unless_200
72
- return nil if status == 200
73
-
74
- raise self
75
- end
76
-
77
- def status
78
- performed.status.to_i
79
- end
80
-
81
- delegate :url, to: :request
82
-
83
- def to_s
84
- "URL: #{url}\nStatus: #{status}\nBody:\n\n#{body_str}"
85
- end
86
-
87
- private
88
-
89
- def body_data_from_application_json
90
- ::JSON.parse(body_str)
91
- end
92
-
93
- def body_data_from_application_xml
94
- Hash.from_xml(body_str)
95
- end
96
-
97
- def hash_search(hash, key)
98
- key = key.to_s.downcase
99
- hash.each do |k, v|
100
- return v if k.to_s.downcase == key
101
- end
102
- nil
103
- end
104
-
105
- def performed
106
- @performed ||= request.faraday_response
107
- rescue ::Faraday::Error
108
- raise ::EacRest::Error
109
- end
110
24
  end
111
25
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRest
4
- VERSION = '0.7.1'
4
+ VERSION = '0.7.2'
5
5
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eac_rest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo H. Bogoni
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-17 00:00:00.000000000 Z
11
+ date: 2023-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: eac_envs-http
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.1'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: eac_fs
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -131,9 +145,6 @@ files:
131
145
  - lib/eac_rest/entity.rb
132
146
  - lib/eac_rest/error.rb
133
147
  - lib/eac_rest/request.rb
134
- - lib/eac_rest/request/body_field.rb
135
- - lib/eac_rest/request/body_field_value.rb
136
- - lib/eac_rest/request/body_fields.rb
137
148
  - lib/eac_rest/response.rb
138
149
  - lib/eac_rest/version.rb
139
150
  homepage:
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_rest/request/body_field_value'
4
- require 'eac_ruby_utils/core_ext'
5
- require 'faraday/multipart/file_part'
6
-
7
- module EacRest
8
- class Request
9
- class BodyField
10
- class << self
11
- # @return [Array<EacRest::Request::BodyField>]
12
- def list_from_enumerable(enum)
13
- hash = {}
14
- enum.each do |v|
15
- hash[v[0]] ||= []
16
- hash[v[0]] << v[1]
17
- end
18
- list_from_hash(hash)
19
- end
20
-
21
- # @return [Array<EacRest::Request::BodyField>]
22
- def list_from_hash(hash)
23
- hash.map { |k, v| new(k, v) }
24
- end
25
- end
26
-
27
- common_constructor :key, :values do
28
- self.key = key.to_s
29
- self.values = (values.is_a?(::Array) ? values.to_a : [values])
30
- .map { |v| ::EacRest::Request::BodyFieldValue.new(v) }
31
- end
32
-
33
- # @return [String]
34
- def hash_key
35
- key
36
- end
37
-
38
- # @return [Array]
39
- def hash_value
40
- values.map(&:to_faraday)
41
- end
42
-
43
- # @return [Boolean]
44
- def with_file?
45
- values.any?(&:file?)
46
- end
47
- end
48
- end
49
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_fs/file_info'
4
- require 'eac_ruby_utils/core_ext'
5
- require 'faraday'
6
- require 'faraday/multipart'
7
-
8
- module EacRest
9
- class Request
10
- class BodyFieldValue
11
- common_constructor :value
12
-
13
- def to_faraday
14
- return value unless file?
15
-
16
- ::Faraday::Multipart::FilePart.new(value, file_mime_type)
17
- end
18
-
19
- # @return [Boolean]
20
- def file?
21
- value.is_a?(::File)
22
- end
23
-
24
- # @return [String]
25
- def file_mime_type
26
- ::EacFs::FileInfo.new(value.path).mime_type
27
- end
28
- end
29
- end
30
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
- require 'eac_rest/request/body_field'
5
-
6
- module EacRest
7
- class Request
8
- class BodyFields
9
- common_constructor :source_body
10
-
11
- # @return [Hash, nil]
12
- def to_h
13
- fields.if_present do |v|
14
- v.each_with_object({}) { |e, a| a[e.hash_key] = e.hash_value }
15
- end
16
- end
17
-
18
- # @return [Array<EacRest::Request::BodyField>, nil]
19
- def fields
20
- source_body.if_present do |v|
21
- next nil unless v.is_a?(::Enumerable)
22
-
23
- if v.is_a?(::Hash)
24
- ::EacRest::Request::BodyField.list_from_hash(v)
25
- else
26
- ::EacRest::Request::BodyField.list_from_enumerable(v)
27
- end
28
- end
29
- end
30
-
31
- # @return [Boolean]
32
- def with_file?
33
- fields.if_present(false) { |v| v.any?(&:with_file?) }
34
- end
35
- end
36
- end
37
- end