{"id":18463725,"url":"https://github.com/commandstring/bloodtypes","last_synced_at":"2025-10-30T10:41:44.737Z","repository":{"id":166588470,"uuid":"642066365","full_name":"CommandString/BloodTypes","owner":"CommandString","description":"I was bored so I created a composer package for blood types","archived":false,"fork":false,"pushed_at":"2023-05-19T13:30:06.000Z","size":163,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-16T16:57:59.149Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://blood.cmdstr.dev","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/CommandString.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":"2023-05-17T18:40:36.000Z","updated_at":"2023-05-19T05:39:18.000Z","dependencies_parsed_at":"2023-05-30T20:46:00.478Z","dependency_job_id":null,"html_url":"https://github.com/CommandString/BloodTypes","commit_stats":null,"previous_names":["commandstring/bloodtypes"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CommandString%2FBloodTypes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CommandString%2FBloodTypes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CommandString%2FBloodTypes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CommandString%2FBloodTypes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CommandString","download_url":"https://codeload.github.com/CommandString/BloodTypes/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251320147,"owners_count":21570528,"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":[],"created_at":"2024-11-06T09:07:47.880Z","updated_at":"2025-10-30T10:41:39.718Z","avatar_url":"https://github.com/CommandString.png","language":"PHP","readme":"# BloodTypes\nA composer package for bloodtypes (website is in the [gui](https://github.com/CommandString/BloodTypes/tree/gui/) branch)\n\n# Installation\n\n`composer require commandstring/blood`\n\n# Usage\n\n## Creating Blood\n\nYou can either create a blood object with **proteins**, **antibodies**, or **type**\n\n```php\nuse CommandString\\Blood\\Blood;\nuse CommandString\\Blood\\Enums\\BloodType;\nuse CommandString\\Blood\\Enums\\Protein;\n\n$bloodFromType       = new Blood(BloodType::A_POSITIVE);\n$bloodFromProteins   = Blood::fromProteins(Protein::A, Protein::RH);\n$bloodFromAntibodies = Blood::fromAntibodies(Antibody::B, Antibody::RH);\n```\n\n## Checking compatibility between blood types\n\n```php\nuse CommandString\\Blood\\Blood;\nuse CommandString\\Blood\\Enums\\BloodType;\nuse CommandString\\Blood\\Enums\\Protein;\n\n$bloodType1 = new Blood(BloodType::A_POSITIVE);\n$bloodType2 = new Blood(BloodType::O_NEGATIVE);\n\n$bloodType1-\u003ecanDonateTo($bloodType2); // false\n$bloodType1-\u003ecanReceiveFrom($bloodType2); // true\n$bloodType2-\u003ecanDonateTo($bloodType1); // true\n$bloodType2-\u003ecanReceiveFrom($bloodType1); // false\n```\n\n## Getting Proteins and Antibodies\n\n```php\nuse CommandString\\Blood\\Enums\\Protein;\n\n/** \n * @var \\CommandString\\Blood\\Blood $bloodType1 \n * @var Protein[] $proteins\n * @var Protein[] $antibodies\n */\n$proteins = $bloodType1-\u003egetProteins();\n$antibodies = $bloodType1-\u003egetAntibodies();\n````\n\n## Getting Type\n\n```php\nuse CommandString\\Blood\\Enums\\BloodType;\n\n/** \n * @var \\CommandString\\Blood\\Blood $bloodType1 \n * @var BloodType $type\n */\n$type = $bloodType1-\u003egetType();\n$type = $bloodType1-\u003etype; \n```\n\n---\n\n# Example Script\n\n```php\n\u003c?php\n\nuse CommandString\\Blood\\Blood;\nuse CommandString\\Blood\\Enums\\BloodType;\n\nrequire_once __DIR__ . '/vendor/autoload.php';\n\nconst ITEM_PREFIX = \"* \";\nconst H2 = \"\\n## \";\nconst H3 = \"\\n### \";\n\n$forType = static function (BloodType $type): void {\n    $blood = new Blood($type);\n    echo H2 . \"Blood Type: {$blood-\u003egetType()-\u003evalue}\\n\"; // A+\n\n    echo H3 . \"Proteins:\\n\";\n    foreach ($blood-\u003egetProteins() as $protein) {\n        echo ITEM_PREFIX . \"{$protein-\u003evalue}\\n\";\n    }\n\n    echo H3 . \"Antibodies:\\n\";\n    foreach ($blood-\u003egetAntibodies() as $antibody) {\n        echo ITEM_PREFIX . \"{$antibody-\u003evalue}\\n\";\n    }\n\n    echo H3. \"Can Donate To:\\n\";\n    foreach (BloodType::cases() as $type) {\n        $toReceive = new Blood($type);\n\n        echo $blood-\u003ecanDonateTo($toReceive) ? ITEM_PREFIX . \"{$toReceive-\u003egetType()-\u003evalue}\\n\" : '';\n    }\n\n    echo H3 . \"Can Receive From:\\n\";\n    foreach (BloodType::cases() as $type) {\n        $toDonate = new Blood($type);\n\n        echo $blood-\u003ecanReceiveFrom($toDonate) ? ITEM_PREFIX . \"{$toDonate-\u003egetType()-\u003evalue}\\n\" : '';\n    }\n};\n\n$divider = \"---\\n\";\nforeach (BloodType::cases() as $type) {\n    $forType($type);\n    echo $divider;\n}\n\n```\n\n# Output\n\n## Blood Type: A-\n\n### Proteins:\n* A\n\n### Antibodies:\n* B\n* RH\n\n### Can Donate To:\n* A-\n* A+\n* AB-\n* AB+\n\n### Can Receive From:\n* A-\n* A+\n* AB-\n* AB+\n\n### Is Universal Donor: No\n\n### Is Universal Recipient: No\n\n---\n\n## Blood Type: A+\n\n### Proteins:\n* A\n* RH\n\n### Antibodies:\n* B\n\n### Can Donate To:\n* A+\n* AB+\n\n### Can Receive From:\n* A+\n* AB+\n\n### Is Universal Donor: No\n\n### Is Universal Recipient: No\n\n---\n\n## Blood Type: B-\n\n### Proteins:\n* B\n\n### Antibodies:\n* A\n* RH\n\n### Can Donate To:\n* B-\n* B+\n* AB-\n* AB+\n\n### Can Receive From:\n* B-\n* B+\n* AB-\n* AB+\n\n### Is Universal Donor: No\n\n### Is Universal Recipient: No\n\n---\n\n## Blood Type: B+\n\n### Proteins:\n* B\n* RH\n\n### Antibodies:\n* A\n\n### Can Donate To:\n* B+\n* AB+\n\n### Can Receive From:\n* B+\n* AB+\n\n### Is Universal Donor: No\n\n### Is Universal Recipient: No\n\n---\n\n## Blood Type: AB-\n\n### Proteins:\n* A\n* B\n\n### Antibodies:\n* RH\n\n### Can Donate To:\n* AB-\n* AB+\n\n### Can Receive From:\n* AB-\n* AB+\n\n### Is Universal Donor: No\n\n### Is Universal Recipient: No\n\n---\n\n## Blood Type: AB+\n\n### Proteins:\n* A\n* B\n* RH\n\n### Antibodies:\n\n### Can Donate To:\n* AB+\n\n### Can Receive From:\n* AB+\n\n### Is Universal Donor: No\n\n### Is Universal Recipient: Yes\n\n---\n\n## Blood Type: O-\n\n### Proteins:\n\n### Antibodies:\n* A\n* B\n* RH\n\n### Can Donate To:\n* A-\n* A+\n* B-\n* B+\n* AB-\n* AB+\n* O-\n* O+\n\n### Can Receive From:\n* A-\n* A+\n* B-\n* B+\n* AB-\n* AB+\n* O-\n* O+\n\n### Is Universal Donor: Yes\n\n### Is Universal Recipient: No\n\n---\n\n## Blood Type: O+\n\n### Proteins:\n* RH\n\n### Antibodies:\n* A\n* B\n\n### Can Donate To:\n* A+\n* B+\n* AB+\n* O+\n\n### Can Receive From:\n* A+\n* B+\n* AB+\n* O+\n\n### Is Universal Donor: No\n\n### Is Universal Recipient: No\n\n---\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommandstring%2Fbloodtypes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcommandstring%2Fbloodtypes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommandstring%2Fbloodtypes/lists"}