Class: Ace::TestRunner::Atoms::TimestampGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/test_runner/atoms/timestamp_generator.rb

Overview

Generates Base36 compact IDs for test reports

Uses ace-b36ts to generate 6-character compact IDs (e.g., “i50jj3”) for test report directories and files. Reports are temporary, so no backward compatibility with legacy timestamp format is needed.

Examples:

Generate a compact ID

generator = TimestampGenerator.new
generator.generate  # => "i50jj3"

Generate ISO timestamp for human-readable output

generator = TimestampGenerator.new
generator.iso_timestamp  # => "2025-01-06T12:30:00"

Constant Summary collapse

ISO_FORMAT =
"%Y-%m-%dT%H:%M:%S"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.detect_format(value) ⇒ Symbol?

Detect the format of an ID string

Parameters:

  • value (String)

    The ID string to analyze

Returns:

  • (Symbol, nil)

    :“2sec” for valid Base36 IDs, :timestamp for legacy format, or nil



83
84
85
# File 'lib/ace/test_runner/atoms/timestamp_generator.rb', line 83

def self.detect_format(value)
  Ace::B36ts.detect_format(value)
end

Instance Method Details

#directory_name(time = Time.now) ⇒ String

Generate a directory name (alias for generate)

Parameters:

  • time (Time) (defaults to: Time.now)

    The time to encode (default: Time.now)

Returns:

  • (String)

    6-character Base36 compact ID



45
46
47
# File 'lib/ace/test_runner/atoms/timestamp_generator.rb', line 45

def directory_name(time = Time.now)
  generate(time)
end

#elapsed_time(start_time, end_time = Time.now) ⇒ String

Calculate elapsed time between two times

Parameters:

  • start_time (Time)

    Start time

  • end_time (Time) (defaults to: Time.now)

    End time (default: Time.now)

Returns:

  • (String)

    Human-readable duration



74
75
76
77
# File 'lib/ace/test_runner/atoms/timestamp_generator.rb', line 74

def elapsed_time(start_time, end_time = Time.now)
  duration = end_time - start_time
  format_duration(duration)
end

#filename_timestamp(time = Time.now, extension = nil) ⇒ String

Generate a filename timestamp with optional extension

Parameters:

  • time (Time) (defaults to: Time.now)

    The time to encode (default: Time.now)

  • extension (String, nil) (defaults to: nil)

    Optional file extension

Returns:

  • (String)

    Filename with optional extension



54
55
56
57
# File 'lib/ace/test_runner/atoms/timestamp_generator.rb', line 54

def filename_timestamp(time = Time.now, extension = nil)
  base = generate(time)
  extension ? "#{base}#{extension}" : base
end

#generate(time = Time.now) ⇒ String

Generate a Base36 compact ID for the given time

Parameters:

  • time (Time) (defaults to: Time.now)

    The time to encode (default: Time.now)

Returns:

  • (String)

    6-character Base36 compact ID



29
30
31
# File 'lib/ace/test_runner/atoms/timestamp_generator.rb', line 29

def generate(time = Time.now)
  Ace::B36ts.encode(time)
end

#iso_timestamp(time = Time.now) ⇒ String

Generate an ISO timestamp for human-readable output

Parameters:

  • time (Time) (defaults to: Time.now)

    The time to format (default: Time.now)

Returns:

  • (String)

    ISO formatted timestamp



37
38
39
# File 'lib/ace/test_runner/atoms/timestamp_generator.rb', line 37

def iso_timestamp(time = Time.now)
  time.strftime(ISO_FORMAT)
end

#parse(id_str) ⇒ Time?

Parse a Base36 compact ID string to Time

Parameters:

  • id_str (String)

    The Base36 ID string to parse

Returns:

  • (Time, nil)

    Parsed time or nil if invalid



63
64
65
66
67
# File 'lib/ace/test_runner/atoms/timestamp_generator.rb', line 63

def parse(id_str)
  Ace::B36ts.decode(id_str)
rescue ArgumentError
  nil
end