Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/grasmash/expander
This tool expands property references in PHP arrays.
https://github.com/grasmash/expander
Last synced: 3 days ago
JSON representation
This tool expands property references in PHP arrays.
- Host: GitHub
- URL: https://github.com/grasmash/expander
- Owner: grasmash
- License: mit
- Created: 2017-12-21T15:20:28.000Z (about 7 years ago)
- Default Branch: main
- Last Pushed: 2024-11-25T23:29:45.000Z (about 1 month ago)
- Last Synced: 2024-12-24T11:25:10.599Z (6 days ago)
- Language: PHP
- Size: 86.9 KB
- Stars: 135
- Watchers: 2
- Forks: 10
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
Awesome Lists containing this project
README
[![CI](https://github.com/grasmash/expander/actions/workflows/php.yml/badge.svg)](https://github.com/grasmash/expander/actions/workflows/php.yml) [![Packagist](https://img.shields.io/packagist/v/grasmash/expander.svg)](https://packagist.org/packages/grasmash/expander)
[![Total Downloads](https://poser.pugx.org/grasmash/expander/downloads)](https://packagist.org/packages/grasmash/expander) [![Coverage Status](https://coveralls.io/repos/github/grasmash/expander/badge.svg?branch=main)](https://coveralls.io/github/grasmash/expander?branch=main)This tool expands dot-notated, string property references into their corresponding values. This is useful for run time expansion of property references in configuration files.
For example implementation, see [Yaml Expander](https://github.com/grasmash/yaml-expander).
### Installation
composer require grasmash/expander
### Example usage:
Property references use dot notation to indicate array keys, and must be wrapped in `${}`.
Expansion logic:
```php
'book',
'book' => [
'title' => 'Dune',
'author' => 'Frank Herbert',
'copyright' => '${book.author} 1965',
'protaganist' => '${characters.0.name}',
'media' => [
0 => 'hardcover',
1 => 'paperback',
],
'nested-reference' => '${book.sequel}',
],
'characters' => [
0 => [
'name' => 'Paul Atreides',
'occupation' => 'Kwisatz Haderach',
'aliases' => [
0 => 'Usul',
1 => 'Muad\'Dib',
2 => 'The Preacher',
],
],
1 => [
'name' => 'Duncan Idaho',
'occupation' => 'Swordmaster',
],
],
'summary' => '${book.title} by ${book.author}',
'publisher' => '${not.real.property}',
'sequels' => '${book.sequel}, and others.',
'available-products' => '${book.media.1}, ${book.media.0}',
'product-name' => '${${type}.title}',
'boolean-value' => true,
'expand-boolean' => '${boolean-value}',
'null-value' => NULL,
'inline-array' => [
0 => 'one',
1 => 'two',
2 => 'three',
],
'expand-array' => '${inline-array}',
'env-test' => '${env.test}',
];$expander = new Expander();
// Optionally set a logger.
$expander->setLogger(new Psr\Log\NullLogger());
// Optionally set a Stringfier, used to convert array placeholders into strings. Defaults to using implode() with `,` delimeter.
// @see StringifierInterface.
$expander->setStringifier(new Grasmash\Expander\Stringifier());// Parse an array, expanding internal property references.
$expanded = $expander->expandArrayProperties($array);// Parse an array, expanding references using both internal and supplementary values.
$reference_properties = 'book' => ['sequel' => 'Dune Messiah'];
// Set an environmental variable.
putenv("test=gomjabbar");
$expanded = $expander->expandArrayProperties($array, $reference_properties);print_r($expanded);
````Resultant array:
```php
Array
(
[type] => book
[book] => Array
(
[title] => Dune
[author] => Frank Herbert
[copyright] => Frank Herbert 1965
[protaganist] => Paul Atreides
[media] => Array
(
[0] => hardcover
[1] => paperback
)[nested-reference] => Dune Messiah
)[characters] => Array
(
[0] => Array
(
[name] => Paul Atreides
[occupation] => Kwisatz Haderach
[aliases] => Array
(
[0] => Usul
[1] => Muad\'Dib
[2] => The Preacher
))
[1] => Array
(
[name] => Duncan Idaho
[occupation] => Swordmaster
))
[summary] => Dune by Frank Herbert
[publisher] => ${not.real.property}
[sequels] => Dune Messiah, and others.
[available-products] => paperback, hardcover
[product-name] => Dune
[boolean-value] => true,
[expand-boolean] => true,
[null-value] =>
[inline-array] => Array
(
[0] => one
[1] => two
[2] => three
)[expand-array] => one,two,three
[env-test] => gomjabbar
[env] => Array
(
[test] => gomjabbar
))
```