{"id":15296257,"url":"https://github.com/tanigami/specification-php","last_synced_at":"2025-06-15T00:06:38.114Z","repository":{"id":54754619,"uuid":"111306638","full_name":"tanigami/specification-php","owner":"tanigami","description":"Basic classes for Specification pattern in PHP.","archived":false,"fork":false,"pushed_at":"2023-06-06T06:27:46.000Z","size":18,"stargazers_count":31,"open_issues_count":0,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-15T07:08:02.847Z","etag":null,"topics":["php7","specification-pattern"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tanigami.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-11-19T15:16:27.000Z","updated_at":"2025-01-17T23:22:50.000Z","dependencies_parsed_at":"2024-10-15T01:21:39.929Z","dependency_job_id":"45f79ca8-78af-4431-8b24-1710620564ac","html_url":"https://github.com/tanigami/specification-php","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/tanigami/specification-php","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tanigami%2Fspecification-php","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tanigami%2Fspecification-php/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tanigami%2Fspecification-php/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tanigami%2Fspecification-php/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tanigami","download_url":"https://codeload.github.com/tanigami/specification-php/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tanigami%2Fspecification-php/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259901382,"owners_count":22929224,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["php7","specification-pattern"],"created_at":"2024-09-30T18:09:52.506Z","updated_at":"2025-06-15T00:06:38.083Z","avatar_url":"https://github.com/tanigami.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PHP Specification\n\n[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/tanigami/specification-php/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/tanigami/specification-php/?branch=master)\n[![Code Coverage](https://scrutinizer-ci.com/g/tanigami/specification-php/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/tanigami/specification-php/?branch=master)\n[![Build Status](https://scrutinizer-ci.com/g/tanigami/specification-php/badges/build.png?b=master)](https://scrutinizer-ci.com/g/tanigami/specification-php/build-status/master)\n\nBasic classes for [Specification pattern](https://en.wikipedia.org/wiki/Specification_pattern) in PHP. On top of the typical set of `and`, `or` and `not` specificaitons, `anyOf`, `oneOf`, `noneOf` specifications are proposed.\n\nThis package is based on the implementation in [carlosbuenosvinos/ddd](https://github.com/dddinphp/ddd).\n\n## Installation\n\n```\n$ composer require tanigami/specification\n```\n\n## Usage example\n\n```php\n\u003c?php\n\nuse Tanigami\\Specification\\Specification;\nuse Tanigami\\Specification\\OneOfSpecification;\n\nclass Order\n{\n    public function isPaid()\n    {\n        return true;\n    }\n\n    public function isShipped()\n    {\n        return false;\n    }\n    \n    public function isCancelled()\n    {\n        return false;\n    }\n}\n\nclass UnshippedOrderSpecification extends Specification\n{\n    public function isSatisfiedBy($order): bool\n    {\n        return !$order-\u003eisShipped();\n    }\n}\n\nclass PaidOrderSpecification extends Specification\n{\n    public function isSatisfiedBy($order): bool\n    {\n        return $order-\u003eisPaid();\n    }\n}\n\nclass CancelledOrderSpecification extends Specification\n{\n    public function isSatisfiedBy($order): bool\n    {\n        return $order-\u003eisCancelled();\n    }\n}\n\n$paid = new PaidOrderSpecification;\n$unshipped = new UnshippedOrderSpecification;\n$cancelled = new CancelledOrderSpecification;\n\n\n$paid-\u003eand($unshipped)-\u003eisSatisfiedBy(new Order); // =\u003e true\n(new OneOfSpecification($paid, $unshipped, $cancelled))-\u003eisSatisfiedBy(new Order); // =\u003e true\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftanigami%2Fspecification-php","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftanigami%2Fspecification-php","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftanigami%2Fspecification-php/lists"}