logstruct 0.0.2 → 0.1.1

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 (114) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -22
  3. data/README.md +25 -2
  4. data/lib/log_struct/boot_buffer.rb +28 -0
  5. data/lib/log_struct/builders/active_job.rb +84 -0
  6. data/lib/log_struct/concerns/configuration.rb +126 -13
  7. data/lib/log_struct/concerns/error_handling.rb +3 -7
  8. data/lib/log_struct/concerns/logging.rb +5 -5
  9. data/lib/log_struct/config_struct/filters.rb +18 -0
  10. data/lib/log_struct/config_struct/integrations.rb +16 -12
  11. data/lib/log_struct/configuration.rb +13 -0
  12. data/lib/log_struct/enums/event.rb +13 -0
  13. data/lib/log_struct/enums/log_field.rb +154 -0
  14. data/lib/log_struct/enums/source.rb +4 -1
  15. data/lib/log_struct/formatter.rb +29 -17
  16. data/lib/log_struct/integrations/action_mailer/error_handling.rb +3 -11
  17. data/lib/log_struct/integrations/action_mailer/event_logging.rb +22 -12
  18. data/lib/log_struct/integrations/active_job/log_subscriber.rb +52 -48
  19. data/lib/log_struct/integrations/active_model_serializers.rb +49 -0
  20. data/lib/log_struct/integrations/active_record.rb +35 -5
  21. data/lib/log_struct/integrations/active_storage.rb +59 -20
  22. data/lib/log_struct/integrations/ahoy.rb +54 -0
  23. data/lib/log_struct/integrations/carrierwave.rb +13 -16
  24. data/lib/log_struct/integrations/dotenv.rb +278 -0
  25. data/lib/log_struct/integrations/good_job/log_subscriber.rb +86 -136
  26. data/lib/log_struct/integrations/good_job/logger.rb +8 -10
  27. data/lib/log_struct/integrations/good_job.rb +5 -7
  28. data/lib/log_struct/integrations/host_authorization.rb +25 -4
  29. data/lib/log_struct/integrations/lograge.rb +20 -14
  30. data/lib/log_struct/integrations/puma.rb +482 -0
  31. data/lib/log_struct/integrations/rack_error_handler/middleware.rb +11 -18
  32. data/lib/log_struct/integrations/shrine.rb +44 -19
  33. data/lib/log_struct/integrations/sorbet.rb +48 -0
  34. data/lib/log_struct/integrations.rb +25 -0
  35. data/lib/log_struct/log/action_mailer/delivered.rb +99 -0
  36. data/lib/log_struct/log/action_mailer/delivery.rb +99 -0
  37. data/lib/log_struct/log/action_mailer.rb +30 -45
  38. data/lib/log_struct/log/active_job/enqueue.rb +125 -0
  39. data/lib/log_struct/log/active_job/finish.rb +130 -0
  40. data/lib/log_struct/log/active_job/schedule.rb +125 -0
  41. data/lib/log_struct/log/active_job/start.rb +130 -0
  42. data/lib/log_struct/log/active_job.rb +41 -54
  43. data/lib/log_struct/log/active_model_serializers.rb +94 -0
  44. data/lib/log_struct/log/active_storage/delete.rb +87 -0
  45. data/lib/log_struct/log/active_storage/download.rb +103 -0
  46. data/lib/log_struct/log/active_storage/exist.rb +93 -0
  47. data/lib/log_struct/log/active_storage/metadata.rb +93 -0
  48. data/lib/log_struct/log/active_storage/stream.rb +93 -0
  49. data/lib/log_struct/log/active_storage/upload.rb +118 -0
  50. data/lib/log_struct/log/active_storage/url.rb +93 -0
  51. data/lib/log_struct/log/active_storage.rb +32 -68
  52. data/lib/log_struct/log/ahoy.rb +88 -0
  53. data/lib/log_struct/log/carrierwave/delete.rb +115 -0
  54. data/lib/log_struct/log/carrierwave/download.rb +131 -0
  55. data/lib/log_struct/log/carrierwave/upload.rb +141 -0
  56. data/lib/log_struct/log/carrierwave.rb +37 -72
  57. data/lib/log_struct/log/dotenv/load.rb +76 -0
  58. data/lib/log_struct/log/dotenv/restore.rb +76 -0
  59. data/lib/log_struct/log/dotenv/save.rb +76 -0
  60. data/lib/log_struct/log/dotenv/update.rb +76 -0
  61. data/lib/log_struct/log/dotenv.rb +12 -0
  62. data/lib/log_struct/log/error.rb +58 -46
  63. data/lib/log_struct/log/good_job/enqueue.rb +126 -0
  64. data/lib/log_struct/log/good_job/error.rb +151 -0
  65. data/lib/log_struct/log/good_job/finish.rb +136 -0
  66. data/lib/log_struct/log/good_job/log.rb +131 -0
  67. data/lib/log_struct/log/good_job/schedule.rb +136 -0
  68. data/lib/log_struct/log/good_job/start.rb +136 -0
  69. data/lib/log_struct/log/good_job.rb +40 -141
  70. data/lib/log_struct/log/interfaces/additional_data_field.rb +1 -17
  71. data/lib/log_struct/log/interfaces/common_fields.rb +1 -39
  72. data/lib/log_struct/log/interfaces/public_common_fields.rb +4 -0
  73. data/lib/log_struct/log/interfaces/request_fields.rb +1 -33
  74. data/lib/log_struct/log/plain.rb +59 -34
  75. data/lib/log_struct/log/puma/shutdown.rb +80 -0
  76. data/lib/log_struct/log/puma/start.rb +120 -0
  77. data/lib/log_struct/log/puma.rb +10 -0
  78. data/lib/log_struct/log/request.rb +132 -48
  79. data/lib/log_struct/log/security/blocked_host.rb +141 -0
  80. data/lib/log_struct/log/security/csrf_violation.rb +131 -0
  81. data/lib/log_struct/log/security/ip_spoof.rb +141 -0
  82. data/lib/log_struct/log/security.rb +40 -70
  83. data/lib/log_struct/log/shared/add_request_fields.rb +1 -26
  84. data/lib/log_struct/log/shared/merge_additional_data_fields.rb +1 -25
  85. data/lib/log_struct/log/shared/serialize_common.rb +1 -33
  86. data/lib/log_struct/log/shared/serialize_common_public.rb +44 -0
  87. data/lib/log_struct/log/shrine/delete.rb +85 -0
  88. data/lib/log_struct/log/shrine/download.rb +90 -0
  89. data/lib/log_struct/log/shrine/exist.rb +90 -0
  90. data/lib/log_struct/log/shrine/metadata.rb +90 -0
  91. data/lib/log_struct/log/shrine/upload.rb +105 -0
  92. data/lib/log_struct/log/shrine.rb +10 -67
  93. data/lib/log_struct/log/sidekiq.rb +65 -26
  94. data/lib/log_struct/log/sql.rb +113 -106
  95. data/lib/log_struct/log.rb +31 -32
  96. data/lib/log_struct/multi_error_reporter.rb +80 -22
  97. data/lib/log_struct/param_filters.rb +50 -7
  98. data/lib/log_struct/rails_boot_banner_silencer.rb +123 -0
  99. data/lib/log_struct/railtie.rb +71 -0
  100. data/lib/log_struct/semantic_logger/formatter.rb +4 -2
  101. data/lib/log_struct/semantic_logger/setup.rb +34 -18
  102. data/lib/log_struct/shared/interfaces/additional_data_field.rb +22 -0
  103. data/lib/log_struct/shared/interfaces/common_fields.rb +39 -0
  104. data/lib/log_struct/shared/interfaces/public_common_fields.rb +29 -0
  105. data/lib/log_struct/shared/interfaces/request_fields.rb +39 -0
  106. data/lib/log_struct/shared/shared/add_request_fields.rb +28 -0
  107. data/lib/log_struct/shared/shared/merge_additional_data_fields.rb +27 -0
  108. data/lib/log_struct/shared/shared/serialize_common.rb +58 -0
  109. data/lib/log_struct/version.rb +1 -1
  110. data/lib/log_struct.rb +22 -4
  111. data/logstruct.gemspec +3 -0
  112. metadata +108 -5
  113. data/lib/log_struct/log/interfaces/message_field.rb +0 -20
  114. data/lib/log_struct/log_keys.rb +0 -102
