4 Commits
V2.0 ... 1.0.0

Author SHA1 Message Date
fb619dccbf import axiom without dependency on symfony console
Some checks failed
abc-api/abcParser/pipeline/head There was a failure building this commit
2020-06-21 07:36:31 -04:00
348d17cdd3 update more dependencies
Some checks failed
abc-api/abcParser/pipeline/head There was a failure building this commit
2020-06-20 22:54:57 -04:00
2cdf7dd1cf update webpatser/laravel-uuid to version 3
Some checks failed
abc-api/abcParser/pipeline/head There was a failure building this commit
2020-06-20 12:36:34 -04:00
a530e8fd78 add jenkinsfile and reorganised docker-compose.yml
Some checks failed
abc-api/abcParser/master This commit looks good
abc-api/abcParser/pipeline/head There was a failure building this commit
2020-03-22 10:19:27 -04:00
118 changed files with 4618 additions and 2795 deletions

0
.env-testing Normal file → Executable file
View File

0
.gitignore vendored Normal file → Executable file
View File

33
Jenkinsfile vendored Executable file
View File

@@ -0,0 +1,33 @@
pipeline {
environment {
WORKDIR = './'
DOCKER_HOST = 'dkhost:2376'
}
agent { label 'docker' }
options {
buildDiscarder(logRotator(numToKeepStr: '2'))
}
triggers {
cron('@weekly')
}
stages {
stage('prepare') {
steps {
checkout scm
sh 'docker-compose run --rm composer install'
sh 'ls'
}
}
stage('test') {
steps {
dir(WORKDIR) {
//sh "DOCKER_HOST=${DOCKER_HOST} docker-compose -f docker-compose.prod.yml pull"
sh "docker-compose run --rm tests"
}
}
}
}
}

0
README.md Normal file → Executable file
View File

View File

@@ -0,0 +1,13 @@
<?php
namespace Enzyme\Axiom\Atoms;
interface AtomInterface
{
/**
* Get the underlying value associated with this atom.
*
* @return mixed
*/
public function getValue();
}

View File

