http-client-generator 0.1.10 → 0.1.12

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: 8f68cdc73d6150f5b4528dace5f15dc7033077ef50071fb97d23ebe2ddeefdb6
4
- data.tar.gz: b208e7b29097665935bf15ed64556099c1466bd4e66c8782e94d4392fb1f268b
3
+ metadata.gz: a9174a1018297dcaa3f4fbbc55006f6fcd70a98c24845fa6d51b795f27551b08
4
+ data.tar.gz: 8c86b4bade2414fca0302b0292834a17c4caaad932d5e7e9c95c7ae9d4b48726
5
5
  SHA512:
6
- metadata.gz: 81cb0a80d3349badeb6ebc789939d9e9090ccde825e6e7c066b2a0c3e099118b1bb1681404de034d523e184b8536f1d3e41199796f9de6b2c553bee28d2de92d
7
- data.tar.gz: dbb36a509b6c9d0e0038755fd5f707bef94ad43761d7db83d46cd1edb42a45c59fc4217487747288f740bde4d6f8310f18b2392a41d04b5c12f9882ae1e27049
6
+ metadata.gz: 9174db830895a0ed7d7cc35ea85e8b409e1d12382e9d2ce0d26c7570fe2b3a5f099128bbd7c4d9bf3f9811c7dfcca9e5c4527a399250bbe11ab5ea68e4a87fe6
7
+ data.tar.gz: fd87157116505334a027ab6350e4decd72064a3c0b9055f18c51f34e0baace7a8db8f30ab8c6350089248733d93bea7c9fad29107de057fe4fafc4ac96b740de
@@ -3,6 +3,8 @@
3
3
  module HttpClientGenerator
4
4
  class Plugs
5
5
  class CamelizeBody
6
+ Plugs.register :camelize_body, self
7
+
6
8
  def call(req)
7
9
  body =
8
10
  if req.json? && req.body.is_a?(Hash)
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HttpClientGenerator
4
+ class Plugs
5
+ class EncodeJsonResponse
6
+ Plugs.register :encode_json_response, self
7
+
8
+ def call(request)
9
+ request.response_body = JSON.parse(request.response_body, symbolize_names: true)
10
+ request
11
+ rescue JSON::ParserError
12
+ request
13
+ end
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HttpClientGenerator
4
+ class Plugs
5
+ class EnforceJsonResponse
6
+ Plugs.register :enforce_json_response, self
7
+
8
+ def call(request)
9
+ request.response_body = JSON.parse(request.response_body, symbolize_names: true)
10
+ request
11
+ rescue JSON::ParserError => e
12
+ request.raise_error(e)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HttpClientGenerator
4
+ class Plugs
5
+ class SetHeader
6
+ Plugs.register :set_header, self
7
+
8
+ def initialize(arg:, header:)
9
+ @arg = arg
10
+ @header = header
11
+ end
12
+
13
+ def call(req)
14
+ req.headers[header] = req.rest_args[arg]
15
+ req
16
+ end
17
+ end
18
+ end
19
+ end
@@ -5,12 +5,18 @@ require 'securerandom'
5
5
  module HttpClientGenerator
6
6
  class Plugs
7
7
  class SetRequestId
8
+ Plugs.register :set_request_id, self
9
+
8
10
  def initialize(header_name)
9
11
  @header_name = header_name
10
12
  end
11
13
 
12
14
  def call(req)
13
- req.headers[@header_name] = req.rest_args[:request_id] || SecureRandom.uuid
15
+ request_id = req.rest_args[:request_id] || SecureRandom.uuid
16
+
17
+ req.headers[@header_name] = request_id
18
+ req.extra[:request_id] = request_id
19
+
14
20
  req
15
21
  end
16
22
  end
@@ -3,10 +3,12 @@
3
3
  module HttpClientGenerator
4
4
  class Plugs
5
5
  class UnderscoreResponse
6
+ Plugs.register :underscore_response, self
7
+
6
8
  def call(req)
7
9
  return req unless req.response_body.is_a?(Hash)
8
10
 
9
- req.response_body = req.response_body.deep_transform_keys(&:underscore)
11
+ req.response_body = req.response_body.deep_transform_keys { |k| k.to_s.underscore.to_sym }
10
12
 
