Awesome-claude-code create-adapter
Generates Adapter pattern for PHP 8.4. Converts incompatible interfaces, wraps legacy code and external libraries. Includes unit tests.
install
source · Clone the upstream repo
git clone https://github.com/dykyi-roman/awesome-claude-code
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/dykyi-roman/awesome-claude-code "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/create-adapter" ~/.claude/skills/dykyi-roman-awesome-claude-code-create-adapter && rm -rf "$T"
manifest:
skills/create-adapter/SKILL.mdsource content
Adapter Pattern Generator
Creates Adapter pattern infrastructure for converting incompatible interfaces into expected ones.
When to Use
| Scenario | Example |
|---|---|
| Legacy code integration | Wrap old API with new interface |
| Third-party library wrapping | Stripe SDK, AWS SDK adapters |
| Interface standardization | Multiple payment gateways with unified interface |
| Backward compatibility | Support old and new interfaces |
Component Characteristics
Target Interface
- Defines expected operations
- Client code depends on this
- Domain layer contract
Adapter
- Implements target interface
- Wraps adaptee (existing class)
- Translates calls between interfaces
Adaptee
- Existing incompatible class
- Legacy code or external library
- Not modified by adapter
Generation Process
Step 1: Generate Target Interface
Path:
src/Domain/{BoundedContext}/
— Expected interface contract{Name}Interface.php
Step 2: Generate Adapter
Path:
src/Infrastructure/{BoundedContext}/Adapter/
— Converts adaptee to target interface{Provider}{Name}Adapter.php
— Wraps legacy code{Legacy}{Name}Adapter.php
— Wraps third-party library{External}{Name}Adapter.php
Step 3: Generate Tests
— Adapter behavior verification{AdapterName}Test.php
File Placement
| Component | Path |
|---|---|
| Target Interface | |
| Adapter | |
| Adaptee (existing) | External library or legacy code |
| Unit Tests | |
Naming Conventions
| Component | Pattern | Example |
|---|---|---|
| Target Interface | | |
| Adapter | | |
| Test | | |
Quick Template Reference
Target Interface
interface {Name}Interface { public function {operation}({params}): {returnType}; }
Adapter
final readonly class {Provider}{Name}Adapter implements {Name}Interface { public function __construct( private {Adaptee} $adaptee ) {} public function {operation}({params}): {returnType} { // Translate params to adaptee format $adapteeResult = $this->adaptee->{adapteeMethod}({adapteeParams}); // Convert result to target format return {convertedResult}; } }
Usage Example
// Stripe SDK is the adaptee $stripeClient = new \Stripe\StripeClient($apiKey); // Adapter makes it compatible with our interface $paymentGateway = new StripePaymentGatewayAdapter($stripeClient); // Use through our domain interface $result = $paymentGateway->charge($amount, $token);
Common Adapters
| Adapter | Purpose |
|---|---|
| PaymentGatewayAdapter | Wrap Stripe, PayPal, Square APIs |
| StorageAdapter | Wrap AWS S3, Google Cloud Storage |
| MessengerAdapter | Wrap Slack, Discord, Telegram APIs |
| EmailAdapter | Wrap SendGrid, Mailgun, AWS SES |
| CacheAdapter | Wrap Redis, Memcached, APCu |
| LoggerAdapter | Wrap Monolog, Syslog, custom loggers |
Anti-patterns to Avoid
| Anti-pattern | Problem | Solution |
|---|---|---|
| Leaky Adapter | Exposing adaptee details | Return only target interface types |
| Multiple Responsibilities | Adapter doing business logic | Keep adapters focused on translation |
| Tight Coupling | Adapter depends on concrete adaptee | Accept interface when possible |
| Heavy Translation | Complex conversions in adapter | Extract translator services |
| Missing Error Handling | Adaptee exceptions leak | Catch and convert to domain exceptions |
References
For complete PHP templates and examples, see:
— Target Interface, Adapter templates for payment, storage, messagingreferences/templates.md
— Stripe, PayPal, AWS S3, legacy user adapters with unit testsreferences/examples.md