Commit ef46957e authored by Bas de Nooijer's avatar Bas de Nooijer

Merge pull request #268 from juergen-vogel/master

Excludes on stats
parents f602c202 1e5e9c38
...@@ -52,6 +52,13 @@ class Field extends Configurable ...@@ -52,6 +52,13 @@ class Field extends Configurable
*/ */
protected $facets = array(); protected $facets = array();
/**
* Exclude tags for this stat
*
* @var array
*/
protected $excludes = array();
/** /**
* Initialize options * Initialize options
* *
...@@ -67,6 +74,13 @@ class Field extends Configurable ...@@ -67,6 +74,13 @@ class Field extends Configurable
case 'facet': case 'facet':
$this->setFacets($value); $this->setFacets($value);
break; break;
case 'exclude':
if (!is_array($value)) {
$value = array($value);
}
$this->setExcludes($value);
unset($this->options['exclude']);
break;
} }
} }
} }
...@@ -179,4 +193,83 @@ class Field extends Configurable ...@@ -179,4 +193,83 @@ class Field extends Configurable
return $this; return $this;
} }
}
/**
* Add an exclude tag
*
* @param string $tag
* @return self Provides fluent interface
*/
public function addExclude($tag)
{
$this->excludes[$tag] = true;
return $this;
}
/**
* Add multiple exclude tags
*
* @param array $excludes
* @return self Provides fluent interface
*/
public function addExcludes(array $excludes)
{
foreach ($excludes as $exclude) {
$this->addExclude($exclude);
}
return $this;
}
/**
* Get all excludes
*
* @return array
*/
public function getExcludes()
{
return array_keys($this->excludes);
}
/**
* Remove a single exclude tag
*
* @param string $exclude
* @return self Provides fluent interface
*/
public function removeExclude($exclude)
{
if (isset($this->excludes[$exclude])) {
unset($this->excludes[$exclude]);
}
return $this;
}
/**
* Remove all excludes
*
* @return self Provides fluent interface
*/
public function clearExcludes()
{
$this->excludes = array();
return $this;
}
/**
* Set multiple excludes
*
* This overwrites any existing excludes
*
* @param array $excludes
*/
public function setExcludes($excludes)
{
$this->clearExcludes();
$this->addExcludes($excludes);
}
}
\ No newline at end of file
...@@ -40,11 +40,12 @@ namespace Solarium\QueryType\Select\RequestBuilder\Component; ...@@ -40,11 +40,12 @@ namespace Solarium\QueryType\Select\RequestBuilder\Component;
use Solarium\QueryType\Select\Query\Component\Stats\Stats as StatsComponent; use Solarium\QueryType\Select\Query\Component\Stats\Stats as StatsComponent;
use Solarium\Core\Client\Request; use Solarium\Core\Client\Request;
use Solarium\Core\Query\RequestBuilder;
/** /**
* Add select component stats to the request * Add select component stats to the request
*/ */
class Stats implements ComponentRequestBuilderInterface class Stats extends RequestBuilder
{ {
/** /**
* Add request settings for the stats component * Add request settings for the stats component
...@@ -61,7 +62,12 @@ class Stats implements ComponentRequestBuilderInterface ...@@ -61,7 +62,12 @@ class Stats implements ComponentRequestBuilderInterface
// add fields // add fields
foreach ($component->getFields() as $field) { foreach ($component->getFields() as $field) {
$request->addParam('stats.field', $field->getKey()); $value = $this->renderLocalParams(
$field->getKey(),
array('ex' => $field->getExcludes())
);
$request->addParam('stats.field', $value);
// add field specific facet stats // add field specific facet stats
foreach ($field->getFacets() as $facet) { foreach ($field->getFacets() as $facet) {
...@@ -76,4 +82,4 @@ class Stats implements ComponentRequestBuilderInterface ...@@ -76,4 +82,4 @@ class Stats implements ComponentRequestBuilderInterface
return $request; return $request;
} }
} }
\ No newline at end of file
...@@ -107,4 +107,37 @@ class FieldTest extends \PHPUnit_Framework_TestCase ...@@ -107,4 +107,37 @@ class FieldTest extends \PHPUnit_Framework_TestCase
$this->field->setFacets(array('facet3', 'facet4')); $this->field->setFacets(array('facet3', 'facet4'));
$this->assertEquals(array('facet3', 'facet4'), $this->field->getFacets()); $this->assertEquals(array('facet3', 'facet4'), $this->field->getFacets());
} }
public function testAddExclude()
{
$this->field->addExclude('e1');
$this->assertEquals(array('e1'), $this->field->getExcludes());
}
public function testAddExcludes()
{
$this->field->addExcludes(array('e1', 'e2'));
$this->assertEquals(array('e1', 'e2'), $this->field->getExcludes());
}
public function testRemoveExclude()
{
$this->field->addExcludes(array('e1', 'e2'));
$this->field->removeExclude('e1');
$this->assertEquals(array('e2'), $this->field->getExcludes());
}
public function testClearExcludes()
{
$this->field->addExcludes(array('e1', 'e2'));
$this->field->clearExcludes();
$this->assertEquals(array(), $this->field->getExcludes());
}
public function testSetExcludes()
{
$this->field->addExcludes(array('e1', 'e2'));
$this->field->setExcludes(array('e3', 'e4'));
$this->assertEquals(array('e3', 'e4'), $this->field->getExcludes());
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment