vigiles 0.1.3 → 0.1.4

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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/.ruby-version +1 -0
  4. data/lib/vigiles/archive/extras.rb +1 -1
  5. data/lib/vigiles/archive/metadata.rb +1 -1
  6. data/lib/vigiles/archive/response.rb +31 -5
  7. data/lib/vigiles/archive.rb +1 -1
  8. data/lib/vigiles/constants.rb +1 -1
  9. data/lib/vigiles/conversation_recorder.rb +3 -0
  10. data/lib/vigiles/conversation_recorders/application_json.rb +11 -6
  11. data/lib/vigiles/conversation_recorders/unknown.rb +3 -0
  12. data/lib/vigiles/middleware/record_conversation.rb +2 -2
  13. data/lib/vigiles/version.rb +1 -1
  14. data/sorbet/rbi/gems/concurrent-ruby@1.3.1.rbi +11627 -0
  15. data/sorbet/rbi/gems/{json@2.7.1.rbi → json@2.7.2.rbi} +73 -72
  16. data/sorbet/rbi/gems/{minitest@5.22.2.rbi → minitest@5.23.1.rbi} +841 -159
  17. data/sorbet/rbi/gems/{parser@3.3.0.5.rbi → parser@3.3.1.0.rbi} +233 -186
  18. data/sorbet/rbi/gems/{prism@0.24.0.rbi → prism@0.29.0.rbi} +19135 -12188
  19. data/sorbet/rbi/gems/{racc@1.7.3.rbi → racc@1.8.0.rbi} +34 -33
  20. data/sorbet/rbi/gems/{rake@13.1.0.rbi → rake@13.2.1.rbi} +77 -55
  21. data/sorbet/rbi/gems/{rbi@0.1.9.rbi → rbi@0.1.13.rbi} +226 -154
  22. data/sorbet/rbi/gems/{rdoc@6.6.3.1.rbi → rdoc@6.7.0.rbi} +333 -327
  23. data/sorbet/rbi/gems/{regexp_parser@2.9.0.rbi → regexp_parser@2.9.2.rbi} +3 -2
  24. data/sorbet/rbi/gems/{reline@0.5.7.rbi → reline@0.5.8.rbi} +1 -0
  25. data/sorbet/rbi/gems/{rexml@3.2.6.rbi → rexml@3.2.8.rbi} +121 -108
  26. data/sorbet/rbi/gems/{rubocop-ast@1.30.0.rbi → rubocop-ast@1.31.3.rbi} +92 -62
  27. data/sorbet/rbi/gems/{rubocop-minitest@0.34.5.rbi → rubocop-minitest@0.35.0.rbi} +35 -0
  28. data/sorbet/rbi/gems/{rubocop-sorbet@0.7.4.rbi → rubocop-sorbet@0.8.3.rbi} +327 -162
  29. data/sorbet/rbi/gems/{rubocop@1.60.2.rbi → rubocop@1.64.0.rbi} +1719 -1065
  30. data/sorbet/rbi/gems/{spoom@1.2.4.rbi → spoom@1.3.2.rbi} +1057 -413
  31. data/sorbet/rbi/gems/strscan@3.1.0.rbi +9 -0
  32. data/sorbet/rbi/gems/{tapioca@0.12.0.rbi → tapioca@0.14.2.rbi} +123 -448
  33. data/sorbet/rbi/gems/{thor@1.3.0.rbi → thor@1.3.1.rbi} +57 -50
  34. data/sorbet/rbi/gems/{yard@0.9.34.rbi → yard@0.9.36.rbi} +230 -37
  35. data/sorbet/rbi/gems/{zeitwerk@2.6.13.rbi → zeitwerk@2.6.15.rbi} +47 -36
  36. data/vigiles.gemspec +1 -1
  37. metadata +27 -27
  38. data/sorbet/rbi/gems/concurrent-ruby@1.2.3.rbi +0 -8
  39. data/sorbet/rbi/gems/prettier_print@1.2.1.rbi +0 -951
  40. data/sorbet/rbi/gems/syntax_tree@6.2.0.rbi +0 -23136
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 41caead3a350b299aaccd28f0a57472d7c91e1a3f4d99edc93fb5721883ede73
4
- data.tar.gz: d890a26b05693bb9503e4ed5583489d9100eed2703c4e2b2028b03c4d7e863bc
3
+ metadata.gz: '08d13600f7b4174e33a7e521448bf0e4f0ef47558e71a7efb7ce981a116f70da'
4
+ data.tar.gz: cf7c0fa969ae7583ee17ce277446dd1767277b3bb36af16b2fec807c411ef3b8
5
5
  SHA512:
