Skip to content
This repository has been archived by the owner. It is now read-only.

Commit

Permalink
Add listener for scrape fails
Browse files Browse the repository at this point in the history
  • Loading branch information
Jose Manuel Cardona committed Apr 5, 2019
1 parent d08fa15 commit 8caea51
Show file tree
Hide file tree
Showing 4 changed files with 111 additions and 7 deletions.
22 changes: 22 additions & 0 deletions src/Scraper/Listeners/ScrapeFailedListener.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

namespace Softonic\LaravelIntelligentScraper\Scraper\Listeners;

use Softonic\LaravelIntelligentScraper\Scraper\Events\ScrapeFailed;

class ScrapeFailedListener
{
private $listeners;

public function __construct($listeners)
{
$this->listeners = $listeners;
}

public function handle(ScrapeFailed $scraped)
{
if (isset($this->listeners[$scraped->scrapeRequest->type])) {
resolve($this->listeners[$scraped->scrapeRequest->type])->handle($scraped);
}
}
}
9 changes: 8 additions & 1 deletion src/ScraperProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use Softonic\LaravelIntelligentScraper\Scraper\Listeners\ConfigureScraper;
use Softonic\LaravelIntelligentScraper\Scraper\Listeners\Scrape;
use Softonic\LaravelIntelligentScraper\Scraper\Listeners\ScrapedListener;
use Softonic\LaravelIntelligentScraper\Scraper\Listeners\ScrapeFailedListener;
use Softonic\LaravelIntelligentScraper\Scraper\Listeners\UpdateDataset;

class ScraperProvider extends EventServiceProvider
Expand Down Expand Up @@ -75,7 +76,13 @@ public function register()
$this->app->when(ScrapedListener::class)
->needs('$listeners')
->give(function () {
return config('scraper.listeners');
return config('scraper.listeners.scraped');
});

$this->app->when(ScrapeFailedListener::class)
->needs('$listeners')
->give(function () {
return config('scraper.listeners.scrape-failed');
});
}
}
23 changes: 17 additions & 6 deletions src/config/scraper.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,31 @@
'ignore-identifiers' => '/^react_.*$/',
],
/*
* Configure listener per Scraped type
* Configure listener per event type
*
* Format:
* [
* 'type' => 'handler class',
* ].
*
* Declare in the "scraped" key the listener you want to attend the scrapes done successfully.
* Declare in the "scrape-failed" key the listener you want to attend the scrapes that could not retrieve the
* information.
*
* Example:
* [
* 'news' => App\NewsHandler::class,
* 'post' => App\PostHandler::class
* ]
* 'scraped' => [
* 'post' => App\CreatePostHandler::class
* ],
* 'scrape-failed' => [
* 'post' => App\NotifyErrorHandler::class
* ]
*/
'listeners' => [
//
'scraped' => [
//
],
'scrape-failed' => [
//
],
],
];
64 changes: 64 additions & 0 deletions tests/Unit/Scraper/Listeners/ScrapeFailedListenerTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?php

namespace Softonic\LaravelIntelligentScraper\Scraper\Listeners;

use Softonic\LaravelIntelligentScraper\Scraper\Events\ScrapeFailed;
use Softonic\LaravelIntelligentScraper\Scraper\Events\ScrapeRequest;
use Tests\TestCase;

class ScrapeFailedListenerTest extends TestCase
{
/**
* @test
*/
public function whenReceiveAnUnknownScrapeFailedTypeItShouldDoNothing()
{
$listener = \Mockery::mock(ScrapeFailedListener::class);
\App::instance(get_class($listener), $listener);

$scrapeFailedListener = new ScrapeFailedListener([
'known_type' => get_class($listener),
]);

$scrapeFailedEvent = new ScrapeFailed(
new ScrapeRequest(
'http://uri',
'unknown_type'
),
[],
1
);

$listener->shouldNotReceive('handle');

$scrapeFailedListener->handle($scrapeFailedEvent);
}

/**
* @test
*/
public function whenReceiveAKnownScrapeFailedTypeItShouldHandleTheEventWithTheSpecificDependency()
{
$listener = \Mockery::mock(ScrapeFailedListener::class);
\App::instance(get_class($listener), $listener);

$scrapeFailedListener = new ScrapeFailedListener([
'known_type' => get_class($listener),
]);

$scrapeFailedEvent = new ScrapeFailed(
new ScrapeRequest(
'http://uri',
'known_type'
),
[],
1
);

$listener->shouldReceive('handle')
->once()
->with($scrapeFailedEvent);

$scrapeFailedListener->handle($scrapeFailedEvent);
}
}

0 comments on commit 8caea51

Please sign in to comment.