Skipper.Client (skipper_core v1.0.0)

Copy Markdown View Source

Reads the spreadsheet: primary sheet plus reference sheets, merged.

Summary

Functions

Fetch the primary sheet and merge every reference sheet into it (latest date wins). A failing reference sheet is skipped with a warning.

Parse a disabledUntil cell. Only strict YYYY-MM-DD is accepted; the result is midnight UTC of the following day, so the test stays disabled for the whole calendar day. Empty means no date. row (1-based sheet row, 0 = unknown) only appears in the error message.

Types

entry()

@type entry() :: %{
  test_id: String.t(),
  disabled_until: DateTime.t() | nil,
  notes: String.t(),
  row: non_neg_integer()
}

sheet()

@type sheet() :: %{
  sheet_name: String.t(),
  sheet_id: integer(),
  header: [String.t()],
  entries: [entry()]
}

Functions

fetch_all(api, config)

@spec fetch_all(Skipper.SheetsApi.api(), Skipper.Config.t()) ::
  {:ok, %{primary: sheet(), entries: [entry()]}} | {:error, String.t()}

Fetch the primary sheet and merge every reference sheet into it (latest date wins). A failing reference sheet is skipped with a warning.

parse_disabled_until(raw, row \\ 0)

@spec parse_disabled_until(String.t(), non_neg_integer()) ::
  {:ok, DateTime.t() | nil} | {:error, String.t()}

Parse a disabledUntil cell. Only strict YYYY-MM-DD is accepted; the result is midnight UTC of the following day, so the test stays disabled for the whole calendar day. Empty means no date. row (1-based sheet row, 0 = unknown) only appears in the error message.