Module: Julewire::Core::CLI::LogFormats
- Defined in:
- lib/julewire/core/cli/log_formats.rb,
lib/julewire/core/cli/log_formats/console_text.rb,
lib/julewire/core/cli/log_formats/record_decoder.rb,
lib/julewire/core/cli/log_formats/core_json_decoder.rb,
lib/julewire/core/cli/log_formats/core_json_encoder.rb
Defined Under Namespace
Modules: CoreJsonDecoder, CoreJsonEncoder, RecordDecoder
Classes: ConsoleText, Entry
Constant Summary
collapse
- AUTO_FORMAT =
:auto
- FORMAT_NAME_PATTERN =
/\A[a-z][a-z0-9_]*\z/
Class Method Summary
collapse
Class Method Details
.decode(payload, format: AUTO_FORMAT) ⇒ Object
30
31
32
33
34
35
36
|
# File 'lib/julewire/core/cli/log_formats.rb', line 30
def decode(payload, format: AUTO_FORMAT)
raise TypeError, "log entry must be a JSON object" unless payload.is_a?(Hash)
format = normalize(format)
entry = format == AUTO_FORMAT ? auto_decode_entry(payload) : named_decode_entry(format, payload)
entry.decoder.call(payload)
end
|
.encode(record, format:) ⇒ Object
38
39
40
41
42
|
# File 'lib/julewire/core/cli/log_formats.rb', line 38
def encode(record, format:)
name = normalize(format)
entry = named_encode_entry(name)
entry.encoder.call(record)
end
|
.load(name) ⇒ Object
60
61
62
63
64
65
|
# File 'lib/julewire/core/cli/log_formats.rb', line 60
def load(name)
path = "julewire/#{name}"
require path
rescue LoadError => e
raise unless e.path == path
end
|
.normalize(value) ⇒ Object
53
54
55
56
57
58
|
# File 'lib/julewire/core/cli/log_formats.rb', line 53
def normalize(value)
name = Core.normalize_name(value, name: "log format")
return name if name.to_s.match?(FORMAT_NAME_PATTERN)
raise ArgumentError, "log format must contain lowercase letters, digits, or underscores"
end
|
.record_from_json_line(line, line_number:, format: AUTO_FORMAT) ⇒ Object
44
45
46
47
48
49
50
51
|
# File 'lib/julewire/core/cli/log_formats.rb', line 44
def record_from_json_line(line, line_number:, format: AUTO_FORMAT)
payload = JSON.parse(line)
Records::Record.from_normalized_hash(decode(payload, format: format))
rescue JSON::ParserError => e
raise ArgumentError, "line #{line_number}: invalid JSON: #{e.message}"
rescue TypeError, ArgumentError => e
raise ArgumentError, "line #{line_number}: #{e.message}"
end
|
.register(name, decoder: nil, encoder: nil, priority: 0) ⇒ Object
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/julewire/core/cli/log_formats.rb', line 14
def register(name, decoder: nil, encoder: nil, priority: 0)
name = normalize(name)
validate_component(decoder, :decoder) if decoder
validate_component(encoder, :encoder) if encoder
existing = @entries.find { it.name == name }
priority = priority.to_i
entry = Entry.new(
name: name,
decoder: decoder || existing&.decoder,
encoder: encoder || existing&.encoder,
priority: priority.zero? && existing ? existing.priority : priority
)
@entries = @entries.reject { it.name == name } + [entry]
entry
end
|