Class: AsciinemaWin::Asciicast::Writer

Inherits:
Object
  • Object
show all
Defined in:
lib/asciinema_win/asciicast.rb

Overview

Writer for creating asciicast recordings

Examples:

Write a recording

header = Asciicast::Header.new(width: 80, height: 24)
File.open("recording.cast", "w") do |file|
  writer = Asciicast::Writer.new(file, header)
  writer.write_output(0.0, "Hello\r\n")
  writer.write_output(0.5, "World\r\n")
  writer.close
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(io, header) ⇒ Writer

Create a new writer

Parameters:

  • io (IO)

    Output stream

  • header (Header)

    Recording header



306
307
308
309
310
311
312
313
314
315
# File 'lib/asciinema_win/asciicast.rb', line 306

def initialize(io, header)
  @io = io
  @header = header
  @last_event_time = 0.0
  @closed = false
  @event_count = 0

  # Write header immediately
  write_header
end

Instance Attribute Details

#headerHeader (readonly)

Returns Recording header.

Returns:

  • (Header)

    Recording header



297
298
299
# File 'lib/asciinema_win/asciicast.rb', line 297

def header
  @header
end

#last_event_timeFloat (readonly)

Returns Last event time (for duration calculation).

Returns:

  • (Float)

    Last event time (for duration calculation)



300
301
302
# File 'lib/asciinema_win/asciicast.rb', line 300

def last_event_time
  @last_event_time
end

Instance Method Details

#closevoid

This method returns an undefined value.

Close the writer and finalize the recording



369
370
371
372
373
374
# File 'lib/asciinema_win/asciicast.rb', line 369

def close
  return if @closed

  @closed = true
  @io.flush if @io.respond_to?(:flush)
end

#closed?Boolean

Returns Whether the writer is closed.

Returns:

  • (Boolean)

    Whether the writer is closed



377
378
379
# File 'lib/asciinema_win/asciicast.rb', line 377

def closed?
  @closed
end

#event_countInteger

Returns Number of events written.

Returns:

  • (Integer)

    Number of events written



382
383
384
# File 'lib/asciinema_win/asciicast.rb', line 382

def event_count
  @event_count
end

#write_event(event) ⇒ void

This method returns an undefined value.

Write a generic event

Parameters:

  • event (Event)

    Event to write

Raises:



358
359
360
361
362
363
364
# File 'lib/asciinema_win/asciicast.rb', line 358

def write_event(event)
  raise RecordingError, "Writer is closed" if @closed

  @io.puts(event.to_json)
  @last_event_time = event.time
  @event_count += 1
end

#write_input(time, data) ⇒ void

This method returns an undefined value.

Write an input event

Parameters:

  • time (Float)

    Time offset in seconds

  • data (String)

    Input data



331
332
333
# File 'lib/asciinema_win/asciicast.rb', line 331

def write_input(time, data)
  write_event(Event.new(time, EventType::INPUT, data))
end

#write_marker(time, label = "") ⇒ void

This method returns an undefined value.

Write a marker event

Parameters:

  • time (Float)

    Time offset in seconds

  • label (String) (defaults to: "")

    Marker label



350
351
352
# File 'lib/asciinema_win/asciicast.rb', line 350

def write_marker(time, label = "")
  write_event(Event.new(time, EventType::MARKER, label))
end

#write_output(time, data) ⇒ void

This method returns an undefined value.

Write an output event

Parameters:

  • time (Float)

    Time offset in seconds

  • data (String)

    Output data



322
323
324
# File 'lib/asciinema_win/asciicast.rb', line 322

def write_output(time, data)
  write_event(Event.new(time, EventType::OUTPUT, data))
end

#write_resize(time, width, height) ⇒ void

This method returns an undefined value.

Write a resize event

Parameters:

  • time (Float)

    Time offset in seconds

  • width (Integer)

    New width

  • height (Integer)

    New height



341
342
343
# File 'lib/asciinema_win/asciicast.rb', line 341

def write_resize(time, width, height)
  write_event(Event.new(time, EventType::RESIZE, "#{width}x#{height}"))
end