Class: Assistant::LogItem
- Inherits:
-
Object
- Object
- Assistant::LogItem
- Defined in:
- lib/assistant/log_item.rb
Overview
A single structured log entry produced by Service (directly via
LogList#add_log or through one of the log_item_* shorthands).
Construction is strict since 1.0 (M10): invalid attributes raise
ArgumentError rather than producing an instance whose #valid?
returns false. See docs/v1/06-migration-0x-to-1.md for the
rationale.
Constant Summary collapse
- VALID_LEVELS =
The exhaustive set of accepted
level:values, in display order. %i[info warning error].freeze
- ERRORS =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Validation rules applied in
#initialize. Each entry pairs a human message with the predicate that must hold. Internal. [ ["level must be one of [#{VALID_LEVELS.join(', ')}]", :valid_level?], ['source must be present and different from detail', :valid_source?], ['detail must be present and different from source', :valid_detail?], ['message must be present', :valid_message?] ].freeze
Instance Attribute Summary collapse
- #detail ⇒ Symbol, ... readonly
- #level ⇒ Symbol, ... readonly
- #message ⇒ Symbol, ... readonly
- #source ⇒ Symbol, ... readonly
- #trace ⇒ Symbol, ... readonly
Instance Method Summary collapse
-
#initialize(level:, source:, detail:, message:, trace: nil) ⇒ LogItem
constructor
A new instance of LogItem.
-
#item ⇒ Hash{Symbol => Object}
Hash view with keys
:level,:source,:detail,:message,:trace. -
#valid? ⇒ Boolean
Always
truefor instances constructed via #initialize (which raises on invalid input). -
#valid_detail? ⇒ Boolean
True when
detailis non-empty and not equal tosource. -
#valid_level? ⇒ Boolean
True when
levelis one of VALID_LEVELS. -
#valid_message? ⇒ Boolean
True when
messagecontains at least one non-whitespace character. -
#valid_source? ⇒ Boolean
True when
sourceis non-empty and not equal todetail.
Constructor Details
#initialize(level:, source:, detail:, message:, trace: nil) ⇒ LogItem
Returns a new instance of LogItem.
51 52 53 54 55 56 57 58 |
# File 'lib/assistant/log_item.rb', line 51 def initialize(level:, source:, detail:, message:, trace: nil) @level = normalize_symbol(level) @source = normalize_symbol(source) @detail = normalize_symbol(detail) @message = .to_s @trace = trace validate! end |
Instance Attribute Details
#detail ⇒ Symbol, ... (readonly)
43 |
# File 'lib/assistant/log_item.rb', line 43 attr_reader :level, :source, :detail, :message, :trace |
#level ⇒ Symbol, ... (readonly)
43 44 45 |
# File 'lib/assistant/log_item.rb', line 43 def level @level end |
#message ⇒ Symbol, ... (readonly)
43 |
# File 'lib/assistant/log_item.rb', line 43 attr_reader :level, :source, :detail, :message, :trace |
#source ⇒ Symbol, ... (readonly)
43 |
# File 'lib/assistant/log_item.rb', line 43 attr_reader :level, :source, :detail, :message, :trace |
#trace ⇒ Symbol, ... (readonly)
43 |
# File 'lib/assistant/log_item.rb', line 43 attr_reader :level, :source, :detail, :message, :trace |
Instance Method Details
#item ⇒ Hash{Symbol => Object}
Returns hash view with keys :level, :source, :detail, :message, :trace.
65 66 67 |
# File 'lib/assistant/log_item.rb', line 65 def item { level:, source:, detail:, message:, trace: } end |
#valid? ⇒ Boolean
Returns always true for instances constructed via #initialize (which raises on invalid input).
Retained for introspection and downstream tooling.
62 |
# File 'lib/assistant/log_item.rb', line 62 def valid? = [valid_level?, valid_source?, valid_detail?, ].all? |
#valid_detail? ⇒ Boolean
Returns true when detail is non-empty and not equal to source.
83 |
# File 'lib/assistant/log_item.rb', line 83 def valid_detail? = present_log_attribute?(detail) && source != detail |
#valid_level? ⇒ Boolean
Returns true when level is one of VALID_LEVELS.
77 |
# File 'lib/assistant/log_item.rb', line 77 def valid_level? = VALID_LEVELS.include?(level) |
#valid_message? ⇒ Boolean
Returns true when message contains at least one non-whitespace character.
86 |
# File 'lib/assistant/log_item.rb', line 86 def = !.strip.empty? |
#valid_source? ⇒ Boolean
Returns true when source is non-empty and not equal to detail.
80 |
# File 'lib/assistant/log_item.rb', line 80 def valid_source? = present_log_attribute?(source) && detail != source |