Skip to content

Commit bccd599

Browse files
committed
Configuration updates
1 parent 77e85db commit bccd599

File tree

11 files changed

+281
-151
lines changed

11 files changed

+281
-151
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ composer.lock
77
target/
88
vendor/
99
bin/
10-
build/
10+
build/

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,4 +336,4 @@ This General Public License does not permit incorporating your program into
336336
proprietary programs. If your program is a subroutine library, you may
337337
consider it more useful to permit linking proprietary applications with the
338338
library. If this is what you want to do, use the GNU Lesser General
339-
Public License instead of this License.
339+
Public License instead of this License.

README.md

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1-
21
# scaytrase/symfony-sms-delivery-bundle
3-
[![Latest Stable Version](https://poser.pugx.org/scaytrase/symfony-sms-interface/v/stable.svg)](https://packagist.org/packages/scaytrase/symfony-sms-interface) [![Total Downloads](https://poser.pugx.org/scaytrase/symfony-sms-interface/downloads.svg)](https://packagist.org/packages/scaytrase/symfony-sms-interface) [![Latest Unstable Version](https://poser.pugx.org/scaytrase/symfony-sms-interface/v/unstable.svg)](https://packagist.org/packages/scaytrase/symfony-sms-interface) [![License](https://poser.pugx.org/scaytrase/symfony-sms-interface/license.svg)](https://packagist.org/packages/scaytrase/symfony-sms-interface)
2+
[![Latest Stable Version](https://poser.pugx.org/scaytrase/symfony-sms-interface/v/stable.svg)](https://packagist.org/packages/scaytrase/symfony-sms-interface)
3+
[![Total Downloads](https://poser.pugx.org/scaytrase/symfony-sms-interface/downloads.svg)](https://packagist.org/packages/scaytrase/symfony-sms-interface)
4+
[![Latest Unstable Version](https://poser.pugx.org/scaytrase/symfony-sms-interface/v/unstable.svg)](https://packagist.org/packages/scaytrase/symfony-sms-interface)
5+
[![License](https://poser.pugx.org/scaytrase/symfony-sms-interface/license.svg)](https://packagist.org/packages/scaytrase/symfony-sms-interface)
46

57
[![Monthly Downloads](https://poser.pugx.org/scaytrase/symfony-sms-interface/d/monthly.png)](https://packagist.org/packages/scaytrase/symfony-sms-interface)
68
[![Daily Downloads](https://poser.pugx.org/scaytrase/symfony-sms-interface/d/daily.png)](https://packagist.org/packages/scaytrase/symfony-sms-interface)
79

8-
This Symfony2 bundle provides basic service for sending short messages. This bundle does not provide you any finished implementation for communicating the SMS gateway. To use it you have use some transport implementation or implemenent a transport on your own. See [usage section](#Usage) for known implementations
10+
This Symfony bundle provides basic service for sending short messages. This bundle does not provide you any finished
11+
implementation for communicating the SMS gateway. To use it you have use some transport implementation or
12+
implement a transport on your own. See [usage section](#Usage) for known implementations
913

1014
## Features
1115

@@ -47,22 +51,50 @@ Below is the configuration example and their default values
4751

4852
```yaml
4953
sms_delivery:
54+
spool: sms_delivery.spool.instant
5055
transport: sms_delivery.dummy_sender # @id of the transport service
51-
disable_delivery: false # disables actual delivery making every send return successful result. use profiler to get message details
52-
delivery_recipient: null # when not null - sends every message to the specified recipient, ignoring actual recipient of the message.
56+
disable_delivery: false # disable delivery overrides spool with disabled spool
57+
delivery_recipient: null # delivery recipient overrides recipient when sending
5358
```
5459
5560
## Usage
5661
57-
To use this interface you must create a message class implementing ``ShortMessageInterface`` and implement a transport that delivers your message to end point sms gateway. You can refer my [WebSMS](https://github.com/scaytrase/symfony-websms-bundle) gateway implementation as a reference.
62+
To use this interface you must create a message class implementing ``ShortMessageInterface`` and create the implementation of the
63+
``TransportInterface`` that delivers your message to end point sms gateway.
64+
You can refer my [WebSMS](https://github.com/scaytrase/symfony-websms-bundle) gateway implementation as a reference.
5865
5966
6067
### Example
6168
62-
```php
69+
```php
70+
class MyMessage implements ShortMessageInterface { /*...*/ }
71+
72+
class SmsController extends Controller {
73+
6374
public function sendSmsAction(){
64-
$message = new YourMessage('5552368','Help!')
65-
$result = $this->get('sms_delivery.sender')->send($message);
66-
return new Response('Delivery '. $result ? 'successful' ; 'failed');
75+
$message = new MyMessage('5552368','Help!')
76+
$sender = $this->get('sms_delivery.sender');
77+
$sender->spoolMessage($message);
78+
$result = $sender->flush();
79+
return new Response('Delivery '. $result ? 'successful' : 'failed');
6780
}
6881
```
82+
83+
84+
### Standalone usage
85+
86+
Despite of the fact that this library is designed as Symfony bundle it could be used as standalone library for sending
87+
short messages. You should just instantiate sender service on your own.
88+
89+
```php
90+
91+
class MyProviderSmsTransport implements TransportInterface { /*...*/ }
92+
93+
class MyMessage implements ShortMessageInterface { /*...*/ }
94+
95+
$transport = new MyProviderSmsTransport();
96+
$sender = new MessageDeliveryService($transport);
97+
$sender->spoolMessage(new MyMessage('Message body'));
98+
$sender->flush(); // Default InstantSpool does not actually needs flushing but you can use another spool instead
99+
100+
```
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: batanov.pavel
5+
* Date: 21.07.2015
6+
* Time: 16:26
7+
*/
8+
9+
namespace ScayTrase\SmsDeliveryBundle\DependencyInjection\Compiler;
10+
11+
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
12+
use Symfony\Component\DependencyInjection\ContainerBuilder;
13+
14+
class SpoolCompilerPass implements CompilerPassInterface
15+
{
16+
17+
/**
18+
* You can modify the container here before it is dumped to PHP code.
19+
*
20+
* @param ContainerBuilder $container
21+
*
22+
* @api
23+
*/
24+
public function process(ContainerBuilder $container)
25+
{
26+
if (!$container->hasDefinition('sms_delivery.sender')) {
27+
return;
28+
}
29+
30+
$sender = $container->getDefinition('sms_delivery.sender');
31+
32+
if (
33+
$container->hasParameter('sms_delivery.disable_delivery') &&
34+
$container->getParameter('sms_delivery.disable_delivery') === true &&
35+
$container->hasDefinition('sms_delivery.spool.disabled')
36+
) {
37+
$sender->replaceArgument(1, $container->getDefinition('sms_delivery.spool.disabled'));
38+
} else {
39+
$spool = $container->getDefinition($container->getParameter('sms_delivery.spool'));
40+
$sender->replaceArgument(1, $spool);
41+
}
42+
}
43+
}

src/ScayTrase/SmsDeliveryBundle/DependencyInjection/Compiler/TransportCompilerPass.php

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
1212
use Symfony\Component\DependencyInjection\ContainerBuilder;
13+
use Symfony\Component\DependencyInjection\Definition;
1314

1415
class TransportCompilerPass implements CompilerPassInterface
1516
{
@@ -23,14 +24,27 @@ class TransportCompilerPass implements CompilerPassInterface
2324
*/
2425
public function process(ContainerBuilder $container)
2526
{
26-
$container->getDefinition('sms_delivery.sender')->replaceArgument(
27-
0,
28-
$container->getDefinition($container->getParameter('sms_delivery.transport'))
29-
);
27+
if (!$container->hasDefinition('sms_delivery.sender')) {
28+
return;
29+
}
3030

31-
$container->getDefinition('sms_delivery.sender')->replaceArgument(
32-
1,
33-
$container->getDefinition($container->getParameter('sms_delivery.spool'))
34-
);
31+
$sender = $container->getDefinition('sms_delivery.sender');
32+
33+
$transport = $container->getDefinition($container->getParameter('sms_delivery.transport'));
34+
if (
35+
$container->hasParameter('sms_delivery.delivery_recipient') &&
36+
$container->getParameter('sms_delivery.delivery_recipient') !== null
37+
) {
38+
$overrideTransport = new Definition('ScayTrase\SmsDeliveryBundle\Transport\OverrideRecipientTransport');
39+
$overrideTransport->setArguments(
40+
array(
41+
$transport,
42+
$container->getParameter('sms_delivery.delivery_recipient')
43+
)
44+
);
45+
$sender->replaceArgument(0, $overrideTransport);
46+
} else {
47+
$sender->replaceArgument(0, $transport);
48+
}
3549
}
3650
}

src/ScayTrase/SmsDeliveryBundle/Service/MessageDeliveryService.php

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
namespace ScayTrase\SmsDeliveryBundle\Service;
1010

11-
use ScayTrase\SmsDeliveryBundle\Spool\DisabledSpool;
1211
use ScayTrase\SmsDeliveryBundle\Spool\InstantSpool;
1312
use ScayTrase\SmsDeliveryBundle\Spool\Package;
1413
use ScayTrase\SmsDeliveryBundle\Spool\SpoolInterface;
@@ -23,10 +22,6 @@ class MessageDeliveryService
2322
{
2423
/** @var TransportInterface */
2524
protected $transport;
26-
/** @var boolean */
27-
private $deliveryDisabled;
28-
/** @var string */
29-
private $recipientOverride;
3025
/** @var Package[] */
3126
private $profile = array();
3227
/** @var SpoolInterface */
@@ -35,22 +30,13 @@ class MessageDeliveryService
3530
/**
3631
* @param TransportInterface $transport
3732
* @param SpoolInterface $spool
38-
* @param bool $deliveryDisabled
39-
* @param null|string $recipientOverride
4033
*/
41-
public function __construct(
42-
TransportInterface $transport,
43-
SpoolInterface $spool = null,
44-
$deliveryDisabled = false,
45-
$recipientOverride = null
46-
)
34+
public function __construct(TransportInterface $transport, SpoolInterface $spool = null)
4735
{
4836
$this->transport = $transport;
4937
$this->spool = $spool;
50-
$this->deliveryDisabled = $deliveryDisabled;
51-
$this->recipientOverride = $recipientOverride;
5238
if (!$this->spool) {
53-
$this->spool = $this->deliveryDisabled ? new DisabledSpool() : new InstantSpool();
39+
$this->spool = new InstantSpool();
5440
}
5541
}
5642

@@ -60,10 +46,6 @@ public function __construct(
6046
*/
6147
public function spoolMessage(ShortMessageInterface $message)
6248
{
63-
if (($this->recipientOverride) !== null) {
64-
$message->setRecipient($this->recipientOverride);
65-
}
66-
6749
$package = new Package($this->transport, $message);
6850
$this->profile[] = $package;
6951
return $this->spool->pushPackage($package);

src/ScayTrase/SmsDeliveryBundle/SmsDeliveryBundle.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace ScayTrase\SmsDeliveryBundle;
44

5+
use ScayTrase\SmsDeliveryBundle\DependencyInjection\Compiler\SpoolCompilerPass;
56
use ScayTrase\SmsDeliveryBundle\DependencyInjection\Compiler\TransportCompilerPass;
67
use Symfony\Component\DependencyInjection\ContainerBuilder;
78
use Symfony\Component\HttpKernel\Bundle\Bundle;
@@ -22,6 +23,7 @@ public function build(ContainerBuilder $container)
2223
{
2324
parent::build($container);
2425
$container->addCompilerPass(new TransportCompilerPass());
26+
$container->addCompilerPass(new SpoolCompilerPass());
2527
}
2628

2729
}

src/ScayTrase/SmsDeliveryBundle/Spool/SpoolInterface.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@
88

99
namespace ScayTrase\SmsDeliveryBundle\Spool;
1010

11-
use ScayTrase\SmsDeliveryBundle\Service\ShortMessageInterface;
12-
use ScayTrase\SmsDeliveryBundle\Transport\TransportInterface;
13-
1411
interface SpoolInterface
1512
{
1613
/**
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: batanov.pavel
5+
* Date: 13.08.2015
6+
* Time: 8:37
7+
*/
8+
9+
namespace ScayTrase\SmsDeliveryBundle\Tests;
10+
11+
use ScayTrase\SmsDeliveryBundle\DataCollector\MessageDeliveryDataCollector;
12+
use ScayTrase\SmsDeliveryBundle\DependencyInjection\Compiler\SpoolCompilerPass;
13+
use ScayTrase\SmsDeliveryBundle\DependencyInjection\Compiler\TransportCompilerPass;
14+
use ScayTrase\SmsDeliveryBundle\DependencyInjection\SmsDeliveryExtension;
15+
use ScayTrase\SmsDeliveryBundle\Service\MessageDeliveryService;
16+
use ScayTrase\SmsDeliveryBundle\Service\ShortMessageInterface;
17+
use ScayTrase\SmsDeliveryBundle\Spool\DisabledSpool;
18+
use ScayTrase\SmsDeliveryBundle\Transport\DummyTransport;
19+
use Symfony\Component\DependencyInjection\ContainerBuilder;
20+
use Symfony\Component\HttpFoundation\Request;
21+
use Symfony\Component\HttpFoundation\Response;
22+
23+
class BundleTest extends \PHPUnit_Framework_TestCase
24+
{
25+
/**
26+
* @return array configurations array
27+
*/
28+
public function configurationProvider()
29+
{
30+
return array(
31+
'missing_configuration' => array(null),
32+
'empty_configuration' => array(array()),
33+
'disable_delivery_configuration' => array(array('disable_delivery' => true)),
34+
'delivery_recipient_configuration' => array(array('delivery_recipient' => '1234567890')),
35+
'full_configuration' => array(array('disable_delivery' => true, 'delivery_recipient' => '1234567890')),
36+
);
37+
}
38+
39+
/**
40+
* @dataProvider configurationProvider
41+
* @param $config
42+
*/
43+
public function testBundleConfiguration($config)
44+
{
45+
$container = $this->buildContainer($config);
46+
47+
self::assertTrue($container->hasParameter('sms_delivery.spool'));
48+
self::assertTrue($container->hasParameter('sms_delivery.transport'));
49+
self::assertTrue($container->hasParameter('sms_delivery.disable_delivery'));
50+
self::assertTrue($container->hasParameter('sms_delivery.delivery_recipient'));
51+
}
52+
53+
/**
54+
* @param array|null $config
55+
* @return ContainerBuilder
56+
*/
57+
private function buildContainer(array $config = null)
58+
{
59+
$extension = new SmsDeliveryExtension();
60+
$container = new ContainerBuilder();
61+
$container->addCompilerPass(new TransportCompilerPass());
62+
$container->addCompilerPass(new SpoolCompilerPass());
63+
$extension->load(array((array)$config), $container);
64+
$container->compile();
65+
return $container;
66+
}
67+
68+
public function testBundleConfigurationValues()
69+
{
70+
$container = $this->buildContainer(array('disable_delivery' => true, 'delivery_recipient' => '1234567890'));
71+
72+
self::assertEquals(true, $container->getParameter('sms_delivery.disable_delivery'));
73+
self::assertEquals('1234567890', $container->getParameter('sms_delivery.delivery_recipient'));
74+
}
75+
76+
public function testDefaultRecipientDelivery()
77+
{
78+
$container = $this->buildContainer(array('delivery_recipient' => '1234567890'));
79+
80+
/** @var MessageDeliveryService|\PHPUnit_Framework_MockObject_MockObject $sender */
81+
$sender = $container->get('sms_delivery.sender');
82+
83+
/** @var ShortMessageInterface|\PHPUnit_Framework_MockObject_MockObject $message */
84+
$message = $this->getMock('ScayTrase\SmsDeliveryBundle\Service\ShortMessageInterface');
85+
$message->expects(self::once())->method('setRecipient');
86+
87+
$sender->spoolMessage($message);
88+
}
89+
90+
public function testPublicService()
91+
{
92+
$container = $this->buildContainer();
93+
94+
/** @var ShortMessageInterface|\PHPUnit_Framework_MockObject_MockObject $message */
95+
$message = $this->getMock('ScayTrase\SmsDeliveryBundle\Service\ShortMessageInterface');
96+
97+
/** @var MessageDeliveryService $sender */
98+
$sender = $container->get('sms_delivery.sender');
99+
100+
self::assertFalse($sender->spoolMessage($message));
101+
}
102+
103+
public function testDataCollector()
104+
{
105+
$transport = new DummyTransport();
106+
107+
/** @var MessageDeliveryService $sender */
108+
$sender = new MessageDeliveryService($transport, new DisabledSpool);
109+
$collector = new MessageDeliveryDataCollector($sender);
110+
111+
/** @var ShortMessageInterface|\PHPUnit_Framework_MockObject_MockObject $message */
112+
$message = $this->getMock('ScayTrase\SmsDeliveryBundle\Service\ShortMessageInterface');
113+
114+
self::assertTrue($sender->spoolMessage($message));
115+
$collector->collect(new Request(), new Response());
116+
self::assertEquals(1, count($collector->getData()));
117+
}
118+
}

0 commit comments

Comments
 (0)