11
13
  req
12
14
  end
@@ -15,21 +15,28 @@ module HttpClientGenerator
15
15
  end
16
16
  end
17
17
 
18
- attr_accessor :verb, :content_type, :url, :headers, :body, :rest_args, :response_body
18
+ attr_accessor :verb, :content_type, :url, :headers, :body, :rest_args, :response_body, :base, :extra
19
19
 
20
- def initialize(verb:, content_type:, url:, body:, rest_args:)
20
+ def initialize(base:, verb:, content_type:, url:, body:, rest_args:)
21
+ @base = base
21
22
  @verb = verb
22
23
  @content_type = content_type
23
24
  @url = url
24
25
  @rest_args = rest_args
25
26
  @body = body
26
27
  @headers = {}
28
+ @extra = {}
27
29
  end
28
30
 
29
31
  def current_headers
30
32
  default_headers.merge(headers)
31
33
  end
32
34
 
35
+ def raise_error(e)
36
+ Sentry.capture_exception(e, extra: { request_id: extra[:request_id] }) if Object.const_defined?(:Sentry)
37
+ raise base::RequestError, e.message, e.backtrace, cause: nil
38
+ end
39
+
33
40
  private
34
41
 
35
42
  def default_headers
@@ -4,17 +4,18 @@ require 'http'
4
4
 
5
5
  module HttpClientGenerator
6
6
  class Resource
7
- attr_reader :verb, :content_type, :name, :req_plugs, :resp_plugs
7
+ attr_reader :verb, :content_type, :name, :req_plugs, :resp_plugs, :base
8
8
 
9
- def initialize(verb:, content_type:, name:, req_plugs:, resp_plugs:)
9
+ def initialize(verb:, content_type:, name:, base:, req_plugs:, resp_plugs:)
10
10
  @verb = verb
11
+ @base = base
11
12
  @content_type = content_type
12
13
  @name = name
13
14
  @req_plugs = req_plugs
14
15
  @resp_plugs = resp_plugs
15
16
  end
16
17
 
17
- def perform_request(url_helper, base, url_options, body, rest_args)
18
+ def perform_request(url_helper, url_options, body, rest_args)
18
19
  request = prepare_request(url_helper, url_options, body, rest_args)
19
20
 
20
21
  request_attributes = [request.verb, request.url]
@@ -28,7 +29,7 @@ module HttpClientGenerator
28
29
 
29
30
  process_response(request)
30
31
  rescue HTTP::Error => e
31
- raise base::RequestError, e.message, e.backtrace, cause: nil
32
+ request.raise_error(e)
32
33
  end
33
34
 
34
35
  private
@@ -37,20 +38,13 @@ module HttpClientGenerator
37
38
  url = url_helper.public_send(:"#{name}", url_options)
38
39
 
39
40
  request = Request.new(
40
- verb: verb, url: url, content_type: content_type, body: body, rest_args: rest_args
41
+ verb: verb, url: url, content_type: content_type, body: body, rest_args: rest_args, base: base
41
42
  )
42
43
 
43
44
  req_plugs.reduce(request) { |req, plug| plug.call(req) }
44
45
  end
45
46
 
46
47
  def process_response(request)
47
- request.response_body =
48
- begin
49
- request.response_body = JSON.parse(request.response_body, symbolize_names: true)
50
- rescue JSON::ParserError
51
- request.response_body
52
- end
53
-
54
48
  resp_plugs.reduce(request) { |req, plug| plug.call(req) }
55
49
 
56
50
  request.response_body
@@ -10,7 +10,8 @@ module HttpClientGenerator
10
10
 
11
11
  HTTP_VERBS = %i[get post put patch].freeze
12
12
 
13
- def initialize(req_plugs = [], resp_plugs = [])
13
+ def initialize(base, req_plugs = [], resp_plugs = [])
14
+ @base = base
14
15
  @resources = []
15
16
  @req_plugs = req_plugs
16
17
  @resp_plugs = resp_plugs
@@ -23,38 +24,39 @@ module HttpClientGenerator
23
24
  end
24
25
 