@@ -0,0 +1,29 @@
<?php
namespace Enzyme\Axiom\Atoms;
use Enzyme\Axiom\Exceptions\AtomException;
class IntegerAtom implements AtomInterface
{
protected $value;
public function __construct($value)
{
if ($this->isInvalidOrFloat($value)) {
throw new AtomException(get_class($this), $value);
}
$this->value = (int)$value;
}
protected function isInvalidOrFloat($value)
{
return is_numeric($value) === false || is_float($value) === true;
}
public function getValue()
{
return $this->value;
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace Enzyme\Axiom\Atoms;
use Enzyme\Axiom\Exceptions\AtomException;
class StringAtom implements AtomInterface
{
protected $value;
public function __construct($value)
{
if (is_string($value) === false) {
throw new AtomException(get_class($this), $value);
}
$this->value = $value;
}
public function getValue()
{
return $this->value;
}
}

View File

@@ -0,0 +1,33 @@
<?php
namespace Enzyme\Axiom\Bags;
class ArrayBag implements BagInterface
{
protected $store;
public function __construct(array $store)
{
$this->store = $store;
}
public function get($key)
{
if ($this->has($key)) {
return $this->store[$key];
}
return null;
}
public function has($key)
{
return isset($this->store[$key])
&& array_key_exists($key, $this->store);
}
public function getAll()
{
return $this->store;
}
}

View File

@@ -0,0 +1,32 @@
<?php
namespace Enzyme\Axiom\Bags;
interface BagInterface
{
/**
* Get the value associated with the given key. If the key does not
* exist, return null instead.
*
* @param string $key
*
* @return mixed
*/
public function get($key);
/**
* Get all the key/value pairs for this bag.
*
* @return array
*/
public function getAll();
/**
* Check whether there is a value associated with the given key.
*
* @param string $key
*
* @return boolean
*/
public function has($key);
}

View File

@@ -0,0 +1,13 @@
<?php
namespace Enzyme\Axiom\Exceptions;
class AtomException extends AxiomException
{
public function __construct($class, $value)
{
parent::__construct(
"The atom [{$class}] could not process the value [{$value}]."
);
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace Enzyme\Axiom\Exceptions;
use Exception;
class AxiomException extends Exception
{
//
}

View File

@@ -0,0 +1,28 @@
<?php
namespace Enzyme\Axiom\Factories;
use Enzyme\Axiom\Bags\BagInterface;
use Enzyme\Axiom\Models\ModelInterface;
interface FactoryInterface
{
/**
* Make a new model given the data provided.
*
* @param BagInterface $data
*
* @return \Enzyme\Axiom\Models\ModelInterface
*/
public function make(BagInterface $data);
/**
* Update the model provided with the given data.
*
* @param ModelInterface $model
* @param BagInterface $data
*
* @return \Enzyme\Axiom\Models\ModelInterface
*/
public function update(ModelInterface $model, BagInterface $data);
}

View File

@@ -0,0 +1,38 @@
<?php
namespace Enzyme\Axiom\Models;
interface ModelInterface
{
/**
* Get the unique identity for this mode.
*
* @return int
*/
public function identity();
/**
* Checks whether this model has the given attribute set.
*
* @param string $attribute
*
* @return boolean
*/
public function has($attribute);
/**
* Get the value associated with the given attribute.
*
* @param string $attribute
*
* @return mixed
*/
public function get($attribute);
/**
* Get all the attributes associated with this model.
*
* @return array
*/
public function getAll();
}

View File

@@ -0,0 +1,27 @@
<?php
namespace Enzyme\Axiom\Recipients;
use Enzyme\Axiom\Models\ModelInterface;
use Enzyme\Axiom\Reports\ReportInterface;
interface OnCreateRecipientInterface
{
/**
* Called when the creation of a model was a success.
*
* @param ModelInterface $model The newly created model.
*
* @return mixed
*/
public function onCreateSuccess(ModelInterface $model);
/**
* Called when the creation of a model was a failure.
*
* @param ReportInterface $report The failure report.
*
* @return mixed
*/
public function onCreateFailure(ReportInterface $report);
}

View File

@@ -0,0 +1,27 @@
<?php
namespace Enzyme\Axiom\Recipients;
use Enzyme\Axiom\Models\ModelInterface;
use Enzyme\Axiom\Reports\ReportInterface;
interface OnDeleteRecipientInterface
{
/**
* Called when the deletion of a model was a success.
*
* @param ModelInterface $model A shell copy of the deleted model.
*
* @return mixed
*/
public function onDeleteSuccess(ModelInterface $model);
/**
* Called when the deletion of a model was a failure.
*
* @param ReportInterface $report The failure report.
*
* @return mixed
*/
public function onDeleteFailure(ReportInterface $report);
}

View File

@@ -0,0 +1,27 @@
<?php
namespace Enzyme\Axiom\Recipients;
use Enzyme\Axiom\Models\ModelInterface;
use Enzyme\Axiom\Reports\ReportInterface;
interface OnUpdateRecipientInterface
{
/**
* Called when the modification of a model was a success.
*
* @param ModelInterface $model The updated model.
*
* @return mixed
*/
public function onUpdateSuccess(ModelInterface $model);
/**
* Called when the modification of a model was a failure.
*
* @param ReportInterface $report The failure report.
*
* @return mixed
*/
public function onUpdateFailure(ReportInterface $report);
}

View File

@@ -0,0 +1,8 @@
<?php
namespace Enzyme\Axiom\Reports;
class FailureReport extends SimpleReport
{
//
}

View File

@@ -0,0 +1,27 @@
<?php
namespace Enzyme\Axiom\Reports;
interface ReportInterface
{
/**
* Get the human readable message associated with this report.
*
* @return string
*/
public function getMessage();
/**
* Whether this report has additional details.
*
* @return boolean
*/
public function hasDetails();
/**
* Get the additional details associated with this report.
*
* @return array
*/
public function getDetails();
}

View File

@@ -0,0 +1,30 @@
<?php
namespace Enzyme\Axiom\Reports;
class SimpleReport implements ReportInterface
{
protected $message;
protected $details;
public function __construct($message, $details = [])
{
$this->message = $message;
$this->details = $details;
}
public function getMessage()
{
return $this->message;
}
public function hasDetails()
{
return count($this->details) > 0;
}
public function getDetails()
{
return $this->details;
}
}

View File

@@ -0,0 +1,56 @@
<?php
namespace Enzyme\Axiom\Repositories;
use Enzyme\Axiom\Atoms\AtomInterface;
use Enzyme\Axiom\Bags\BagInterface;
use Enzyme\Axiom\Factories\FactoryInterface;
use Enzyme\Axiom\Models\ModelInterface;
class InMemoryRepository implements RepositoryInterface
{
protected $factory;
protected $store;
public function __construct(FactoryInterface $factory)
{
$this->factory = $factory;
$this->store = [];
}
public function add(ModelInterface $model)
{
$this->store[$model->identity()] = $model;
}
public function removeById(AtomInterface $id)
{
if ($this->has($id)) {
unset($this->store[$id->getValue()]);
}
}
public function has(AtomInterface $id)
{
return isset($this->store[$id->getValue()])
&& array_key_exists($id->getValue(), $this->store);
}
public function update(ModelInterface $model, BagInterface $data)
{
$updated_model = $this->factory->update($model, $data);
$this->store[$model->identity()] = $updated_model;
}
public function getById(AtomInterface $id)
{
return $this->has($id)
? $this->store[$id->getValue()]
: null;
}
public function getAll()
{
return $this->store;
}
}

View File

@@ -0,0 +1,61 @@
<?php
namespace Enzyme\Axiom\Repositories;
use Enzyme\Axiom\Atoms\AtomInterface;
use Enzyme\Axiom\Bags\BagInterface;
use Enzyme\Axiom\Models\ModelInterface;
interface RepositoryInterface
{
/**
* Add the given model to the repository.
*
* @param ModelInterface $model
*/
public function add(ModelInterface $model);
/**
* Remove the model with the given ID from the repository.
*
* @param AtomInterface $id
*
* @return void
*/
public function removeById(AtomInterface $id);
/**
* Update the given model with the supplied data.
*
* @param ModelInterface $model
* @param BagInterface $data
*
* @return \Enzyme\Axiom\Models\ModelInterface
*/
public function update(ModelInterface $model, BagInterface $data);
/**
* Get the model associated with the given ID.
*
* @param AtomInterface $id
*
* @return \Enzyme\Axiom\Models\ModelInterface
*/
public function getById(AtomInterface $id);
/**
* Get all models from this repository.
*
* @return array
*/
public function getAll();
/**
* Check whether this repository has a model associated with the given ID.
*
* @param AtomInterface $id
*
* @return boolean
*/
public function has(AtomInterface $id);
}

View File

@@ -0,0 +1,37 @@
<?php
use Enzyme\Axiom\Atoms\IntegerAtom;
class IntegerAtomTest extends PHPUnit_Framework_TestCase
{
public function test_atom_stores_correct_base_value()
{
$expected = 5;
$atom = new IntegerAtom($expected);
$this->assertEquals($expected, $atom->getValue());
$expected = 25;
$atom = new IntegerAtom($expected);
$this->assertEquals($expected, $atom->getValue());
$expected = PHP_INT_MAX;
$atom = new IntegerAtom($expected);
$this->assertEquals($expected, $atom->getValue());
}
/**
* @expectedException \Enzyme\Axiom\Exceptions\AtomException
*/
public function test_atom_throws_exception_when_initialised_with_invalid_value()
{
new IntegerAtom('foobar');
}
/**
* @expectedException \Enzyme\Axiom\Exceptions\AtomException
*/
public function test_atom_throws_exception_when_initialised_with_floating_value()
{
new IntegerAtom(100.5);
}
}

View File

@@ -0,0 +1,29 @@
<?php
use Enzyme\Axiom\Atoms\StringAtom;
class StringAtomTest extends PHPUnit_Framework_TestCase
{
public function test_atom_stores_correct_base_value()
{
$expected = 'Foo Bar';
$atom = new StringAtom($expected);
$this->assertEquals($expected, $atom->getValue());
$expected = '25';
$atom = new StringAtom($expected);
$this->assertEquals($expected, $atom->getValue());
$expected = '';
$atom = new StringAtom($expected);
$this->assertEquals($expected, $atom->getValue());
}
/**
* @expectedException \Enzyme\Axiom\Exceptions\AtomException
*/
public function test_atom_throws_exception_when_initialised_with_invalid_value()
{
new StringAtom(5);
}
}

View File

@@ -0,0 +1,34 @@
<?php
use Enzyme\Axiom\Bags\ArrayBag;
class ArrayBagTest extends PHPUnit_Framework_TestCase
{
public function test_bag_stores_value_as_expected()
{
$expected = 'Bar';
$bag = new ArrayBag(['foo' => $expected]);
$this->assertEquals($expected, $bag->get('foo'));
}
public function test_bag_returns_null_for_unknown_key()
{
$expected = null;
$bag = new ArrayBag(['foo' => 'bar']);
$this->assertEquals($expected, $bag->get('PHP'));
}
public function test_bag_stores_values_as_expected()
{
$expected = ['foo' => 'Bar', 'PHP' => 'Rulez'];
$bag = new ArrayBag($expected);
$this->assertEquals($expected, $bag->getAll());
}
public function test_bag_reports_stored_value_as_expected()
{
$expected = true;
$bag = new ArrayBag(['foo' => 'bar']);
$this->assertEquals($expected, $bag->has('foo'));
}
}

View File

@@ -0,0 +1,96 @@
<?php
use Enzyme\Axiom\Console\Config;
use Enzyme\Freckle\Dot;
use Mockery as m;
use Symfony\Component\Yaml\Parser;
class ConfigTest extends PHPUnit_Framework_TestCase
{
public function tearDown()
{
m::close();
}
public function test_config_returns_early_when_file_does_not_exist()
{
$file = 'fake.yaml';
$file_dispatch = m::mock(
'Enzyme\Parrot\File[exists]',
function ($mock) use ($file) {
$mock
->shouldReceive('exists')
->with($file)
->times(1)
->andReturn(false);
}
);
$config = new Config(new Parser, $file_dispatch, new Dot);
$config->parse($file);
}
public function test_config_stores_correct_values_from_valid_yaml_file()
{
$file = 'fake.yaml';
$contents = "repositories:\n";
$contents .= " - location: ~/Code/Acme/src/Repos\n";
$contents .= " - namespace: Acme\Repos\n";
$file_dispatch = m::mock(
'Enzyme\Parrot\File[exists,getContents]',
function ($mock) use ($file, $contents) {
$mock
->shouldReceive('exists')
->with($file)
->times(1)
->andReturn(true);
$mock
->shouldReceive('getContents')
->with($file)
->times(1)
->andReturn($contents);
}
);
$config = new Config(new Parser, $file_dispatch, new Dot);
$config->parse($file);
$expected = '~/Code/Acme/src/Repos';
$actual = $config->get('repositories.location');
$this->assertEquals($expected, $actual);
}
/**
* @expectedException InvalidArgumentException
*/
public function test_config_throws_exception_on_bad_yaml_parse()
{
$file = 'fake.yaml';
$parser = m::mock(
'Symfony\Component\Yaml\Parser[parse]',
function ($mock) {
$mock
->shouldReceive('parse')
->andThrow(new InvalidArgumentException('oops'));
}
);
$file_dispatch = m::mock(
'Enzyme\Parrot\File[exists,getContents]',
function ($mock) use ($file) {
$mock
->shouldReceive('exists')
->with($file)
->times(1)
->andReturn(true);
$mock
->shouldReceive('getContents')
->with($file)
->times(1)
->andReturn('bad');
}
);
$config = new Config($parser, $file_dispatch, new Dot);
$config->parse($file);
}
}

View File

@@ -0,0 +1,33 @@
<?php
use Enzyme\Axiom\Reports\SimpleReport;
class SimpleReportTest extends PHPUnit_Framework_TestCase
{
public function test_report_stores_message_as_expected()
{
$expected = 'Something went wrong.';
$report = new SimpleReport($expected);
$this->assertEquals($expected, $report->getMessage());
}
public function test_report_stores_details_as_expected()
{
$expected = ['tests' => 'required'];
$report = new SimpleReport('Foo Bar went pear shaped.', $expected);
$this->assertEquals($expected, $report->getDetails());
}
public function test_report_reports_details_as_expected()
{
$expected = true;
$report = new SimpleReport(
'It went pear shaped again.', ['tests' => 'required']
);
$this->assertEquals($expected, $report->hasDetails());
$expected = false;
$report = new SimpleReport('Foo Bar went pear shaped.');
$this->assertEquals($expected, $report->hasDetails());
}
}

View File

@@ -0,0 +1,79 @@
<?php
use Enzyme\Axiom\Atoms\IntegerAtom;
use Enzyme\Axiom\Bags\ArrayBag;
use Enzyme\Axiom\Repositories\InMemoryRepository;
use Mockery as m;
class InMemoryRepositoryTest extends PHPUnit_Framework_TestCase
{
public function tearDown()
{
m::close();
}
public function test_repository_stores_models_as_expected()
{
$identity = 0;
$factory = m::mock('Enzyme\Axiom\Factories\FactoryInterface');
$model = m::mock('Enzyme\Axiom\Models\ModelInterface', function ($mock) use ($identity) {
$mock->shouldReceive('identity')->once()->andReturn($identity);
});
$repo = new InMemoryRepository($factory);
$repo->add($model);
// Let's make sure the repo reports the new model as existing.
$expected = true;
$this->assertEquals($expected, $repo->has(new IntegerAtom($identity)));
// And make sure it returns the new model as expected.
$expected = $model;
$this->assertEquals($expected, $repo->getById(new IntegerAtom($identity)));
// And that the new model is the only model currently associated with this repo.
$expected = [$model];
$this->assertEquals($expected, $repo->getAll());
}
public function test_repository_removes_models_as_expected()
{
$identity = 0;
$factory = m::mock('Enzyme\Axiom\Factories\FactoryInterface');
$model = m::mock('Enzyme\Axiom\Models\ModelInterface', function ($mock) use ($identity) {
$mock->shouldReceive('identity')->once()->andReturn($identity);
});
$repo = new InMemoryRepository($factory);
$repo->add($model);
$repo->removeById(new IntegerAtom($identity));
// Let's make sure the repo reports the model as non-existent.
$expected = false;
$this->assertEquals($expected, $repo->has(new IntegerAtom($identity)));
// And make sure it returns null if the model is requested.
$expected = null;
$this->assertEquals($expected, $repo->getById(new IntegerAtom($identity)));
// And that the new model is not currently associated with this repo's collection.
$expected = [];
$this->assertEquals($expected, $repo->getAll());
}
public function test_repository_delegates_updates_to_factory_dependency_as_expected()
{
$identity = 0;
$model = m::mock('Enzyme\Axiom\Models\ModelInterface', function ($mock) use ($identity) {
$mock->shouldReceive('identity')->andReturn($identity);
});
$bag = new ArrayBag([]);
$factory = m::mock('Enzyme\Axiom\Factories\FactoryInterface', function ($mock) use ($model, $bag) {
$mock->shouldReceive('update')->once()->with($model, $bag)->andReturn($model);
});
$repo = new InMemoryRepository($factory);
$repo->add($model);
$repo->update($model, $bag);
}
}

56
axiom_tests/phpunit.xml Normal file
View File

@@ -0,0 +1,56 @@
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.5/phpunit.xsd"
backupGlobals="true"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
cacheTokens="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
forceCoversAnnotation="false"
mapTestClassNameToCoveredClassName="false"
printerClass="PHPUnit_TextUI_ResultPrinter"
processIsolation="false"
stopOnError="false"
stopOnFailure="false"
stopOnIncomplete="false"
stopOnSkipped="false"
stopOnRisky="false"
testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
timeoutForSmallTests="1"
timeoutForMediumTests="10"
timeoutForLargeTests="60"
verbose="true">
<logging>
<log type="coverage-clover" target="build/logs/clover.xml"/>
</logging>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">src</directory>
</whitelist>
</filter>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">console</directory>
</whitelist>
</filter>
<testsuites>
<testsuite name="Console Test Suite">
<directory>tests/Console</directory>
</testsuite>
<testsuite name="Atoms Test Suite">
<directory>tests/Atoms</directory>
</testsuite>
<testsuite name="Bags Test Suite">
<directory>tests/Bags</directory>
</testsuite>
<testsuite name="Reports Test Suite">
<directory>tests/Reports</directory>
</testsuite>
<testsuite name="Repositories Test Suite">
<directory>tests/Repositories</directory>
</testsuite>
</testsuites>
</phpunit>

0
codeception.yml Normal file → Executable file
View File

24
composer.json Normal file → Executable file
View File

@@ -11,19 +11,21 @@
], ],
"require": { "require": {
"php": ">=7.1", "php": ">=7.1",
"zackkitzmiller/tiny": "^1.2",
"webpatser/laravel-uuid": "^2.0",
"enzyme/axiom": "^4.2",
"enzyme/freckle": "^0.3.0",
"illuminate/database": "^5.5",
"enzyme/collection": "^1.0", "enzyme/collection": "^1.0",
"illuminate/Pipeline": "^5.5", "enzyme/freckle": "^0.3.0",
"league/pipeline": "^0.3.0", "enzyme/parrot": "^0.0.2",
"php-deal/framework": "^0.4.1" "icanboogie/inflector": "^1.4",
"illuminate/database": "^5.6",
"illuminate/pipeline": "^5.6",
"league/pipeline": "^1.0",
"php-deal/framework": "^0.4.1",
"webpatser/laravel-uuid": "~3.0",
"zackkitzmiller/tiny": "^1.2"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"XaiCorp\\AbcParser\\": "src/" "XaiCorp\\AbcParser\\": "src/",
"Enzyme\\Axiom\\": "axiom_src/"
} }
}, },
"autoload-dev": { "autoload-dev": {
@@ -34,8 +36,8 @@
}, },
"require-dev": { "require-dev": {
"codeception/codeception": "^2.4", "codeception/codeception": "^2.4",
"squizlabs/php_codesniffer": "^3.1", "mockery/mockery": "^1.0",
"phpmd/phpmd": "^2.6", "phpmd/phpmd": "^2.6",
"mockery/mockery": "^1.0" "squizlabs/php_codesniffer": "^3.2"
} }
} }

