Skip to content

Commit 378c8d7

Browse files
committed
Added Transformer support to Porter::import and ImportSpecification.
Added Transformer interface. Refactored filter code into FilterTransformer. Removed filters and mappings from Porter and ImportSpecification. Updated tests.
1 parent a4d8e02 commit 378c8d7

18 files changed

Lines changed: 233 additions & 464 deletions

.travis.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,6 @@ install:
3131
script:
3232
- composer test -- --coverage-clover=build/logs/clover.xml
3333

34-
# Remove mapper and run all non-Mapper tests again.
35-
- composer --dev --no-update-with-dependencies remove scriptfusion/mapper
36-
- '! composer info | grep ^scriptfusion/mapper\\b'
37-
- composer test -- --exclude-group Mapper
38-
3934
after_success:
4035
- composer require satooshi/php-coveralls
4136
- vendor/bin/coveralls -v

composer.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,12 @@
1818
"zendframework/zend-uri": "^2"
1919
},
2020
"require-dev": {
21-
"scriptfusion/mapper": "^1",
2221
"phpunit/phpunit": "^4.8",
2322
"mockery/mockery": "^0.9.4",
2423
"symfony/process": "^3"
2524
},
2625
"suggest" : {
27-
"scriptfusion/mapper": "Transforms imported data."
26+
"transformers/mapping": "Transforms array collections using Mappings."
2827
},
2928
"autoload": {
3029
"psr-4": {

src/Collection/CountableMappedRecords.php

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/Collection/MappedRecords.php

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/Mapper/PorterMapper.php

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/Mapper/Strategy/InvalidCallbackResultException.php

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/Mapper/Strategy/SubImport.php

Lines changed: 0 additions & 58 deletions
This file was deleted.

src/Porter.php

Lines changed: 6 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,15 @@
11
<?php
22
namespace ScriptFUSION\Porter;
33

4-
use ScriptFUSION\Mapper\CollectionMapper;
5-
use ScriptFUSION\Mapper\Mapping;
64
use ScriptFUSION\Porter\Cache\CacheAdvice;
75
use ScriptFUSION\Porter\Cache\CacheToggle;
86
use ScriptFUSION\Porter\Cache\CacheUnavailableException;
9-
use ScriptFUSION\Porter\Collection\CountableMappedRecords;
107
use ScriptFUSION\Porter\Collection\CountablePorterRecords;
118
use ScriptFUSION\Porter\Collection\CountableProviderRecords;
12-
use ScriptFUSION\Porter\Collection\FilteredRecords;
13-
use ScriptFUSION\Porter\Collection\MappedRecords;
149
use ScriptFUSION\Porter\Collection\PorterRecords;
1510
use ScriptFUSION\Porter\Collection\ProviderRecords;
1611
use ScriptFUSION\Porter\Collection\RecordCollection;
1712
use ScriptFUSION\Porter\Connector\RecoverableConnectorException;
18-
use ScriptFUSION\Porter\Mapper\PorterMapper;
1913
use ScriptFUSION\Porter\Provider\ObjectNotCreatedException;
2014
use ScriptFUSION\Porter\Provider\Provider;
2115
use ScriptFUSION\Porter\Provider\ProviderFactory;
@@ -40,11 +34,6 @@ class Porter
4034
*/
4135
private $providerFactory;
4236

43-
/**
44-
* @var CollectionMapper
45-
*/
46-
private $mapper;
47-
4837
/**
4938
* @var CacheAdvice
5039
*/
@@ -63,7 +52,6 @@ class Porter
6352
public function __construct()
6453
{
6554
$this->defaultCacheAdvice = CacheAdvice::SHOULD_NOT_CACHE();
66-
$this->fetchExceptionHandler = new ExponentialBackoffExceptionHandler;
6755
}
6856

6957
/**
@@ -84,12 +72,12 @@ public function import(ImportSpecification $specification)
8472
$records = $this->createProviderRecords($records, $specification->getResource());
8573
}
8674

87-
if ($specification->getFilter()) {
88-
$records = $this->filter($records, $specification->getFilter(), $specification->getContext());
89-
}
75+
foreach ($specification->getTransformers() as $transformer) {
76+
if ($transformer instanceof PorterAware) {
77+
$transformer->setPorter($this);
78+
}
9079

91-
if ($specification->getMapping()) {
92-
$records = $this->map($records, $specification->getMapping(), $specification->getContext());
80+
$records = $transformer->transform($records, $specification->getContext());
9381
}
9482

9583
return $this->createPorterRecords($records, $specification);
@@ -164,37 +152,6 @@ function (\Exception $exception) {
164152
throw new ImportException(get_class($provider) . '::fetch() did not return an Iterator.');
165153
}
166154

167-
private function filter(ProviderRecords $records, callable $predicate, $context)
168-
{
169-
$filter = function () use ($records, $predicate, $context) {
170-
foreach ($records as $record) {
171-
if ($predicate($record, $context)) {
172-
yield $record;
173-
}
174-
}
175-
};
176-
177-
return new FilteredRecords($filter(), $records, $filter);
178-
}
179-
180-
private function map(RecordCollection $records, Mapping $mapping, $context)
181-
{
182-
return $this->createMappedRecords(
183-
$this->getOrCreateMapper()->mapCollection($records, $mapping, $context),
184-
$records,
185-
$mapping
186-
);
187-
}
188-
189-
private function createMappedRecords(\Iterator $records, RecordCollection $previous, Mapping $mapping)
190-
{
191-
if ($previous instanceof \Countable) {
192-
return new CountableMappedRecords($records, count($previous), $previous, $mapping);
193-
}
194-
195-
return new MappedRecords($records, $previous, $mapping);
196-
}
197-
198155
private function applyCacheAdvice(Provider $provider, CacheAdvice $cacheAdvice)
199156
{
200157
try {
@@ -304,26 +261,6 @@ private function getOrCreateProviderFactory()
304261
return $this->providerFactory ?: $this->providerFactory = new ProviderFactory;
305262
}
306263

307-
/**
308-
* @return CollectionMapper
309-
*/
310-
private function getOrCreateMapper()
311-
{
312-
return $this->mapper ?: $this->mapper = new PorterMapper($this);
313-
}
314-
315-
/**
316-
* @param CollectionMapper $mapper
317-
*
318-
* @return $this
319-
*/
320-
public function setMapper(CollectionMapper $mapper)
321-
{
322-
$this->mapper = $mapper;
323-
324-
return $this;
325-
}
326-
327264
/**
328265
* Gets the maximum number of fetch attempts per import.
329266
*
@@ -353,7 +290,7 @@ public function setMaxFetchAttempts($attempts)
353290
*/
354291
private function getFetchExceptionHandler()
355292
{
356-
return $this->fetchExceptionHandler;
293+
return $this->fetchExceptionHandler ?: $this->fetchExceptionHandler = new ExponentialBackoffExceptionHandler;
357294
}
358295

359296
/**
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
namespace ScriptFUSION\Porter\Specification;
3+
4+
/**
5+
* The exception that is thrown when a transformer already exists at the target site.
6+
*/
7+
class DuplicateTransformerException extends \RuntimeException
8+
{
9+
// Intentionally empty.
10+
}

0 commit comments

Comments
 (0)