Skip to content

v1.2.0 — DX bundle

Choose a tag to compare

@gulaandrij gulaandrij released this 07 Jun 19:36
· 5 commits to main since this release

DX-focused release. Seven new capabilities, no breaking changes from 1.1.x.

What's new

Introspection commands

  • google-sheets:list — every configured binding
  • google-sheets:tabs <binding> — tabs in a bound spreadsheet
  • google-sheets:peek <binding> [sheet] [--rows --range] — preview rows as a table
  • google-sheets:doctor — probe each binding, non-zero exit on failure (deploy-pipeline friendly)

Typed reads

`SheetsService::readEntities(MyDto::class)` denormalizes rows into typed DTOs via the Symfony Serializer. Use the new `#[SheetColumn('Header Name')]` attribute on DTO properties for friendly-name mapping.

Streaming

`SheetsService::readAssocIterable(int $batchSize = 500): \Generator` walks giant sheets in column-letter-paged batches — no full-sheet load.

Per-binding caching

Add `cache: {ttl: , pool: cache.app}` to a spreadsheet entry and reads memoise through Symfony cache contracts. Tracing wins over caching in dev so the profiler shows real Sheets calls.

Profiler enhancements

  • Per-binding groups in the panel with sub-totals
  • Caller-origin column links each call back to the file that triggered it

Test fake

`Gulaandrij\GoogleSheetsBundle\Test\InMemorySheetsService` — drop-in for SheetsService backed by an in-memory map. Skip Google entirely in functional tests.

Other

`SheetsRegistry` service exposes the bindings catalog programmatically. `SheetsService` is no longer final (subclasses are bundle internals).

Install / upgrade

```bash
composer require gulaandrij/google-sheets-bundle:^1.2
```

Full CHANGELOG.