class AsciicastSnapshotUpdater def update(asciicast, at_seconds = nil) at_seconds ||= asciicast.snapshot_at || asciicast.duration / 2 snapshot = generate_snapshot(asciicast, at_seconds) asciicast.update_attribute(:snapshot, snapshot) end private def generate_snapshot(asciicast, at_seconds) asciicast.with_terminal do |terminal| Film.new(asciicast.stdout, terminal).snapshot_at(at_seconds) end end end