Class: Gitlab::Chat::Output
- Inherits:
-
Object
- Object
- Gitlab::Chat::Output
- Defined in:
- lib/gitlab/chat/output.rb
Overview
Class for gathering and formatting the output of a ‘Ci::Build`.
Constant Summary collapse
- MissingBuildSectionError =
Class.new(StandardError)
- PRIMARY_SECTION =
The primary trace section to look for.
'chat_reply'
- FALLBACK_SECTION =
The backup trace section in case the primary one could not be found.
'step_script'
- LEGACY_SECTION =
‘step_script` used to be `build_script` before runner 13.1
'build_script'
Instance Attribute Summary collapse
-
#build ⇒ Object
readonly
Returns the value of attribute build.
Instance Method Summary collapse
-
#find_build_trace_section(name) ⇒ Object
Returns the trace section for the given name, or ‘nil` if the section could not be found.
-
#initialize(build) ⇒ Output
constructor
build - The ‘Ci::Build` to obtain the output from.
-
#to_s ⇒ Object
Returns a ‘String` containing the output of the build.
- #trace ⇒ Object
- #trace_sections ⇒ Object
-
#without_executed_command_line(output) ⇒ Object
Removes the line containing the executed command from the build output.
Constructor Details
#initialize(build) ⇒ Output
build - The ‘Ci::Build` to obtain the output from.
21 22 23 |
# File 'lib/gitlab/chat/output.rb', line 21 def initialize(build) @build = build end |
Instance Attribute Details
#build ⇒ Object (readonly)
Returns the value of attribute build.
7 8 9 |
# File 'lib/gitlab/chat/output.rb', line 7 def build @build end |
Instance Method Details
#find_build_trace_section(name) ⇒ Object
Returns the trace section for the given name, or ‘nil` if the section could not be found.
name - The name of the trace section to find.
65 66 67 |
# File 'lib/gitlab/chat/output.rb', line 65 def find_build_trace_section(name) trace_sections.find { |s| s[:name] == name } end |
#to_s ⇒ Object
Returns a ‘String` containing the output of the build.
The output _does not_ include the command that was executed.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/gitlab/chat/output.rb', line 28 def to_s offset, length = read_offset_and_length trace.read do |stream| stream.seek(offset) output = stream .stream .read(length) .force_encoding(Encoding.default_external) without_executed_command_line(output) end end |
#trace ⇒ Object
73 74 75 |
# File 'lib/gitlab/chat/output.rb', line 73 def trace @trace ||= build.trace end |
#trace_sections ⇒ Object
69 70 71 |
# File 'lib/gitlab/chat/output.rb', line 69 def trace_sections @trace_sections ||= trace.extract_sections end |
#without_executed_command_line(output) ⇒ Object
Removes the line containing the executed command from the build output.
output - A ‘String` containing the output of a trace section.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/gitlab/chat/output.rb', line 46 def without_executed_command_line(output) # If `output.split("\n")` produces an empty Array then the slicing that # follows it will produce a nil. For example: # # "\n".split("\n") # => [] # "\n".split("\n")[1..] # => nil # # To work around this we only "join" if we're given an Array. if (converted = output.split("\n")[1..]) converted.join("\n") else '' end end |