Skip to content

Commit

Permalink
cont'd internal refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
Clifford Vickrey committed Oct 11, 2023
1 parent 53aaefb commit a14b04c
Show file tree
Hide file tree
Showing 14 changed files with 39 additions and 38 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ $builder->setTitle('Browser Usage by Platform');
$builder->setColVariableName('Browser');
$builder->setRowVariableName('Platform');
$builder->setShowPercent(true);
$builder->setPercentType((\CliffordVickrey\Crosstabs\Options\CrosstabPercentType::COLUMN);
$builder->setPercentType((\CliffordVickrey\Crosstabs\Options\CrosstabPercentType::Column);

$crosstab = $builder->build();

Expand All @@ -76,7 +76,7 @@ var_dump($crosstab->getChiSquared()); // 598.35 (clearly significant!)
$builder->setTitle('Browser Usage by Platform by Device Type');
$builder->addLayer('Device Type');
// percentages will be of columns within each layer category; great for visualizing the effects of control variables
$builder->setPercentType(\CliffordVickrey\Crosstabs\Options\CrosstabPercentType::COLUMN_WITHIN_LAYER);
$builder->setPercentType(\CliffordVickrey\Crosstabs\Options\CrosstabPercentType::ColumnWithinLayer);
$crosstab = $builder->build();
echo $crosstab->write();

Expand Down Expand Up @@ -194,7 +194,7 @@ Sets the label to use for weighted percentage cells. Defaults to "% (Weighted)
#### `@setPercentType(CrosstabPercentType $percentType): void`

Sets the percent type (row, column, total, etc.). See the `\CliffordVickrey\Crosstabs\Options\CrosstabPercentType` enum
for a list of allowable options. Defaults to `CrosstabPercentType::TOTAL`
for a list of allowable options. Defaults to `CrosstabPercentType::Total`

#### `@setRawData(iterable $rawData): void`

Expand Down
2 changes: 1 addition & 1 deletion src/CrosstabBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ private function formatNumber(mixed $valueParsed, bool $percent): string

$valueParsed = (float)$valueParsed;

$type = $percent ? CrosstabNumberFormatterType::PERCENT : CrosstabNumberFormatterType::DECIMAL;
$type = $percent ? CrosstabNumberFormatterType::Percent : CrosstabNumberFormatterType::Decimal;

if ($percent) {
$scale = $this->scalePercent;
Expand Down
10 changes: 5 additions & 5 deletions src/Helper/CrosstabTreeBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public function __construct(?CrosstabParamsSerializerInterface $serializer = nul
public function buildTree(
CrosstabVariableCollection $variables,
array $totals,
CrosstabPercentType $percentType = CrosstabPercentType::TOTAL,
CrosstabPercentType $percentType = CrosstabPercentType::Total,
string $messageTotal = 'Total',
int $scale = CrosstabMathInterface::DEFAULT_SCALE
): CrosstabTree {
Expand Down Expand Up @@ -205,16 +205,16 @@ private function getPercentDivisors(
array $query
): array {
$key = match ($percentType) {
CrosstabPercentType::COLUMN => $this->serializer->serializeParams(array_intersect_key($query, [
CrosstabPercentType::Column => $this->serializer->serializeParams(array_intersect_key($query, [
$colVar->name => true
])),
CrosstabPercentType::COLUMN_WITHIN_LAYER => $this->serializer->serializeParams(array_diff_key($query, [
CrosstabPercentType::ColumnWithinLayer => $this->serializer->serializeParams(array_diff_key($query, [
$rowVar->name => true
])),
CrosstabPercentType::ROW => $this->serializer->serializeParams(array_diff_key($query, [
CrosstabPercentType::Row => $this->serializer->serializeParams(array_diff_key($query, [
$colVar->name => true
])),
CrosstabPercentType::TOTAL_WITHIN_LAYER => $this->serializer->serializeParams(array_diff_key($query, [
CrosstabPercentType::TotalWithinLayer => $this->serializer->serializeParams(array_diff_key($query, [
$rowVar->name => true,
$colVar->name => true
])),
Expand Down
2 changes: 1 addition & 1 deletion src/Helper/CrosstabTreeBuilderInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ interface CrosstabTreeBuilderInterface
public function buildTree(
CrosstabVariableCollection $variables,
array $totals,
CrosstabPercentType $percentType = CrosstabPercentType::TOTAL,
CrosstabPercentType $percentType = CrosstabPercentType::Total,
string $messageTotal = 'Total',
int $scale = CrosstabMathInterface::DEFAULT_SCALE
): CrosstabTree;
Expand Down
2 changes: 1 addition & 1 deletion src/NumberFormatting/CrosstabNumberFormatterFlyweight.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public function getNumberFormatter(
$maxFractionDigits = \NumberFormatter::MAX_FRACTION_DIGITS;
} else {
// @codeCoverageIgnoreStart
$nf = new CrosstabPolyfillNumberFormatter($type === CrosstabNumberFormatterType::PERCENT);
$nf = new CrosstabPolyfillNumberFormatter($type === CrosstabNumberFormatterType::Percent);
$maxFractionDigits = 6;
// @codeCoverageIgnoreEnd
}
Expand Down
17 changes: 9 additions & 8 deletions src/NumberFormatting/CrosstabNumberFormatterType.php
Original file line number Diff line number Diff line change
@@ -1,30 +1,31 @@
<?php

/** @noinspection PhpComposerExtensionStubsInspection */

declare(strict_types=1);

namespace CliffordVickrey\Crosstabs\NumberFormatting;

use NumberFormatter;
use function extension_loaded;

/**
* @internal
*/
enum CrosstabNumberFormatterType
{
case DECIMAL;
case PERCENT;
case Decimal;
case Percent;

/**
* @return int
* @noinspection PhpFullyQualifiedNameUsageInspection
*/
public function toIntlConstant(): int
{
if (self::DECIMAL === $this) {
return NumberFormatter::DECIMAL;
if (!extension_loaded('intl')) {
// @codeCoverageIgnoreStart
return self::Decimal === $this ? 1 : 3;
// @codeCoverageIgnoreEnd
}

return NumberFormatter::PERCENT;
return self::Decimal === $this ? \NumberFormatter::DECIMAL : \NumberFormatter::PERCENT;
}
}
2 changes: 1 addition & 1 deletion src/Options/CrosstabOptions.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ class CrosstabOptions
protected string $messageWeightedFrequency = 'Frequency (Weighted)';
/** @var non-empty-string */
protected string $messageWeightedPercent = '% (Weighted)';
protected CrosstabPercentType $percentType = CrosstabPercentType::TOTAL;
protected CrosstabPercentType $percentType = CrosstabPercentType::Total;
/** @var iterable<array-key, mixed> */
protected iterable $rawData = [];
/** @var non-empty-string|null */
Expand Down
10 changes: 5 additions & 5 deletions src/Options/CrosstabPercentType.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@

enum CrosstabPercentType: string
{
case COLUMN = 'column'; // column percentages
case COLUMN_WITHIN_LAYER = 'columnWithinLayer'; // column percentages for each layer (in layered crosstabs)
case TOTAL = 'total'; // total percentages
case TOTAL_WITHIN_LAYER = 'totalWithinLayer'; // total percentages for each layer (in layered crosstabs)
case ROW = 'row'; // row percentages
case Column = 'column'; // column percentages
case ColumnWithinLayer = 'columnWithinLayer'; // column percentages for each layer (in layered crosstabs)
case Total = 'total'; // total percentages
case TotalWithinLayer = 'totalWithinLayer'; // total percentages for each layer (in layered crosstabs)
case Row = 'row'; // row percentages
}
2 changes: 1 addition & 1 deletion tests/Provider/TestDataProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ public function getCrosstab(): Crosstab
$builder->setRowVariableName('Platform');
$builder->setTitle('Browser Usage By Platform');
$builder->setShowPercent(true);
$builder->setPercentType(CrosstabPercentType::COLUMN_WITHIN_LAYER);
$builder->setPercentType(CrosstabPercentType::ColumnWithinLayer);
$builder->setRawData(call_user_func($this));
$crosstab = $builder->build();
file_put_contents($filename, serialize($crosstab));
Expand Down
2 changes: 1 addition & 1 deletion tests/Unit/Crosstab/CrosstabTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public function testConstruct(): void
$builder->setRowVariableName('Platform');
$builder->setTitle('Browser Usage By Platform');
$builder->setShowPercent(true);
$builder->setPercentType(CrosstabPercentType::COLUMN_WITHIN_LAYER);
$builder->setPercentType(CrosstabPercentType::ColumnWithinLayer);
$builder->setRawData($data);
$crosstab = $builder->build();

Expand Down
4 changes: 2 additions & 2 deletions tests/Unit/CrosstabBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public function setUp(): void
$this->builder->setRowVariableName('Platform');
$this->builder->setTitle('Browser Usage By Platform');
$this->builder->setShowPercent(true);
$this->builder->setPercentType(CrosstabPercentType::COLUMN_WITHIN_LAYER);
$this->builder->setPercentType(CrosstabPercentType::ColumnWithinLayer);
$this->builder->setRawData(self::$data);
}

Expand Down Expand Up @@ -334,7 +334,7 @@ public function testBuildLayered(): void
{
$this->builder->setTitle('Browser Usage By Platform and Device Type');
$this->builder->addLayer('Device Type');
$this->builder->setPercentType(CrosstabPercentType::COLUMN_WITHIN_LAYER);
$this->builder->setPercentType(CrosstabPercentType::ColumnWithinLayer);
$crosstab = $this->builder->build();
self::assertEquals(55, $crosstab->getDegreesOfFreedom());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,32 +26,32 @@ public function testGetNumberFormatter(): void
$flyweight = new CrosstabNumberFormatterFlyweight();

// test percent format
$nf = $flyweight->getNumberFormatter(CrosstabNumberFormatterType::PERCENT, 'en_US', 2);
$nf = $flyweight->getNumberFormatter(CrosstabNumberFormatterType::Percent, 'en_US', 2);
self::assertEquals(2, $nf->getAttribute(NumberFormatter::MAX_FRACTION_DIGITS));
self::assertEquals('en_US', $nf->getLocale());
self::assertEquals('12.05%', $nf->format(.1205));

// test memoization
$nf->setAttribute(NumberFormatter::MAX_FRACTION_DIGITS, 3);
$nf = $flyweight->getNumberFormatter(CrosstabNumberFormatterType::PERCENT, 'en_US', 2);
$nf = $flyweight->getNumberFormatter(CrosstabNumberFormatterType::Percent, 'en_US', 2);
self::assertEquals(3, $nf->getAttribute(NumberFormatter::MAX_FRACTION_DIGITS));
self::assertEquals('en_US', $nf->getLocale());
self::assertEquals('12.005%', $nf->format(.12005));

// test scale
$nf = $flyweight->getNumberFormatter(CrosstabNumberFormatterType::PERCENT, 'en_US', 4);
$nf = $flyweight->getNumberFormatter(CrosstabNumberFormatterType::Percent, 'en_US', 4);
self::assertEquals(4, $nf->getAttribute(NumberFormatter::MAX_FRACTION_DIGITS));
self::assertEquals('en_US', $nf->getLocale());
self::assertEquals('12.0005%', $nf->format(.120005));

// test separate locale
$nf = $flyweight->getNumberFormatter(CrosstabNumberFormatterType::PERCENT, 'es_ES', 2);
$nf = $flyweight->getNumberFormatter(CrosstabNumberFormatterType::Percent, 'es_ES', 2);
self::assertEquals(2, $nf->getAttribute(NumberFormatter::MAX_FRACTION_DIGITS));
self::assertEquals('es_ES', $nf->getLocale());
self::assertEquals('12,05 %', preg_replace('/\s+/u', ' ', (string)$nf->format(.1205)));

// test decimal format
$nf = $flyweight->getNumberFormatter(CrosstabNumberFormatterType::DECIMAL, 'en_US', 2);
$nf = $flyweight->getNumberFormatter(CrosstabNumberFormatterType::Decimal, 'en_US', 2);
self::assertEquals(2, $nf->getAttribute(NumberFormatter::MAX_FRACTION_DIGITS));
self::assertEquals('en_US', $nf->getLocale());
self::assertEquals('0.12', $nf->format(.1205));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ class CrosstabNumberFormatterTypeTest extends TestCase
*/
public function testToIntlConstant(): void
{
$type = CrosstabNumberFormatterType::DECIMAL;
$type = CrosstabNumberFormatterType::Decimal;
self::assertEquals(NumberFormatter::DECIMAL, $type->toIntlConstant());
$type = CrosstabNumberFormatterType::PERCENT;
$type = CrosstabNumberFormatterType::Percent;
self::assertEquals(NumberFormatter::PERCENT, $type->toIntlConstant());
}
}
4 changes: 2 additions & 2 deletions tests/Unit/Options/CrosstabOptionsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public function testToArray(): void
$options->setMessageWeightedExpectedPercent('weighted expected percent');
$options->setMessageWeightedFrequency('weighted frequency');
$options->setMessageWeightedPercent('setMessageWeightedPercent');
$options->setPercentType(CrosstabPercentType::ROW);
$options->setPercentType(CrosstabPercentType::Row);
$options->setRawData([['something' => 'something']]);
$options->setRowVariableName('row name');
$options->setRowVariableDescription('row description');
Expand Down Expand Up @@ -94,7 +94,7 @@ public function testToArray(): void
'messageWeightedExpectedPercent' => 'weighted expected percent',
'messageWeightedFrequency' => 'weighted frequency',
'messageWeightedPercent' => 'setMessageWeightedPercent',
'percentType' => CrosstabPercentType::ROW,
'percentType' => CrosstabPercentType::Row,
'rawData' => [['something' => 'something']],
'rowVariableDescription' => 'row description',
'rowVariableName' => 'row name',
Expand Down

0 comments on commit a14b04c

Please sign in to comment.