PHPackages                             bartfeenstra/doobie - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. bartfeenstra/doobie

AbandonedArchivedLibrary[Utility &amp; Helpers](/categories/utility)

bartfeenstra/doobie
===================

Doobie ("do by") allows PHP @todo annotations to be extended with metadata to specify by which event the described action must have been taken.

09PHP

Since May 21Pushed 11y ago1 watchersCompare

[ Source](https://github.com/bartfeenstra/Doobie)[ Packagist](https://packagist.org/packages/bartfeenstra/doobie)[ RSS](/packages/bartfeenstra-doobie/feed)WikiDiscussions master Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

Doobie
======

[](#doobie)

[![Build Status](https://camo.githubusercontent.com/9c219704319e1cb28fee06bd77340af77cc0837bbf77147c100c71b0763b9997/68747470733a2f2f7472617669732d63692e6f72672f626172746665656e737472612f446f6f6269652e706e673f6272616e63683d6d6173746572)](https://travis-ci.org/bartfeenstra/Dobie)[![Coverage Status](https://camo.githubusercontent.com/ce05ecbd5050cfa4784680a976e7bd1472eedae460dd1cdc1451c81bbbe5aca8/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f626172746665656e737472612f446f6f6269652f62616467652e706e673f6272616e63683d6d6173746572)](https://coveralls.io/r/bartfeenstra/Doobie?branch=master)[![Latest Stable Version](https://camo.githubusercontent.com/b7b3e2aaec948bf9b814dd69950311d14a58a246cadab277cab18570e3a7a9d5/68747470733a2f2f706f7365722e707567782e6f72672f626172746665656e737472612f446f6f6269652f762f737461626c652e706e67)](https://packagist.org/packages/bartfeenstra/Doobie)

Doobie (*"do by"*) allows `@todo` annotations to be extended with metadata to specify by which event the described action must have been taken.

Doobie was inspired by [andyw8/do\_by](https://github.com/andyw8/do_by), which is specific to Ruby.

Usage
=====

[](#usage)

Any `@todo` annotation can contain a Doobie marker that is formatted like `[doobie:type:expected_value]`, where `type` is the type of constraint that must be checked (such as `php-version` or `datetime`), and `expected_value` is the value the constraint type must have for the marker to become expired.

php-version
-----------

[](#php-version)

This built-in constraint type compares the expected and actual PHP versions. Use like `[doobie:php-version:>=5.5]`.

datetime
--------

[](#datetime)

This built-in constraint type compares the expected and actual dates and times. Use like `[doobie:datetime:2014-05-20 00:00 +0]`

PHPUnit
-------

[](#phpunit)

In order to test all markers through PHPUnit, write a test case that instantiates one or more file finders (`\BartFeenstra\Doobie\FileFinder\FileFinderInterface`), parsers (`\BartFeenstra\Doobie\Parser\ParserInterface`), and constraint evaluators (`\BartFeenstra\Doobie\Constraint\ConstriantEvaluatorInterface`). The test case can then use `\BartFeenstra\Doobie\PhpUnit\AssertTrait` and `$this->assertDoobieMarkers($file_finders, $parsers, $constraint_evaluators)`to trigger test failures for expires markers.

###  Health Score

20

—

LowBetter than 14% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/7d655ade44481e4066f8c9ef8ae638d076e82de4fc086ed7bfb4eb03ff0b5fab?d=identicon)[bartfeenstra](/maintainers/bartfeenstra)

---

Top Contributors

[![bartfeenstra](https://avatars.githubusercontent.com/u/376735?v=4)](https://github.com/bartfeenstra "bartfeenstra (11 commits)")

### Embed Badge

![Health badge](/badges/bartfeenstra-doobie/health.svg)

```
[![Health](https://phpackages.com/badges/bartfeenstra-doobie/health.svg)](https://phpackages.com/packages/bartfeenstra-doobie)
```

###  Alternatives

[ishanvyas22/asset-mix

Asset Mix plugin for CakePHP

3375.4k2](/packages/ishanvyas22-asset-mix)[prgayman/laravel-zatca

Laravel package a helper to Generate the QR code and signed it for ZATCA E-invoicing

2926.9k1](/packages/prgayman-laravel-zatca)[ducks-project/spl-types

Polyfill Module for SplType PHP extension. This extension aims at helping people making PHP a stronger typed language and can be a good alternative to scalar type hinting. It provides different typehandling classes as such as integer, float, bool, enum and string

1032.4k](/packages/ducks-project-spl-types)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