5136
composer.lock generated Normal file → Executable file

File diff suppressed because it is too large Load Diff

0
database/migrations/.gitkeep Normal file → Executable file
View File

View File

@@ -1,7 +1,7 @@
<?php <?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreateUsersTable extends Migration class CreateUsersTable extends Migration
{ {

View File

@@ -1,7 +1,7 @@
<?php <?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreatePasswordResetsTable extends Migration class CreatePasswordResetsTable extends Migration
{ {

View File

@@ -1,7 +1,7 @@
<?php <?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreateParseabcTables extends Migration class CreateParseabcTables extends Migration
{ {

View File

@@ -1,7 +1,7 @@
<?php <?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreateJobsTable extends Migration class CreateJobsTable extends Migration
{ {

View File

@@ -1,7 +1,7 @@
<?php <?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreateFailedJobsTable extends Migration class CreateFailedJobsTable extends Migration
{ {

17
docker-compose.yml Normal file → Executable file
View File

@@ -1,17 +1,20 @@
version: '2' version: '3'
services: services:
parser: tests:
image: abc-api/api:latest image: dkregistry.xai-corp.net:5000/xaicorp/php:7.2-dev
volumes: volumes:
- .:/var/www - .:/var/www
- .:/opt/project - .:/opt/project
command:
- vendor/bin/codecept
- run
parser-composer: composer:
image: composer/composer:alpine image: dkregistry.xai-corp.net:5000/xaicorp/composer:7.2
volumes: volumes:
- .:/app - .:/opt/project
- ~/.ssh:/root/.ssh # - ~/.ssh:/root/.ssh
entrypoint: entrypoint:
- composer - composer
command: command:

0
src/Application/Boundary/PersonMapper.php Normal file → Executable file
View File

0
src/Application/PersonFactory.php Normal file → Executable file
View File

0
src/Application/PersonRepository.php Normal file → Executable file
View File

0
src/Application/UseCases/ExtractTuneFromCollection.php Normal file → Executable file
View File

0
src/Application/UseCases/ImportAbcFile.php Normal file → Executable file
View File

3
src/Domain/Atoms/EmailAtom.php Normal file → Executable file
View File

@@ -2,6 +2,7 @@
namespace XaiCorp\AbcParser\Domain\Atoms; namespace XaiCorp\AbcParser\Domain\Atoms;
use Enzyme\Axiom\Atoms\AtomInterface; use Enzyme\Axiom\Atoms\AtomInterface;
use Exception;
class EmailAtom implements AtomInterface class EmailAtom implements AtomInterface
{ {
@@ -26,7 +27,7 @@ class EmailAtom implements AtomInterface
private function validateEmail($value) private function validateEmail($value)
{ {
if (!$this->isValid($value)) { if (!$this->isValid($value)) {
throw new \Exception('Not a valid email'); throw new Exception('Not a valid email');
} }
} }

0
src/Domain/Atoms/UnsignedIntegerAtom.php Normal file → Executable file
View File

0
src/Domain/Boundary/PersonFactory.php Normal file → Executable file
View File

0
src/Domain/Boundary/PersonRepository.php Normal file → Executable file
View File

0
src/Domain/Core/AttributeTrait.php Normal file → Executable file
View File

0
src/Domain/Core/Author.php Normal file → Executable file
View File

0
src/Domain/Core/Collection.php Normal file → Executable file
View File

0
src/Domain/Core/Composer.php Normal file → Executable file
View File

0
src/Domain/Core/EntityInterface.php Normal file → Executable file
View File

0
src/Domain/Core/IdentityTrait.php Normal file → Executable file
View File

0
src/Domain/Core/MultivalueAttribute.php Normal file → Executable file
View File

3
src/Domain/Core/Person.php Normal file → Executable file
View File

@@ -2,6 +2,7 @@
namespace XaiCorp\AbcParser\Domain\Core; namespace XaiCorp\AbcParser\Domain\Core;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use Exception;
use Webpatser\Uuid\Uuid; use Webpatser\Uuid\Uuid;
use XaiCorp\AbcParser\Domain\Atoms\EmailAtom; use XaiCorp\AbcParser\Domain\Atoms\EmailAtom;
@@ -69,7 +70,7 @@ class Person implements EntityInterface
public function get($attribute) public function get($attribute)
{ {
if (!$this->has($attribute)) { if (!$this->has($attribute)) {
throw new \Exception('Cannot access attribute on person'); throw new Exception('Cannot access attribute on person');
} }
return $this->{$attribute}; return $this->{$attribute};

2
src/Domain/Core/Setting.php Normal file → Executable file
View File

@@ -2,8 +2,6 @@
namespace XaiCorp\AbcParser\Domain\Core; namespace XaiCorp\AbcParser\Domain\Core;
use Enzyme\Axiom\Atoms\StringAtom;
class Setting class Setting
{ {
use IdentityTrait; use IdentityTrait;

0
src/Domain/Core/Transcriber.php Normal file → Executable file
View File

1
src/Domain/Core/Tune.php Normal file → Executable file
View File

@@ -1,7 +1,6 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Core; namespace XaiCorp\AbcParser\Domain\Core;
use Enzyme\Axiom\Atoms\IntegerAtom;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use Webpatser\Uuid\Uuid; use Webpatser\Uuid\Uuid;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom; use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;

0
src/Domain/Core/TuneAttributeArrayBuilder.php Normal file → Executable file
View File

0
src/Domain/Core/TuneBuilder.php Normal file → Executable file
View File

0
src/Domain/Core/TuneCollection.php Normal file → Executable file
View File

1
src/Domain/Modules/Interpreter/Builder.php Normal file → Executable file
View File

@@ -12,6 +12,7 @@ use XaiCorp\AbcParser\Domain\Core\Transcriber;
use XaiCorp\AbcParser\Domain\Core\Tune; use XaiCorp\AbcParser\Domain\Core\Tune;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Core\TuneCollection; use XaiCorp\AbcParser\Domain\Core\TuneCollection;
//use XaiCorp\AbcParser\Models\Laravel5\TuneSetting; //use XaiCorp\AbcParser\Models\Laravel5\TuneSetting;
class Builder implements TuneBuilder class Builder implements TuneBuilder

0
src/Domain/Modules/Interpreter/Context.php Normal file → Executable file
View File

2
src/Domain/Modules/Interpreter/DefaultInterpreter.php Normal file → Executable file
View File

@@ -1,8 +1,6 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter;
use Enzyme\Axiom\Atoms\StringAtom;
use XaiCorp\AbcParser\Domain\Core\Tune;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon\Author; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon\Author;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon\Book; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon\Book;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon\Composer; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon\Composer;

1
src/Domain/Modules/Interpreter/Interpreter.php Normal file → Executable file
View File

@@ -1,7 +1,6 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter;
use XaiCorp\AbcParser\Domain\Core\Tune;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Core\TuneCollection; use XaiCorp\AbcParser\Domain\Core\TuneCollection;

0
src/Domain/Modules/Interpreter/InterpreterPipeline.php Normal file → Executable file
View File

8
src/Domain/Modules/Interpreter/Lexicon/Author.php Normal file → Executable file
View File

@@ -1,10 +1,8 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Enzyme\Axiom\Atoms\StringAtom; use Closure;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Author implements Lex class Author implements Lex
@@ -27,10 +25,10 @@ class Author implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'A') { if ($key === 'A') {
$this->builder->addAuthor($data); $this->builder->addAuthor($data);

7
src/Domain/Modules/Interpreter/Lexicon/Book.php Normal file → Executable file
View File

@@ -1,10 +1,9 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Closure;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Book implements Lex class Book implements Lex
@@ -27,10 +26,10 @@ class Book implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'B') { if ($key === 'B') {
$this->builder->addBook(new StringAtom($data)); $this->builder->addBook(new StringAtom($data));

8
src/Domain/Modules/Interpreter/Lexicon/Composer.php Normal file → Executable file
View File

@@ -1,10 +1,8 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Enzyme\Axiom\Atoms\StringAtom; use Closure;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Composer implements Lex class Composer implements Lex
@@ -27,10 +25,10 @@ class Composer implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'C') { if ($key === 'C') {
$this->builder->addComposer($data); $this->builder->addComposer($data);

7
src/Domain/Modules/Interpreter/Lexicon/Discography.php Normal file → Executable file
View File

@@ -1,10 +1,9 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Closure;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Discography implements Lex class Discography implements Lex
@@ -27,10 +26,10 @@ class Discography implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'D') { if ($key === 'D') {
$this->builder->addDiscography(new StringAtom($data)); $this->builder->addDiscography(new StringAtom($data));

6
src/Domain/Modules/Interpreter/Lexicon/EndOfTune.php Normal file → Executable file
View File

@@ -1,10 +1,8 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Enzyme\Axiom\Atoms\StringAtom; use Closure;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class EndOfTune implements Lex class EndOfTune implements Lex
@@ -27,7 +25,7 @@ class EndOfTune implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
// list($key, $data) = $this->getKeyDataFromLine($line); // list($key, $data) = $this->getKeyDataFromLine($line);

7
src/Domain/Modules/Interpreter/Lexicon/Filename.php Normal file → Executable file
View File

@@ -1,10 +1,9 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Closure;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Filename implements Lex class Filename implements Lex
@@ -27,10 +26,10 @@ class Filename implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'F' if ($key === 'F'
&& $context->getState() === $context::MODE_TUNE_HEADER && $context->getState() === $context::MODE_TUNE_HEADER

7
src/Domain/Modules/Interpreter/Lexicon/Group.php Normal file → Executable file
View File

@@ -1,10 +1,9 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Closure;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Group implements Lex class Group implements Lex
@@ -27,10 +26,10 @@ class Group implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'G') { if ($key === 'G') {
$this->builder->addGroup(new StringAtom($data)); $this->builder->addGroup(new StringAtom($data));

10
src/Domain/Modules/Interpreter/Lexicon/History.php Normal file → Executable file
View File

@@ -1,10 +1,8 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Enzyme\Axiom\Atoms\StringAtom; use Closure;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class History implements Lex class History implements Lex
@@ -28,10 +26,10 @@ class History implements Lex
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
* @throws \Enzyme\Collection\CollectionException * @throws \Enzyme\Collection\CollectionException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'H' if ($key === 'H'
&& $context->isState($context::MODE_TUNE_HEADER) && $context->isState($context::MODE_TUNE_HEADER)
@@ -57,7 +55,7 @@ class History implements Lex
private function nextLineNotHistory(Context $context) private function nextLineNotHistory(Context $context)
{ {
$nextLine = $context->get($context->key() + 1); $nextLine = $context->get($context->key() + 1);
list($key, $data) = $this->getKeyDataFromLine($nextLine); [$key, $data] = $this->getKeyDataFromLine($nextLine);
return $key !== ''; return $key !== '';
} }
} }

7
src/Domain/Modules/Interpreter/Lexicon/Index.php Normal file → Executable file
View File

@@ -1,10 +1,9 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Enzyme\Axiom\Atoms\StringAtom; use Closure;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom; use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Index implements Lex class Index implements Lex
@@ -21,10 +20,10 @@ class Index implements Lex
$this->builder = $builder; $this->builder = $builder;
} }
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'X') { if ($key === 'X') {
$context->setStateInTuneHeader(); $context->setStateInTuneHeader();

View File

@@ -1,10 +1,9 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Closure;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class KeySignature implements Lex class KeySignature implements Lex
@@ -27,10 +26,10 @@ class KeySignature implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($context->getState() === $context::MODE_TUNE_HEADER && $key === 'K') { if ($context->getState() === $context::MODE_TUNE_HEADER && $key === 'K') {
$this->builder->setKey(new StringAtom($data)); $this->builder->setKey(new StringAtom($data));

0
src/Domain/Modules/Interpreter/Lexicon/Lex.php Normal file → Executable file
View File

View File

7
src/Domain/Modules/Interpreter/Lexicon/Meter.php Normal file → Executable file
View File

@@ -1,10 +1,9 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Closure;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Meter implements Lex class Meter implements Lex
@@ -27,10 +26,10 @@ class Meter implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'M' if ($key === 'M'
&& $context->getState() === $context::MODE_TUNE_HEADER && $context->getState() === $context::MODE_TUNE_HEADER

8
src/Domain/Modules/Interpreter/Lexicon/MusicLine.php Normal file → Executable file
View File

@@ -1,10 +1,8 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Enzyme\Axiom\Atoms\StringAtom; use Closure;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class MusicLine implements Lex class MusicLine implements Lex
@@ -27,10 +25,10 @@ class MusicLine implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($context->getState() === $context::MODE_TUNE_BODY if ($context->getState() === $context::MODE_TUNE_BODY
&& $key !== 'K' && $key !== 'K'

7
src/Domain/Modules/Interpreter/Lexicon/NoteLength.php Normal file → Executable file
View File

@@ -1,10 +1,9 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Closure;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class NoteLength implements Lex class NoteLength implements Lex
@@ -27,10 +26,10 @@ class NoteLength implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'L') { if ($key === 'L') {
$this->builder->addNoteLength(new StringAtom($data)); $this->builder->addNoteLength(new StringAtom($data));

7
src/Domain/Modules/Interpreter/Lexicon/Notes.php Normal file → Executable file
View File

@@ -1,10 +1,9 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Closure;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Notes implements Lex class Notes implements Lex
@@ -27,10 +26,10 @@ class Notes implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'N') { if ($key === 'N') {
$this->builder->addNote(new StringAtom($data)); $this->builder->addNote(new StringAtom($data));

7
src/Domain/Modules/Interpreter/Lexicon/Origin.php Normal file → Executable file
View File

@@ -1,10 +1,9 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Closure;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Origin implements Lex class Origin implements Lex
@@ -27,10 +26,10 @@ class Origin implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'O') { if ($key === 'O') {
$this->builder->addOrigin(new StringAtom($data)); $this->builder->addOrigin(new StringAtom($data));

7
src/Domain/Modules/Interpreter/Lexicon/Parts.php Normal file → Executable file
View File

@@ -1,10 +1,9 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Closure;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Parts implements Lex class Parts implements Lex
@@ -27,10 +26,10 @@ class Parts implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'P' if ($key === 'P'
&& $context->getState() === $context::MODE_TUNE_HEADER && $context->getState() === $context::MODE_TUNE_HEADER

7
src/Domain/Modules/Interpreter/Lexicon/Rhythm.php Normal file → Executable file
View File

@@ -1,10 +1,9 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Closure;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Rhythm implements Lex class Rhythm implements Lex
@@ -27,10 +26,10 @@ class Rhythm implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'R' if ($key === 'R'
&& $context->getState() === $context::MODE_TUNE_HEADER && $context->getState() === $context::MODE_TUNE_HEADER

7
src/Domain/Modules/Interpreter/Lexicon/Source.php Normal file → Executable file
View File

@@ -1,10 +1,9 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Closure;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Source implements Lex class Source implements Lex
@@ -27,10 +26,10 @@ class Source implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'S' if ($key === 'S'
&& $context->getState() === $context::MODE_TUNE_HEADER && $context->getState() === $context::MODE_TUNE_HEADER

7
src/Domain/Modules/Interpreter/Lexicon/Tempo.php Normal file → Executable file
View File

@@ -1,10 +1,9 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Closure;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Tempo implements Lex class Tempo implements Lex
@@ -27,10 +26,10 @@ class Tempo implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'Q') { if ($key === 'Q') {
$this->builder->addTempo(new StringAtom($data)); $this->builder->addTempo(new StringAtom($data));

8
src/Domain/Modules/Interpreter/Lexicon/Title.php Normal file → Executable file
View File

@@ -1,10 +1,8 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Enzyme\Axiom\Atoms\StringAtom; use Closure;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Title implements Lex class Title implements Lex
@@ -27,10 +25,10 @@ class Title implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'T') { if ($key === 'T') {
$this->builder->addTitle($data); $this->builder->addTitle($data);

7
src/Domain/Modules/Interpreter/Lexicon/Transcriber.php Normal file → Executable file
View File

@@ -1,10 +1,9 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Closure;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Transcriber implements Lex class Transcriber implements Lex
@@ -27,10 +26,10 @@ class Transcriber implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'Z') { if ($key === 'Z') {
$this->builder->addTranscriber(new StringAtom($data)); $this->builder->addTranscriber(new StringAtom($data));

7
src/Domain/Modules/Interpreter/Lexicon/Words.php Normal file → Executable file
View File

@@ -1,10 +1,9 @@
<?php <?php
namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon; namespace XaiCorp\AbcParser\Domain\Modules\Interpreter\Lexicon;
use Closure;
use Enzyme\Axiom\Atoms\StringAtom; use Enzyme\Axiom\Atoms\StringAtom;
use XaiCorp\AbcParser\Domain\Atoms\UnsignedIntegerAtom;
use XaiCorp\AbcParser\Domain\Core\TuneBuilder; use XaiCorp\AbcParser\Domain\Core\TuneBuilder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Builder;
use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context; use XaiCorp\AbcParser\Domain\Modules\Interpreter\Context;
class Words implements Lex class Words implements Lex
@@ -27,10 +26,10 @@ class Words implements Lex
* @return mixed * @return mixed
* @throws \Enzyme\Axiom\Exceptions\AtomException * @throws \Enzyme\Axiom\Exceptions\AtomException
*/ */
public function handle(Context $context, \Closure $next) public function handle(Context $context, Closure $next)
{ {
$line = $context->current(); $line = $context->current();
list($key, $data) = $this->getKeyDataFromLine($line); [$key, $data] = $this->getKeyDataFromLine($line);
if ($key === 'W') { if ($key === 'W') {
$this->builder->addWords(new StringAtom($data)); $this->builder->addWords(new StringAtom($data));

0
src/Interfaces/Builder.php Normal file → Executable file
View File

0
src/Interfaces/Exporter.php Normal file → Executable file
View File

0
src/Interfaces/Manipulator.php Normal file → Executable file
View File

2
src/Traits/ValidationTrait.php Normal file → Executable file
View File

@@ -1,8 +1,8 @@
<?php <?php
namespace XaiCorp\AbcParser\Traits; namespace XaiCorp\AbcParser\Traits;
use Illuminate\Support\MessageBag;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Illuminate\Support\MessageBag;
Trait ValidationTrait Trait ValidationTrait
{ {

4
tests/_bootstrap.php Normal file → Executable file
View File

@@ -1,5 +1,7 @@
<?php <?php
// This is global bootstrap for autoloading // This is global bootstrap for autoloading
use Codeception\Util\Autoload;
include_once 'vendor/autoload.php'; include_once 'vendor/autoload.php';
\Codeception\Util\Autoload::addNamespace('Tests', codecept_root_dir().'tests/unit'); Autoload::addNamespace('Tests', codecept_root_dir() . 'tests/unit');

0
tests/_data/abc/jigs.abc Normal file → Executable file
View File

0
tests/_data/abc/valid_abc_1.abc Normal file → Executable file
View File

0
tests/_data/abc/valid_abc_2.abc Normal file → Executable file
View File

0
tests/_data/abc/valid_abc_3.abc Normal file → Executable file
View File

0
tests/_data/dump.sql Normal file → Executable file
View File

Some files were not shown because too many files have changed in this diff Show More