Skip to content

Commit

Permalink
Merge pull request #3 from chrisnharvey/feature/change-template
Browse files Browse the repository at this point in the history
Adding the ability to change template directory
  • Loading branch information
gajus committed Feb 5, 2015
2 parents 54162b1 + 827861e commit ac20750
Show file tree
Hide file tree
Showing 5 changed files with 118 additions and 1 deletion.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,14 @@ The above will produce:

Methods to dump XML are for debugging only. You do not need to deal with XML when making the request or handling the response.

### Changing the template directory
The location of your request templates can be changed by calling the ```setTemplateDirectory()``` method.
```php
$service->setTemplateDirectory('/my/templates/live/here');

$service->getTemplateDirectory(); // Returns: /my/templates/live/here
```

### Make Request

Make the request and capture the `Response`:
Expand Down
27 changes: 26 additions & 1 deletion src/Service.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
*/
class Service {
private
$template_dir,
$interface_url,
$site_reference,
$username,
Expand All @@ -26,14 +27,38 @@ public function __construct ($site_reference, $username, $password, $interface_u
$this->site_reference = $site_reference;
$this->username = $username;
$this->password = $password;

$this->setTemplateDirectory(__DIR__ . '/template');
}

/**
* @param string $dir The directory
*/
public function setTemplateDirectory($dir)
{
if ( ! is_dir($dir)) {
throw new Exception\InvalidArgumentException("'{$dir}' is not a valid directory");
}

$this->template_dir = $dir;

return $this;
}

/**
* @return string The template directory
*/
public function getTemplateDirectory()
{
return $this->template_dir;
}

/**
* @param string $name Request template name, e.g. "card/order".
* @return Gajus\Strading\Request
*/
public function request ($name) {
$template = __DIR__ . '/template/' . $name . '.xml';
$template = $this->getTemplateDirectory() . '/' . $name . '.xml';

if (!file_exists($template)) {
throw new Exception\InvalidArgumentException('Request template does not exist.');
Expand Down
19 changes: 19 additions & 0 deletions tests/BuildRequestTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,25 @@ public function testBuildRequest () {
return $auth;
}

public function testBuildRequestWithDifferentTemplate()
{
$templatePath = __DIR__.'/xml/alternative/template';
$service = $this->service->setTemplateDirectory($templatePath);

$this->assertEquals($service->getTemplateDirectory(), $templatePath);

$auth = $this->service->request('card/auth');

$this->assertInstanceOf('Gajus\Strading\Request', $auth);

$request_xml = $auth->getXML();

// The purpose of this test is to make sure that request is stripped of empty tags.
$this->assertXmlStringEqualsXmlString($this->loadXML('alternative/stubs/card_auth'), $request_xml);

return $auth;
}

/**
* @depends testBuildRequest
*/
Expand Down
10 changes: 10 additions & 0 deletions tests/xml/alternative/stubs/card_auth.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<requestblock version="3.67">
<alias>{username}</alias>
<request type="ALTERNATIVE_AUTH">
<operation>
<sitereference>{site_reference}</sitereference>
<accounttypedescription>ECOM</accounttypedescription>
</operation>
</request>
</requestblock>
55 changes: 55 additions & 0 deletions tests/xml/alternative/template/card/auth.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<requestblock version="3.67">
<alias/>
<request type="ALTERNATIVE_AUTH">
<merchant>
<email/>
<orderreference/>
</merchant>
<customer>
<telephone/>
<email/>
<forwardedip/>
<ip/>
<premise/>
<street/>
<county/>
<country/>
<postcode/>
<town/>
<name>
<middle/>
<prefix/>
<last/>
<first/>
</name>
</customer>
<billing>
<amount/>
<premise/>
<street/>
<town/>
<county/>
<country/>
<email/>
<postcode/>
<telephone/>
<name>
<middle/>
<prefix/>
<last/>
<suffix/>
<first/>
</name>
<payment>
<startdate/>
<expirydate/>
<pan/>
<securitycode/>
</payment>
</billing>
<operation>
<sitereference/>
<accounttypedescription>ECOM</accounttypedescription>
</operation>
</request>
</requestblock>

0 comments on commit ac20750

Please sign in to comment.