25
26
  def req_plug(plug, *args, **kwargs)
26
- @req_plugs <<
27
- if plug.respond_to?(:call)
28
- plug
29
- elsif plug.respond_to?(:new)
30
- plug.new(*args, **kwargs)
31
- else
32
- Plugs.read(plug).new(*args, **kwargs)
33
- end
27
+ @req_plugs << build_plug(plug, *args, **kwargs)
34
28
  end
35
29
 
36
30
  def resp_plug(plug, *args, **kwargs)
37
- @resp_plugs <<
38
- if plug.respond_to?(:call)
39
- plug
40
- elsif plug.respond_to?(:new)
41
- plug.new(*args, **kwargs)
42
- else
43
- Plugs.read(plug).new(*args, **kwargs)
44
- end
31
+ @resp_plugs << build_plug(plug, *args, **kwargs)
45
32
  end
46
33
 
47
34
  def namespace(_name, &block)
48
- namespaced_definition = ResourcesDefinition.new(req_plugs, resp_plugs)
35
+ namespaced_definition = ResourcesDefinition.new(@req_plugs, resp_plugs)
49
36
  namespaced_definition.instance_eval(&block)
50
37
  @resources << namespaced_definition.resources
51
38
  end
52
39
 
53
40
  private
54
41
 
42
+ def build_plug(plug, *args, **kwargs)
43
+ if plug.respond_to?(:call)
44
+ plug
45
+ elsif plug.respond_to?(:new)
46
+ plug.new(*args, **kwargs)
47
+ else
48
+ Plugs.read(plug).new(*args, **kwargs)
49
+ end
50
+ end
51
+
55
52
  def build_resource(verb, name, options)
56
53
  Resource.new(
57
- verb: verb, name: name, req_plugs: @req_plugs, resp_plugs: @resp_plugs, **with_defaults(options)
54
+ verb: verb,
55
+ name: name,
56
+ base: @base,
57
+ req_plugs: @req_plugs,
58
+ resp_plugs: @resp_plugs,
59
+ **with_defaults(options)
58
60
  )
59
61
  end
60
62
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HttpClientGenerator
4
- VERSION = '0.1.10'
4
+ VERSION = '0.1.12'
5
5
  end
@@ -4,11 +4,9 @@ require 'zeitwerk'
4
4
 
5
5
  Zeitwerk::Loader.for_gem.setup
6
6
 
7
- module HttpClientGenerator
8
- Plugs.register :camelize_body, HttpClientGenerator::Plugs::CamelizeBody
9
- Plugs.register :underscore_response, HttpClientGenerator::Plugs::UnderscoreResponse
10
- Plugs.register :set_request_id, HttpClientGenerator::Plugs::SetRequestId
7
+ Dir["#{__dir__}/http_client_generator/plugs/*.rb"].each { |f| require f }
11
8
 
9
+ module HttpClientGenerator
12
10
  def self.included(base)
13
11
  super
14
12
 
@@ -30,7 +28,7 @@ module HttpClientGenerator
30
28
  method_name = :"#{resource.name}_#{resource.verb}"
31
29
 
32
30
  define_singleton_method(method_name) do |url_options = {}, body: nil, **rest_args|
33
- resource.perform_request(@url_helper, @base, url_options, body, rest_args)
31
+ resource.perform_request(@url_helper, url_options, body, rest_args)
34
32
  end
35
33
  end
36
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http-client-generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.10
4
+ version: 0.1.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Egorov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-21 00:00:00.000000000 Z
11
+ date: 2024-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -49,6 +49,9 @@ files:
49
49
  - lib/http_client_generator.rb
50
50
  - lib/http_client_generator/plugs.rb
51
51
  - lib/http_client_generator/plugs/camelize_body.rb
52
+ - lib/http_client_generator/plugs/encode_json_response.rb
53
+ - lib/http_client_generator/plugs/enforce_json_response.rb
54
+ - lib/http_client_generator/plugs/set_header.rb
52
55
  - lib/http_client_generator/plugs/set_request_id.rb
53
56
  - lib/http_client_generator/plugs/underscore_response.rb
54
57
  - lib/http_client_generator/request.rb