Skip to content

Commit

Permalink
data formatter refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
pnal committed Oct 13, 2020
1 parent ccf0ba1 commit 6f71332
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 4 deletions.
12 changes: 11 additions & 1 deletion src/Storage/Question/CsvDataFormatter.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,17 @@

class CsvDataFormatter implements DataFormatterInterface
{
/* Todo move it to config */
protected const CSV_HEADER_QUESTION_TEXT = 'Question text';
protected const CSV_HEADER_CREATED_AT = 'Created At';
protected const CSV_HEADER_CHOICE_TEXT = 'Choice';
protected const CSV_DELIMITER = ';';

protected const FORMAT_FILE_EXTENSION = '.csv';

/**
* @inheritDoc
*/
public function formatForStorage(QuestionCollection $questions): string
{
$maxChoicesCount = 0;
Expand Down Expand Up @@ -76,7 +80,10 @@ private function getCsvString(array ...$rows): string
return $resultCsvString;
}

public function getCollectionFromStorageFormat(string $data): ?QuestionCollection
/**
* @inheritDoc
*/
public function getCollectionFromStorageFormat(string $data): QuestionCollection
{
$questions = new QuestionCollection();
foreach (explode(PHP_EOL, $data) as $i => $row) {
Expand All @@ -100,6 +107,9 @@ public function getCollectionFromStorageFormat(string $data): ?QuestionCollectio
return $questions;
}

/**
* @inheritDoc
*/
public function getFormatFileExtension(): string
{
return static::FORMAT_FILE_EXTENSION;
Expand Down
19 changes: 18 additions & 1 deletion src/Storage/Question/DataFormatterInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,26 @@

interface DataFormatterInterface
{
/**
* Serialize Question Collection to string in proper format
*
* @param QuestionCollection $question
* @return string
*/
public function formatForStorage(QuestionCollection $question): string;

public function getCollectionFromStorageFormat(string $data): ?QuestionCollection;
/**
* Deserialize string data from proper format to Question Collection
*
* @param string $data
* @return QuestionCollection
*/
public function getCollectionFromStorageFormat(string $data): QuestionCollection;

/**
* Returns file extension according to format
*
* @return string
*/
public function getFormatFileExtension(): string;
}
13 changes: 11 additions & 2 deletions src/Storage/Question/JsonDataFormatter.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ class JsonDataFormatter implements DataFormatterInterface
{
protected const FORMAT_FILE_EXTENSION = '.json';

/**
* @inheritDoc
*/
public function formatForStorage(QuestionCollection $questions): string
{
return $this->encodeData($questions->toArray());
Expand All @@ -21,7 +24,10 @@ private function encodeData(array $data): string
return json_encode($data, JSON_PRETTY_PRINT);
}

public function getCollectionFromStorageFormat(string $data): ?QuestionCollection
/**
* @inheritDoc
*/
public function getCollectionFromStorageFormat(string $data): QuestionCollection
{
$collection = new QuestionCollection();
foreach ($this->decodeData($data) as $questionData) {
Expand All @@ -36,9 +42,12 @@ public function getCollectionFromStorageFormat(string $data): ?QuestionCollectio

private function decodeData(string $data): array
{
return json_decode($data) ? (array)json_decode($data) : [];
return json_decode($data) ?: [];
}

/**
* @inheritDoc
*/
public function getFormatFileExtension(): string
{
return static::FORMAT_FILE_EXTENSION;
Expand Down

0 comments on commit 6f71332

Please sign in to comment.