Class: ClaudeHooks::Output::MessageDisplay

Inherits:
Base
  • Object
show all
Defined in:
lib/claude_hooks/output/message_display.rb

Overview

MessageDisplay is display-only — exit code and decision fields are ignored. Only hookSpecificOutput.displayContent has an effect (replaces on-screen text).

Instance Attribute Summary

Attributes inherited from Base

#data

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#continue?, for_hook_type, #hook_specific_output, #initialize, #output_and_exit, #stop_reason, #suppress_output?, #system_message, #terminal_sequence, #to_json

Constructor Details

This class inherits a constructor from ClaudeHooks::Output::Base

Class Method Details

.merge(*outputs) ⇒ Object

Last non-nil displayContent wins.



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/claude_hooks/output/message_display.rb', line 23

def self.merge(*outputs)
  compacted_outputs = outputs.compact
  return compacted_outputs.first if compacted_outputs.length == 1
  return super(*outputs) if compacted_outputs.empty?

  merged = super(*outputs)
  merged_data = merged.data
  last_content = nil

  compacted_outputs.each do |output|
    output_data = output.respond_to?(:data) ? output.data : output
    content = output_data.dig('hookSpecificOutput', 'displayContent')
    last_content = content unless content.nil?
  end

  unless last_content.nil?
    merged_data['hookSpecificOutput'] = {
      'hookEventName' => 'MessageDisplay',
      'displayContent' => last_content
    }
  end

  new(merged_data)
end

Instance Method Details

#display_contentObject



10
11
12
# File 'lib/claude_hooks/output/message_display.rb', line 10

def display_content
  hook_specific_output['displayContent']
end

#exit_codeObject



14
15
16
# File 'lib/claude_hooks/output/message_display.rb', line 14

def exit_code
  0
end

#output_streamObject



18
19
20
# File 'lib/claude_hooks/output/message_display.rb', line 18

def output_stream
  :stdout
end