@@ -0,0 +1,115 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # AUTO-GENERATED: DO NOT EDIT
5
+ # Generated by scripts/generate_structs.rb
6
+ # Schemas dir: schemas/log_sources/
7
+ # Template: tools/codegen/templates/sorbet/event.rb.erb
8
+
9
+ require "log_struct/shared/interfaces/common_fields"
10
+ require "log_struct/shared/interfaces/additional_data_field"
11
+ require "log_struct/shared/interfaces/request_fields"
12
+ require "log_struct/shared/shared/serialize_common"
13
+ require "log_struct/shared/shared/merge_additional_data_fields"
14
+ require "log_struct/shared/shared/add_request_fields"
15
+ require_relative "../../enums/source"
16
+ require_relative "../../enums/event"
17
+ require_relative "../../enums/level"
18
+ require_relative "../../enums/log_field"
19
+
20
+ module LogStruct
21
+ module Log
22
+ class CarrierWave
23
+ class Delete < T::Struct
24
+ # typed: strict
25
+ # frozen_string_literal: true
26
+
27
+ extend T::Sig
28
+
29
+ extend T::Sig
30
+
31
+ # Shared/common fields
32
+ const :source, Source::CarrierWave, default: Source::CarrierWave
33
+ const :event, Event, default: Event::Delete
34
+ const :timestamp, Time, factory: -> { Time.now }
35
+ const :level, Level, default: Level::Info
36
+
37
+ const :storage, String
38
+ const :file_id, String
39
+ const :uploader, T.nilable(String), default: nil
40
+ const :model, T.nilable(String), default: nil
41
+ const :mount_point, T.nilable(String), default: nil
42
+
43
+ # Event-specific fields
44
+
45
+ # Additional data
46
+ include LogStruct::Log::Interfaces::AdditionalDataField
47
+ const :additional_data, T.nilable(T::Hash[T.any(String, Symbol), T.untyped]), default: nil
48
+ include LogStruct::Log::Shared::MergeAdditionalDataFields
49
+
50
+ # Request fields (optional)
51
+
52
+ # Serialize shared fields
53
+ include LogStruct::Log::Interfaces::CommonFields
54
+ include LogStruct::Log::Shared::SerializeCommon
55
+
56
+ sig {
57
+ params(storage: T.untyped,
58
+ file_id: T.untyped,
59
+ uploader: T.untyped,
60
+ model: T.untyped,
61
+ mount_point: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
62
+ }
63
+ def self.base_hash(storage: nil,
64
+ file_id: nil,
65
+ uploader: nil,
66
+ model: nil,
67
+ mount_point: nil)
68
+ h = {}
69
+ h[LogField::Storage] = storage unless storage.nil?
70
+ h[LogField::FileId] = file_id unless file_id.nil?
71
+ h[LogField::Uploader] = uploader unless uploader.nil?
72
+ h[LogField::Model] = model unless model.nil?
73
+ h[LogField::MountPoint] = mount_point unless mount_point.nil?
74
+ h
75
+ end
76
+
77
+ sig {
78
+ params(storage: T.untyped,
79
+ file_id: T.untyped,
80
+ uploader: T.untyped,
81
+ model: T.untyped,
82
+ mount_point: T.untyped,
83
+ additional_data: T.untyped,
84
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
85
+ }
86
+ def self.build(storage:,
87
+ file_id:,
88
+ uploader: nil,
89
+ model: nil,
90
+ mount_point: nil,
91
+ additional_data: nil,
92
+ timestamp: Time.now)
93
+ base_hash(storage: storage,
94
+ file_id: file_id,
95
+ uploader: uploader,
96
+ model: model,
97
+ mount_point: mount_point)
98
+ end
99
+
100
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
101
+ def to_h
102
+ self.class.build(
103
+ storage: storage,
104
+ file_id: file_id,
105
+ uploader: uploader,
106
+ model: model,
107
+ mount_point: mount_point,
108
+ additional_data: additional_data,
109
+ timestamp: timestamp
110
+ )
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,131 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # AUTO-GENERATED: DO NOT EDIT
5
+ # Generated by scripts/generate_structs.rb
6
+ # Schemas dir: schemas/log_sources/
7
+ # Template: tools/codegen/templates/sorbet/event.rb.erb
8
+
9
+ require "log_struct/shared/interfaces/common_fields"
10
+ require "log_struct/shared/interfaces/additional_data_field"
11
+ require "log_struct/shared/interfaces/request_fields"
12
+ require "log_struct/shared/shared/serialize_common"
13
+ require "log_struct/shared/shared/merge_additional_data_fields"
14
+ require "log_struct/shared/shared/add_request_fields"
15
+ require_relative "../../enums/source"
16
+ require_relative "../../enums/event"
17
+ require_relative "../../enums/level"
18
+ require_relative "../../enums/log_field"
19
+
20
+ module LogStruct
21
+ module Log
22
+ class CarrierWave
23
+ class Download < T::Struct
24
+ # typed: strict
25
+ # frozen_string_literal: true
26
+
27
+ extend T::Sig
28
+
29
+ extend T::Sig
30
+
31
+ # Shared/common fields
32
+ const :source, Source::CarrierWave, default: Source::CarrierWave
33
+ const :event, Event, default: Event::Download
34
+ const :timestamp, Time, factory: -> { Time.now }
35
+ const :level, Level, default: Level::Info
36
+
37
+ const :storage, String
38
+ const :file_id, String
39
+ const :uploader, T.nilable(String), default: nil
40
+ const :model, T.nilable(String), default: nil
41
+ const :mount_point, T.nilable(String), default: nil
42
+
43
+ # Event-specific fields
44
+ const :filename, T.nilable(String), default: nil
45
+ const :mime_type, T.nilable(String), default: nil
46
+ const :size, T.nilable(Integer), default: nil
47
+
48
+ # Additional data
49
+ include LogStruct::Log::Interfaces::AdditionalDataField
50
+ const :additional_data, T.nilable(T::Hash[T.any(String, Symbol), T.untyped]), default: nil
51
+ include LogStruct::Log::Shared::MergeAdditionalDataFields
52
+
53
+ # Request fields (optional)
54
+
55
+ # Serialize shared fields
56
+ include LogStruct::Log::Interfaces::CommonFields
57
+ include LogStruct::Log::Shared::SerializeCommon
58
+
59
+ sig {
60
+ params(storage: T.untyped,
61
+ file_id: T.untyped,
62
+ uploader: T.untyped,
63
+ model: T.untyped,
64
+ mount_point: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
65
+ }
66
+ def self.base_hash(storage: nil,
67
+ file_id: nil,
68
+ uploader: nil,
69
+ model: nil,
70
+ mount_point: nil)
71
+ h = {}
72
+ h[LogField::Storage] = storage unless storage.nil?
73
+ h[LogField::FileId] = file_id unless file_id.nil?
74
+ h[LogField::Uploader] = uploader unless uploader.nil?
75
+ h[LogField::Model] = model unless model.nil?
76
+ h[LogField::MountPoint] = mount_point unless mount_point.nil?
77
+ h
78
+ end
79
+
80
+ sig {
81
+ params(storage: T.untyped,
82
+ file_id: T.untyped,
83
+ uploader: T.untyped,
84
+ model: T.untyped,
85
+ mount_point: T.untyped,
86
+ filename: T.untyped,
87
+ mime_type: T.untyped,
88
+ size: T.untyped,
89
+ additional_data: T.untyped,
90
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
91
+ }
92
+ def self.build(storage:,
93
+ file_id:,
94
+ uploader: nil,
95
+ model: nil,
96
+ mount_point: nil,
97
+ filename: nil,
98
+ mime_type: nil,
99
+ size: nil,
100
+ additional_data: nil,
101
+ timestamp: Time.now)
102
+ h = base_hash(storage: storage,
103
+ file_id: file_id,
104
+ uploader: uploader,
105
+ model: model,
106
+ mount_point: mount_point)
107
+ h[LogField::Filename] = filename unless filename.nil?
108
+ h[LogField::MimeType] = mime_type unless mime_type.nil?
109
+ h[LogField::Size] = size unless size.nil?
110
+ h
111
+ end
112
+
113
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
114
+ def to_h
115
+ self.class.build(
116
+ storage: storage,
117
+ file_id: file_id,
118
+ uploader: uploader,
119
+ model: model,
120
+ mount_point: mount_point,
121
+ filename: filename,
122
+ mime_type: mime_type,
123
+ size: size,
124
+ additional_data: additional_data,
125
+ timestamp: timestamp
126
+ )
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,141 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # AUTO-GENERATED: DO NOT EDIT
5
+ # Generated by scripts/generate_structs.rb
6
+ # Schemas dir: schemas/log_sources/
7
+ # Template: tools/codegen/templates/sorbet/event.rb.erb
8
+
9
+ require "log_struct/shared/interfaces/common_fields"
10
+ require "log_struct/shared/interfaces/additional_data_field"
11
+ require "log_struct/shared/interfaces/request_fields"
12
+ require "log_struct/shared/shared/serialize_common"
13
+ require "log_struct/shared/shared/merge_additional_data_fields"
14
+ require "log_struct/shared/shared/add_request_fields"
15
+ require_relative "../../enums/source"
16
+ require_relative "../../enums/event"
17
+ require_relative "../../enums/level"
18
+ require_relative "../../enums/log_field"
19
+
20
+ module LogStruct
21
+ module Log
22
+ class CarrierWave
23
+ class Upload < T::Struct
24
+ # typed: strict
25
+ # frozen_string_literal: true
26
+
27
+ extend T::Sig
28
+
29
+ extend T::Sig
30
+
31
+ # Shared/common fields
32
+ const :source, Source::CarrierWave, default: Source::CarrierWave
33
+ const :event, Event, default: Event::Upload
34
+ const :timestamp, Time, factory: -> { Time.now }
35
+ const :level, Level, default: Level::Info
36
+
37
+ const :storage, String
38
+ const :file_id, String
39
+ const :uploader, T.nilable(String), default: nil
40
+ const :model, T.nilable(String), default: nil
41
+ const :mount_point, T.nilable(String), default: nil
42
+
43
+ # Event-specific fields
44
+ const :filename, T.nilable(String), default: nil
45
+ const :mime_type, T.nilable(String), default: nil
46
+ const :size, T.nilable(Integer), default: nil
47
+ const :metadata, T.nilable(T::Hash[String, T.untyped]), default: nil
48
+ const :duration_ms, T.nilable(Float), default: nil
49
+
50
+ # Additional data
51
+ include LogStruct::Log::Interfaces::AdditionalDataField
52
+ const :additional_data, T.nilable(T::Hash[T.any(String, Symbol), T.untyped]), default: nil
53
+ include LogStruct::Log::Shared::MergeAdditionalDataFields
54
+
55
+ # Request fields (optional)
56
+
57
+ # Serialize shared fields
58
+ include LogStruct::Log::Interfaces::CommonFields
59
+ include LogStruct::Log::Shared::SerializeCommon
60
+
61
+ sig {
62
+ params(storage: T.untyped,
63
+ file_id: T.untyped,
64
+ uploader: T.untyped,
65
+ model: T.untyped,
66
+ mount_point: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
67
+ }
68
+ def self.base_hash(storage: nil,
69
+ file_id: nil,
70
+ uploader: nil,
71
+ model: nil,
72
+ mount_point: nil)
73
+ h = {}
74
+ h[LogField::Storage] = storage unless storage.nil?
75
+ h[LogField::FileId] = file_id unless file_id.nil?
76
+ h[LogField::Uploader] = uploader unless uploader.nil?
77
+ h[LogField::Model] = model unless model.nil?
78
+ h[LogField::MountPoint] = mount_point unless mount_point.nil?
79
+ h
80
+ end
81
+
82
+ sig {
83
+ params(storage: T.untyped,
84
+ file_id: T.untyped,
85
+ uploader: T.untyped,
86
+ model: T.untyped,
87
+ mount_point: T.untyped,
88
+ filename: T.untyped,
89
+ mime_type: T.untyped,
90
+ size: T.untyped,
91
+ metadata: T.untyped,
92
+ duration_ms: T.untyped,
93
+ additional_data: T.untyped,
94
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
95
+ }
96
+ def self.build(storage:,
97
+ file_id:,
98
+ uploader: nil,
99
+ model: nil,
100
+ mount_point: nil,
101
+ filename: nil,
102
+ mime_type: nil,
103
+ size: nil,
104
+ metadata: nil,
105
+ duration_ms: nil,
106
+ additional_data: nil,
107
+ timestamp: Time.now)
108
+ h = base_hash(storage: storage,
109
+ file_id: file_id,
110
+ uploader: uploader,
111
+ model: model,
112
+ mount_point: mount_point)
113
+ h[LogField::Filename] = filename unless filename.nil?
114
+ h[LogField::MimeType] = mime_type unless mime_type.nil?
115
+ h[LogField::Size] = size unless size.nil?
116
+ h[LogField::Metadata] = metadata unless metadata.nil?
117
+ h[LogField::DurationMs] = duration_ms unless duration_ms.nil?
118
+ h
119
+ end
120
+
121
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
122
+ def to_h
123
+ self.class.build(
124
+ storage: storage,
125
+ file_id: file_id,
126
+ uploader: uploader,
127
+ model: model,
128
+ mount_point: mount_point,
129
+ filename: filename,
130
+ mime_type: mime_type,
131
+ size: size,
132
+ metadata: metadata,
133
+ duration_ms: duration_ms,
134
+ additional_data: additional_data,
135
+ timestamp: timestamp
136
+ )
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
@@ -1,81 +1,46 @@
1
1
  # typed: strict
2
2
  # frozen_string_literal: true
3
3
 
4
- require_relative "interfaces/common_fields"
5
- require_relative "interfaces/additional_data_field"
6
- require_relative "shared/serialize_common"
7
- require_relative "shared/merge_additional_data_fields"
8
- require_relative "../enums/source"
9
- require_relative "../enums/event"
10
- require_relative "../enums/level"
11
- require_relative "../log_keys"
4
+ # AUTO-GENERATED: DO NOT EDIT
5
+ # Generated by scripts/generate_structs.rb
6
+ # Schemas dir: schemas/log_sources/
7
+ # Template: tools/codegen/templates/sorbet/source_parent.rb.erb
8
+
9
+ require_relative "carrierwave/upload"
10
+ require_relative "carrierwave/delete"
11
+ require_relative "carrierwave/download"
12
12
 
13
13
  module LogStruct
14
14
  module Log
15
- # CarrierWave log entry for structured logging
16
- class CarrierWave < T::Struct
17
- extend T::Sig
18
-
19
- include Interfaces::CommonFields
20
- include Interfaces::AdditionalDataField
21
- include SerializeCommon
22
- include MergeAdditionalDataFields
23
-
24
- CarrierWaveEvent = T.type_alias {
25
- T.any(
26
- Event::Upload,
27
- Event::Download,
28
- Event::Delete,
29
- Event::Metadata,
30
- Event::Exist,
31
- Event::Unknown
32
- )
33
- }
34
-
35
- # Common fields
36
- const :source, Source::CarrierWave, default: T.let(Source::CarrierWave, Source::CarrierWave)
37
- const :event, CarrierWaveEvent
38
- const :timestamp, Time, factory: -> { Time.now }
39
- const :level, Level, default: T.let(Level::Info, Level)
40
-
41
- # File-specific fields
42
- const :operation, T.nilable(Symbol), default: nil
43
- const :storage, T.nilable(String), default: nil
44
- const :file_id, T.nilable(String), default: nil
45
- const :filename, T.nilable(String), default: nil
46
- const :mime_type, T.nilable(String), default: nil
47
- const :size, T.nilable(Integer), default: nil
48
- const :metadata, T.nilable(T::Hash[String, T.untyped]), default: nil
49
- const :duration, T.nilable(Float), default: nil
50
-
51
- # CarrierWave-specific fields
52
- const :uploader, T.nilable(String), default: nil
53
- const :model, T.nilable(String), default: nil
54
- const :mount_point, T.nilable(String), default: nil
55
- const :additional_data, T::Hash[Symbol, T.untyped], default: {}
56
-
57
- # Convert the log entry to a hash for serialization
58
- sig { override.params(strict: T::Boolean).returns(T::Hash[Symbol, T.untyped]) }
59
- def serialize(strict = true)
60
- hash = serialize_common(strict)
61
- merge_additional_data_fields(hash)
62
-
63
- # Add file-specific fields if they're present
64
- hash[LOG_KEYS.fetch(:storage)] = storage if storage
65
- hash[LOG_KEYS.fetch(:operation)] = operation if operation
66
- hash[LOG_KEYS.fetch(:file_id)] = file_id if file_id
67
- hash[LOG_KEYS.fetch(:filename)] = filename if filename
68
- hash[LOG_KEYS.fetch(:mime_type)] = mime_type if mime_type
69
- hash[LOG_KEYS.fetch(:size)] = size if size
70
- hash[LOG_KEYS.fetch(:metadata)] = metadata if metadata
71
- hash[LOG_KEYS.fetch(:duration)] = duration if duration
72
-
73
- # Add CarrierWave-specific fields if they're present
74
- hash[LOG_KEYS.fetch(:uploader)] = uploader if uploader
75
- hash[LOG_KEYS.fetch(:model)] = model if model
76
- hash[LOG_KEYS.fetch(:mount_point)] = mount_point if mount_point
77
-
78
- hash
15
+ class CarrierWave
16
+ class BaseFields < T::Struct
17
+ extend T::Sig
18
+ const :storage, String
19
+ const :file_id, String
20
+ const :uploader, T.nilable(String), default: nil
21
+ const :model, T.nilable(String), default: nil
22
+ const :mount_point, T.nilable(String), default: nil
23
+
24
+ Kwargs = T.type_alias do
25
+ {
26
+ storage: String,
27
+ file_id: String,
28
+ uploader: T.nilable(String),
29
+ model: T.nilable(String),
30
+ mount_point: T.nilable(String)
31
+ }
32
+ end
33
+
34
+ sig { returns(Kwargs) }
35
+ def to_kwargs
36
+ {
37
+ storage: storage,
38
+ file_id: file_id,
39
+ uploader: uploader,
40
+ model: model,
41
+ mount_point: mount_point
42
+ }
43
+ end
79
44
  end
80
45
  end
81
46
  end
@@ -0,0 +1,76 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # AUTO-GENERATED: DO NOT EDIT
5
+ # Generated by scripts/generate_structs.rb
6
+ # Schemas dir: schemas/log_sources/
7
+ # Template: tools/codegen/templates/sorbet/event.rb.erb
8
+
9
+ require "log_struct/shared/interfaces/common_fields"
10
+ require "log_struct/shared/interfaces/additional_data_field"
11
+ require "log_struct/shared/interfaces/request_fields"
12
+ require "log_struct/shared/shared/serialize_common"
13
+ require "log_struct/shared/shared/merge_additional_data_fields"
14
+ require "log_struct/shared/shared/add_request_fields"
15
+ require_relative "../../enums/source"
16
+ require_relative "../../enums/event"
17
+ require_relative "../../enums/level"
18
+ require_relative "../../enums/log_field"
19
+
20
+ module LogStruct
21
+ module Log
22
+ class Dotenv
23
+ class Load < T::Struct
24
+ # typed: strict
25
+ # frozen_string_literal: true
26
+
27
+ extend T::Sig
28
+
29
+ extend T::Sig
30
+
31
+ # Shared/common fields
32
+ const :source, Source::Dotenv, default: Source::Dotenv
33
+ const :event, Event, default: Event::Load
34
+ const :timestamp, Time, factory: -> { Time.now }
35
+ const :level, Level, default: Level::Info
36
+
37
+ # Event-specific fields
38
+ const :file, String
39
+
40
+ # Additional data
41
+
42
+ # Request fields (optional)
43
+
44
+ # Serialize shared fields
45
+ include LogStruct::Log::Interfaces::CommonFields
46
+ include LogStruct::Log::Shared::SerializeCommon
47
+
48
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
49
+ def self.base_hash
50
+ {}
51
+ end
52
+
53
+ sig {
54
+ params(file: T.untyped,
55
+ additional_data: T.untyped,
56
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
57
+ }
58
+ def self.build(file:,
59
+ additional_data: nil,
60
+ timestamp: Time.now)
61
+ h = base_hash
62
+ h[LogField::File] = file
63
+ h
64
+ end
65
+
66
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
67
+ def to_h
68
+ self.class.build(
69
+ file: file,
70
+ timestamp: timestamp
71
+ )
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,76 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # AUTO-GENERATED: DO NOT EDIT
5
+ # Generated by scripts/generate_structs.rb
6
+ # Schemas dir: schemas/log_sources/
7
+ # Template: tools/codegen/templates/sorbet/event.rb.erb
8
+
9
+ require "log_struct/shared/interfaces/common_fields"
10
+ require "log_struct/shared/interfaces/additional_data_field"
11
+ require "log_struct/shared/interfaces/request_fields"
12
+ require "log_struct/shared/shared/serialize_common"
13
+ require "log_struct/shared/shared/merge_additional_data_fields"
14
+ require "log_struct/shared/shared/add_request_fields"
15
+ require_relative "../../enums/source"
16
+ require_relative "../../enums/event"
17
+ require_relative "../../enums/level"
18
+ require_relative "../../enums/log_field"
19
+
20
+ module LogStruct
21
+ module Log
22
+ class Dotenv
23
+ class Restore < T::Struct
24
+ # typed: strict
25
+ # frozen_string_literal: true
26
+
27
+ extend T::Sig
28
+
29
+ extend T::Sig
30
+
31
+ # Shared/common fields
32
+ const :source, Source::Dotenv, default: Source::Dotenv
33
+ const :event, Event, default: Event::Restore
34
+ const :timestamp, Time, factory: -> { Time.now }
35
+ const :level, Level, default: Level::Info
36
+
37
+ # Event-specific fields
38
+ const :vars, T::Array[String]
39
+
40
+ # Additional data
41
+
42
+ # Request fields (optional)
43
+
44
+ # Serialize shared fields
45
+ include LogStruct::Log::Interfaces::CommonFields
46
+ include LogStruct::Log::Shared::SerializeCommon
47
+
48
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
49
+ def self.base_hash
50
+ {}
51
+ end
52
+
53
+ sig {
54
+ params(vars: T.untyped,
55
+ additional_data: T.untyped,
56
+ timestamp: T.untyped).returns(T::Hash[LogStruct::LogField, T.untyped])
57
+ }
58
+ def self.build(vars:,
59
+ additional_data: nil,
60
+ timestamp: Time.now)
61
+ h = base_hash
62
+ h[LogField::Vars] = vars
63
+ h
64
+ end
65
+
66
+ sig { returns(T::Hash[LogStruct::LogField, T.untyped]) }
67
+ def to_h
68
+ self.class.build(
69
+ vars: vars,
70
+ timestamp: timestamp
71
+ )
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end