6
- metadata.gz: 06fd18e862c094ae7e90f602eb4505f0906528c17a28d69d04c2bd1f2dfa49b771c65bffdcd42590a93b44a85bdb13a0a7822889ec329cc9aee7b165297b171f
7
- data.tar.gz: 036f4843fe70977471e7bf67d08850971593cff46abf1a47ae9fe8634b413b4eb7911eb92ac0fcbb107b34ff273f8d2d74d96148abab118efed400e22f25469d
6
+ metadata.gz: 1a5320beaccd2f32fd8d622e7561a2230f001a7f551561fb01f6eb94bfba092369af3690c0dd5728d5d1118072e9e42c41e50f39f1dace9aafab0af74c1cdc2c
7
+ data.tar.gz: 6cbab6e02ee4513c9b9755779fc935d230989e789a9610dc9a0bd10cd882afd31c7a4f328a7461c123d951df534025d2e8f67f4a769a61bf7a0891a0461de574
data/.rubocop.yml CHANGED
@@ -4,7 +4,7 @@ require:
4
4
  - rubocop-sorbet
5
5
 
6
6
  AllCops:
7
- TargetRubyVersion: 3.0
7
+ TargetRubyVersion: 3.3
8
8
  Exclude:
9
9
  - "**/generators/**/*"
10
10
  - "**/sorbet/**/*"
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.3.1
@@ -8,7 +8,7 @@ module Vigiles
8
8
 
9
9
  sig { params(request_env: T::Hash[T.untyped, T.untyped]).returns(Extras) }
10
10
  def self.from(request_env)
11
- Extras.new(request_env: request_env)
11
+ Extras.new(request_env:)
12
12
  end
13
13
  end
14
14
  end
@@ -8,7 +8,7 @@ module Vigiles
8
8
 
9
9
  sig { params(request_env: T::Hash[T.untyped, T.untyped]).returns(Metadata) }
10
10
  def self.from(request_env)
11
- Metadata.new(request_env: request_env)
11
+ Metadata.new(request_env:)
12
12
  end
13
13
  end
14
14
  end
@@ -1,4 +1,4 @@
1
- # typed: false
1
+ # typed: strict
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Vigiles
@@ -10,6 +10,33 @@ module Vigiles
10
10
  const :payload, Types::Payload
11
11
  const :status, Integer
12
12
 
13
+ class ResponseBodyTooDeepError < StandardError
14
+ sig { returns(Integer) }
15
+ attr_reader :max_stack_depth
16
+
17
+ sig { returns(Integer) }
18
+ attr_reader :stack_depth
19
+
20
+ sig { params(stack_depth: Integer, max_stack_depth: Integer).void }
21
+ def initialize(stack_depth, max_stack_depth)
22
+ @max_stack_depth = max_stack_depth
23
+ @stack_depth = stack_depth
24
+
25
+ super
26
+ end
27
+ end
28
+
29
+ sig { params(body: Rack::BodyProxy, stack_depth: Integer).returns(String) }
30
+ private_class_method def self.extract_body_from_rack_body_proxy(body, stack_depth = 1)
31
+ raise ResponseBodyTooDeepError.new(stack_depth, 5) unless stack_depth < 5
32
+
33
+ case (inner_body = body.instance_variable_get(:@body))
34
+ when Rack::BodyProxy then extract_body_from_rack_body_proxy(inner_body, stack_depth + 1)
35
+ when Array then inner_body[0] || "null"
36
+ else raise
37
+ end
38
+ end
39
+
13
40
  sig { params(rack_response: Rack::Response).returns(Types::Payload) }
14
41
  private_class_method def self.extract_payload(rack_response)
15
42
  case (body = rack_response.body)
@@ -18,12 +45,11 @@ module Vigiles
18
45
 
19
46
  { __false_body: :not_empty_handle_later }
20
47
  when Rack::BodyProxy
