Giter Club home page Giter Club logo

dynamo's Introduction

Build Status Coverage Status

Dynamo

This library allows you to take an interface annotated with Doctrine annotations and generate a class. It handles all of the parsing, and provides events to hook into in order to create the method body based on the annotations.

Installation

composer require tebru/dynamo

Usage

Create a new generator object using the builder

$generator = \Tebru\Dynamo\Generator::builder()
    ->namespacePrefix('My\Custom\Library')
    ->setCacheDir('path/to/cache/vendor-name')
    ->build();

There are many different options to use with the builder, however, for most all cases, the defaults outside of the namespace prefix and cache dir will be fine.

The namespace prefix is required in order to get around class name conflicts. The generator uses the full interface name plus the prefix as the generated class name. The prefix defaults to Dynamo.

The cache directory defaults to /system/dir/dynamo

After you have a generator, you can pass your interface name into it and it will create a file in your cache directory

$generator->createAndWrite(MyInterface::class);

Events

It's essential to subscribe to at least the MethodEvent as it is what allows you to add a method body to the method. The MethodModel and AnnotationCollection are available on the event.

The two other events are StartEvent and EndEvent, both of which provide access to the ClassModel.

$eventDispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher();
$eventDispatcher->addListener(new MethodListener());
    
$generator = \Tebru\Dynamo\Generator::builder()
    ->namespacePrefix('My\Custom\Library')
    ->setCacheDir('path/to/cache/vendor-name')
    ->setEventDispatcher($eventDispatcher)
    ->build();

Sample listener

Here is a skeleton of a method listener

<?php
    
namespace Foo;

use Tebru\Dynamo\Event\MethodEvent;

class MethodListener
{
    public function __invoke(MethodEvent $event)
    {
        $methodModel = $event->getMethodModel();
        $annotationCollection = $event->getAnnotationCollection();
        
        $body = [];
        if ($annotation->collection->exists(MyAnnotation::class)) {
            $body[] = '$var = "annotation exists";';
        } else {
            $body[] = '$var = "annotation not exists";';
        }
        
        $methodModel->setBody(implode($body));
    }
}

dynamo's People

Contributors

igaponov avatar natebrunette avatar

Watchers

 avatar  avatar

dynamo's Issues

php7 support

Why this project does not support php7? Does it uses some php5 specific constructions? Can you please implement php7 support?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.