reynard 0.3.0 → 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: bb3f70f5fd68cbe19747d08687715165595d29a6b81da3329a975cac30bd3cbe
4
- data.tar.gz: 73020e57c19507af7ac13b9bc509d3a4b7ac3ae9b74866d7f783cc816436039f
3
+ metadata.gz: ee7b44612f3b8e0fec7a0a3d1e18bc30366d1bea3470a8b3eb46a8d6180c85cd
4
+ data.tar.gz: e6c9629439a36c50ff214f932d5997ce004b21d12a1c71a6c727ab7ef38d722a
5
5
  SHA512:
6
- metadata.gz: d5289ec587b945a0a858537569a4543e9bbfb3daa6dcb8e11cc409d620b89c1d85406d4a1fa0d20dcccc4c00eddcc6ff4b03f5ae24feff865f4cb62661f09638
7
- data.tar.gz: af30bf905849a2589e091b0b9655e52375db08ea00f0b28365029900b4101c5d4b94822b30a17b3a1b8e35329886b61cf857fa6d8de1ff6a16fd56ca0dc2a904
6
+ metadata.gz: 159960b7bb4e38673c00baa531e3586135dcabedadd50dbd12da55eee31b77ea4d4d7d182974144adf602128b664e5d28f3c15c9e6d376f96774e78a45cdba2c
7
+ data.tar.gz: 5a7cbcc61c772858283855289f9b3a119b716c78994d16a4de6d5f34bc6921c633f023d362417657253885e6c35f157cb98d2771228e2790a0dff4df69bcc7f2
data/README.md CHANGED
@@ -81,6 +81,22 @@ response['Content-Type'] #=> 'application/json'
81
81
  response.body #=> '{"name":"Sam Seven"}'
