http-client-generator 0.1.11 → 0.1.13

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: 0b600129f8608c32eb8ec71b131496d99ef2cb92ddc12a3de57fe1d2bf01543f
4
- data.tar.gz: 01d432a7bdbafdacc67e8f987e40833ae9ba2765ca886b252936cf5e70d3e0ff
3
+ metadata.gz: a79ac045ef3e34aeced00d9fbf2a1dc132c12424be9c335dcc8a03a379160e40
4
+ data.tar.gz: 1015175bdfda809d286bc25d2fd4269a3587f74050cfa9acbd7c9d1db6d79f1c
5
5
  SHA512:
6
- metadata.gz: 3fe35524255f3de8ee2d75a08b3085bdd45eccb305b787c138cd1d81ba528dc7b2ec35582256003cb10c34596a9cc79939eae74e668b4e57a9845d655e0567c8
7
- data.tar.gz: 213d970e06a15368b92641aa69ff3333f00a09968829edbedea4ad3cbda5937b04cc0f0c480c321a10c34dc2a1a08d714a40d2346542fb5a5f5169dc08e73394
6
+ metadata.gz: bc6e8e971deaa16f72913ade71c827883a2cb6f3c8079100ea720b350b9d52449a4ec7b8c9bb5c6b1c14338e2cbf38c35b2beb826b7d5309c3c06789dbc6e0c0
7
+ data.tar.gz: 53efe1a4bb6626f3e9b86efe14d0afab08493bbea1caea3c093d2490276a5f888a713b2c2867c12aadc9917fe89a8616d4925b2b325928891ca45562d88a12c9
@@ -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,6 +3,8 @@
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
 
@@ -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(base, @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.11'
4
+ VERSION = '0.1.13'
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
 
@@ -22,7 +20,7 @@ module HttpClientGenerator
22
20
  end
23
21
 
24
22
  def resources(&block)
25
- resources_definition = ResourcesDefinition.new
23
+ resources_definition = ResourcesDefinition.new(self)
26
24
  resources_definition.instance_eval(&block)
27
25
  resources = resources_definition.resources
28
26
 
@@ -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.11
4
+ version: 0.1.13
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