21
- body_proxy = body
22
- body_proxy = body_proxy.instance_variable_get(:@body) until body_proxy.is_a?(Array)
48
+ extracted_body = extract_body_from_rack_body_proxy(body)
23
49
  begin
24
- JSON.parse(body_proxy[0])
50
+ JSON.parse(extracted_body)
25
51
  rescue StandardError
26
- { __false_body: body_proxy[0] }
52
+ { __false_body: extracted_body }
27
53
  end
28
54
  else
29
55
  { __false_body: :unknown_response_payload_type }
@@ -15,7 +15,7 @@ module Vigiles
15
15
  super
16
16
  end
17
17
  end
18
-
18
+
19
19
  sig { params(req: ActionDispatch::Request, res: Rack::Response).returns(T.nilable(Conversation)) }
20
20
  def self.record_conversation(req:, res:)
21
21
  content_type = req.content_type
@@ -8,7 +8,7 @@ module Vigiles
8
8
  %w[
9
9
  application/json
10
10
  ]
11
- ), T::Set[String]
11
+ ).freeze, T::Set[String]
12
12
  )
13
13
 
14
14
  DEFAULT_CONTENT_TYPE_RECORDERS = T.let(
@@ -20,6 +20,9 @@ module Vigiles
20
20
 
21
21
  abstract!
22
22
 
23
+ sig { abstract.params(req: ActionDispatch::Request).void }
24
+ def ensure_content_type_matches!(req); end
25
+
23
26
  sig { abstract.params(req: ActionDispatch::Request, res: Rack::Response).returns(Archive::Conversation) }
24
27
  def record(req:, res:); end
25
28
  end
@@ -14,14 +14,19 @@ module Vigiles
14
14
  Request = Vigiles::Archive::Request
15
15
  Extras = Vigiles::Archive::Extras
16
16
 
17
+ sig { override.params(req: ActionDispatch::Request).void }
18
+ private def ensure_content_type_matches!(req)
19
+ return if req.content_type == ContentType::ApplicationJson.serialize
20
+
21
+ raise ConversationRecorder::MisconfiguredRecorderError.new(
22
+ expected: ContentType::ApplicationJson.serialize,
23
+ actual: req.content_type
24
+ )
25
+ end
26
+
17
27
  sig { override.params(req: ActionDispatch::Request, res: Rack::Response).returns(Archive::Conversation) }
18
28
  def record(req:, res:)
19
- unless req.content_type == ContentType::ApplicationJson.serialize
20
- raise ConversationRecorder::MisconfiguredRecorderError.new(
21
- expected: ContentType::ApplicationJson.serialize,
22
- actual: req.content_type
23
- )
24
- end
29
+ ensure_content_type_matches!(req)
25
30
 
26
31
  response = Response.from(res)
27
32
  request = Request.from(req)
@@ -6,6 +6,9 @@ module Vigiles
6
6
  class Unknown < ConversationRecorder
7
7
  include Singleton
8
8
 
9
+ sig { override.params(req: ActionDispatch::Request).void }
10
+ def ensure_content_type_matches!(req); end
11
+
9
12
  sig { override.params(req: ActionDispatch::Request, res: Rack::Response).returns(Archive::Conversation) }
10
13
  def record(req:, res:) = Archive::Conversation.new
11
14
  end
@@ -13,7 +13,7 @@ module Vigiles
13
13
  to: :options
14
14
 
15
15
  sig { params(app: T.untyped, options: Vigiles::Options).void }
16
- def initialize(app, options=Vigiles::Options.make_default_options)
16
+ def initialize(app, options = Vigiles::Options.make_default_options)
17
17
  @app = app
18
18
  @options = options
19
19
  end
@@ -36,7 +36,7 @@ module Vigiles
36
36
  "[vigiles] conversation recorder: " \
37
37
  "conversation=#{convo.nil? ? "not_recorded" : convo.id} " \
38
38
  "request=#{req.request_id}"
39
- rescue => e
39
+ rescue StandardError => e
40
40
  capture_exception.call(e)
41
41
  logger.warn \
42
42
  "[vigiles] conversation recorder error: " \
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Vigiles
5
- VERSION = "0.1.3"
5
+ VERSION = "0.1.4"
6
6
  end