82
82
  ```
83
83
 
84
+ ## Logging
85
+
86
+ When you want to know what the Reynard client is doing you can enable logging.
87
+
88
+ ```ruby
89
+ logger = Logger.new($stdout)
90
+ logger.level = Logger::INFO
91
+ reynard.logger(logger).execute
92
+ ```
93
+
94
+ The logging should be compatible with the Ruby on Rails logger.
95
+
96
+ ```ruby
97
+ reynard.logger(Rails.logger).execute
98
+ ```
99
+
84
100
  ## Mocking
85
101
 
86
102
  You can mock Reynard requests by changing the HTTP implementation. The class **must** implement a single `request` method that accepts an URI and net/http request object. It **must** return a net/http response object or an object with the exact same interface.
@@ -97,4 +113,4 @@ end
97
113
 
98
114
  ## Copyright and other legal
99
115
 
100
- See LICENCE.
116
+ See LICENCE.
@@ -42,6 +42,10 @@ class Reynard
42
42
  copy(headers: @request_context.headers.merge(headers))
43
43
  end
44
44
 
45
+ def logger(logger)
46
+ copy(logger: logger)
47
+ end
48
+
45
49
  def execute
46
50
  build_response(build_request.perform)
47
51
  end
@@ -15,50 +15,23 @@ class Reynard
15
15
  end
16
16
 
17
17
  def perform
18
+ @request_context.logger.info { "#{@request_context.verb.upcase} #{uri}" }
18
19
  Reynard.http.request(uri, build_request)
19
20
  end
20
21
 
21
22
  private
22
23
 
23
- def build_request
24
- case @request_context.verb
25
- when 'get'
26
- build_http_get
27
- when 'post'
28
- build_http_post
29
- when 'put'
30
- build_http_put
31
- when 'patch'
32
- build_http_patch
33
- when 'delete'
34
- build_http_delete
35
- end
36
- end
37
-
38
- def build_http_get
39
- Net::HTTP::Get.new(uri, @request_context.headers)
40
- end
41
-
42
- def build_http_post
43
- post = Net::HTTP::Post.new(uri, @request_context.headers)
44
- post.body = @request_context.body
45
- post
24
+ def request_class
25
+ Net::HTTP.const_get(@request_context.verb.capitalize)
46
26
  end
47
27
 
48
- def build_http_put
49
- put = Net::HTTP::Put.new(uri, @request_context.headers)
50
- put.body = @request_context.body
51
- put
52
- end
53
-
54
- def build_http_patch
55
- patch = Net::HTTP::Patch.new(uri, @request_context.headers)
56
- patch.body = @request_context.body
57
- patch
58
- end
59
-
60
- def build_http_delete
61
- Net::HTTP::Delete.new(uri, @request_context.headers)
28
+ def build_request
29
+ request = request_class.new(uri, @request_context.headers)
30
+ if @request_context.body
31
+ @request_context.logger.debug { @request_context.body }
32
+ request.body = @request_context.body
33
+ end
34
+ request
62
35
  end
63
36
  end
64
37
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'logger'
4
+
5
+ class Reynard
6
+ # Proxy class for a Logger object. Makes irrelevant logging actions a no-op.
7
+ class Logger
8
+ def initialize(logger)
9
+ @logger = logger
10
+ end
11
+
12
+ def debug(&block)
13
+ return unless @logger
14
+ return if @logger.level > ::Logger::DEBUG
15
+
16
+ @logger.debug(block.call)
17
+ end
18
+
19
+ def info(&block)
20
+ return unless @logger
21
+ return if @logger.level > ::Logger::INFO
22
+
23
+ @logger.info(block.call)
24
+ end
25
+ end
26
+ end
@@ -10,6 +10,14 @@ class Reynard
10
10
  :body,
11
11
  keyword_init: true
12
12
  ) do
13
+ attr_writer :logger
14
+
15
+ def logger
16
+ @logger = nil unless defined?(@logger)
17
+
18
+ Reynard::Logger.new(@logger)
19
+ end
20
+
13
21
  def verb
14
22
  operation&.verb
15
23
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Reynard
4
- VERSION = '0.3.0'
4
+ VERSION = '0.4.0'
5
5
  end
data/lib/reynard.rb CHANGED
@@ -17,6 +17,7 @@ class Reynard
17
17
  autoload :Context, 'reynard/context'
18
18
  autoload :GroupedParameters, 'reynard/grouped_parameters'
19
19
  autoload :Http, 'reynard/http'
20
+ autoload :Logger, 'reynard/logger'
20
21
  autoload :MediaType, 'reynard/media_type'
21
22
  autoload :Model, 'reynard/model'
22
23
  autoload :Models, 'reynard/models'
@@ -34,9 +35,9 @@ class Reynard
34
35
  @specification = Specification.new(filename: filename)
35
36
  end
36
37
 
37
- # Assign an object that follows Reynard's internal request interface to mock requests or use a
38
- # different HTTP client.
39
38
  class << self
39
+ # Assign an object that follows Reynard's internal request interface to mock requests or use a
40
+ # different HTTP client.
40
41
  attr_writer :http
41
42
  end
42
43
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reynard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manfred Stienstra
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-17 00:00:00.000000000 Z
11
+ date: 2022-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -125,6 +125,7 @@ files:
125
125
  - lib/reynard/http.rb
126
126
  - lib/reynard/http/request.rb
127
127
  - lib/reynard/http/response.rb
128
+ - lib/reynard/logger.rb
128
129
  - lib/reynard/media_type.rb
129
130
  - lib/reynard/model.rb
130
131
  - lib/reynard/models.rb
@@ -142,7 +143,7 @@ licenses:
142
143
  - MIT
143
144
  metadata:
144
145
  rubygems_mfa_required: 'true'
145
- post_install_message:
146
+ post_install_message:
146
147
  rdoc_options: []
147
148
  require_paths:
148
149
  - lib
@@ -158,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
159
  version: '0'
159
160
  requirements: []
160
161
  rubygems_version: 3.1.6
161
- signing_key:
162
+ signing_key:
162
163
  specification_version: 4
163
164
  summary: Minimal OpenAPI client.
164
165
  test_files: []