Skip to content

Commit

Permalink
Add mask processor and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Nathan Macnamara committed Jun 29, 2015
1 parent 5c6cff3 commit bb8607e
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 0 deletions.
31 changes: 31 additions & 0 deletions src/Parser.php
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,37 @@ public function get($key = null, $default = null)
return $default;
}

/**
* Mask input data with a given mapping.
*
* @param array $mask
*
* @return array
*/
public function mask(array $mask)
{
$keys = array();
foreach ($mask as $key => $value) {
$keys[] = $key . (is_array($value) ? $this->process_mask($value) : '');
}

return $this->only($keys);
}

/**
* Recursive processor for processing user masks.
*
* @param array $mask
*
* @return string
*/
private function process_mask($mask)
{
foreach ($mask as $key => $value) {
return '.' . $key . (is_array($value) ? $this->process_item($value) : '');
}
}

/**
* Parse the HTTP payload data, autodetect format and return all data in array.
* Override the format by providing a content type.
Expand Down
15 changes: 15 additions & 0 deletions tests/ParserTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,21 @@ protected function tearDown()
m::close();
}

/** @test */
public function mask_payload()
{
$parser = m::mock('Nathanmac\Utilities\Parser\Parser')
->shouldDeferMissing()
->shouldAllowMockingProtectedMethods();

$parser->shouldReceive('getPayload')
->andReturn('{"message": {"title": "Hello World", "body": "Some message content"}, "comments": [{ "title": "hello", "message": "hello world"}, {"title": "world", "message": "hello world"}]}');

$this->assertEquals(array("message" => array("title" => "Hello World")), $parser->mask(array('message' => array('title' => '*'))));
$this->assertEquals(array("comments" => array(array("title" => "hello", "message" => "hello world"), array("title" => "world", "message" => "hello world"))), $parser->mask(array('comments' => '*')));
$this->assertEquals(array('posts' => null), $parser->mask(array('posts' => '*')));
}

/** @test */
public function wildcards_with_simple_structure_json()
{
Expand Down

0 comments on commit bb8607e

Please sign in to comment.