{"id":15634605,"url":"https://github.com/grasmash/expander","last_synced_at":"2025-05-15T04:05:51.061Z","repository":{"id":27719951,"uuid":"115019439","full_name":"grasmash/expander","owner":"grasmash","description":"This tool expands property references in PHP arrays.","archived":false,"fork":false,"pushed_at":"2024-11-25T23:29:45.000Z","size":89,"stargazers_count":138,"open_issues_count":1,"forks_count":10,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-03T01:47:04.345Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/grasmash.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-12-21T15:20:28.000Z","updated_at":"2025-04-03T17:25:04.000Z","dependencies_parsed_at":"2024-11-05T22:03:46.767Z","dependency_job_id":"5cb1ee04-bb80-4e56-a0d6-62c3c765e381","html_url":"https://github.com/grasmash/expander","commit_stats":{"total_commits":37,"total_committers":8,"mean_commits":4.625,"dds":0.5135135135135135,"last_synced_commit":"bb1c1a2430957945cf08c5a62f5d72a6aa6a2c82"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grasmash%2Fexpander","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grasmash%2Fexpander/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grasmash%2Fexpander/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/grasmash%2Fexpander/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/grasmash","download_url":"https://codeload.github.com/grasmash/expander/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254043051,"owners_count":22004910,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-03T10:54:15.718Z","updated_at":"2025-05-15T04:05:46.044Z","avatar_url":"https://github.com/grasmash.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"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)\n[![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)\n\nThis tool expands dot-notated, string property references into their corresponding values. This is useful for run time expansion of property references in configuration files.\n\nFor example implementation, see [Yaml Expander](https://github.com/grasmash/yaml-expander).\n\n### Installation\n\n    composer require grasmash/expander\n\n### Example usage:\n\nProperty references use dot notation to indicate array keys, and must be wrapped in `${}`.\n\nExpansion logic:\n\n```php\n\u003c?php\n\n$array = [\n    'type' =\u003e 'book',\n    'book' =\u003e [\n        'title' =\u003e 'Dune',\n        'author' =\u003e 'Frank Herbert',\n        'copyright' =\u003e '${book.author} 1965',\n        'protaganist' =\u003e '${characters.0.name}',\n        'media' =\u003e [\n            0 =\u003e 'hardcover',\n            1 =\u003e 'paperback',\n        ],\n        'nested-reference' =\u003e '${book.sequel}',\n    ],\n    'characters' =\u003e [\n        0 =\u003e [\n            'name' =\u003e 'Paul Atreides',\n            'occupation' =\u003e 'Kwisatz Haderach',\n            'aliases' =\u003e [\n                0 =\u003e 'Usul',\n                1 =\u003e 'Muad\\'Dib',\n                2 =\u003e 'The Preacher',\n            ],\n        ],\n        1 =\u003e [\n            'name' =\u003e 'Duncan Idaho',\n            'occupation' =\u003e 'Swordmaster',\n        ],\n    ],\n    'summary' =\u003e '${book.title} by ${book.author}',\n    'publisher' =\u003e '${not.real.property}',\n    'sequels' =\u003e '${book.sequel}, and others.',\n    'available-products' =\u003e '${book.media.1}, ${book.media.0}',\n    'product-name' =\u003e '${${type}.title}',\n    'boolean-value' =\u003e true,\n    'expand-boolean' =\u003e '${boolean-value}',\n    'null-value' =\u003e NULL,\n    'inline-array' =\u003e [\n        0 =\u003e 'one',\n        1 =\u003e 'two',\n        2 =\u003e 'three',\n    ],\n    'expand-array' =\u003e '${inline-array}',\n    'env-test' =\u003e '${env.test}',\n];\n\n$expander = new Expander();\n// Optionally set a logger.\n$expander-\u003esetLogger(new Psr\\Log\\NullLogger());\n// Optionally set a Stringfier, used to convert array placeholders into strings. Defaults to using implode() with `,` delimeter.\n// @see StringifierInterface.\n$expander-\u003esetStringifier(new Grasmash\\Expander\\Stringifier());\n\n// Parse an array, expanding internal property references.\n$expanded = $expander-\u003eexpandArrayProperties($array);\n\n// Parse an array, expanding references using both internal and supplementary values.\n$reference_properties =  'book' =\u003e ['sequel' =\u003e 'Dune Messiah'];\n// Set an environmental variable.\nputenv(\"test=gomjabbar\");\n$expanded = $expander-\u003eexpandArrayProperties($array, $reference_properties);\n\nprint_r($expanded);\n````\n\nResultant array:\n\n```php\nArray\n(\n    [type] =\u003e book\n    [book] =\u003e Array\n        (\n            [title] =\u003e Dune\n            [author] =\u003e Frank Herbert\n            [copyright] =\u003e Frank Herbert 1965\n            [protaganist] =\u003e Paul Atreides\n            [media] =\u003e Array\n                (\n                    [0] =\u003e hardcover\n                    [1] =\u003e paperback\n                )\n\n            [nested-reference] =\u003e Dune Messiah\n        )\n\n    [characters] =\u003e Array\n        (\n            [0] =\u003e Array\n                (\n                    [name] =\u003e Paul Atreides\n                    [occupation] =\u003e Kwisatz Haderach\n                    [aliases] =\u003e Array\n                        (\n                            [0] =\u003e Usul\n                            [1] =\u003e Muad\\'Dib\n                            [2] =\u003e The Preacher\n                        )\n\n                )\n\n            [1] =\u003e Array\n                (\n                    [name] =\u003e Duncan Idaho\n                    [occupation] =\u003e Swordmaster\n                )\n\n        )\n\n    [summary] =\u003e Dune by Frank Herbert\n    [publisher] =\u003e ${not.real.property}\n    [sequels] =\u003e Dune Messiah, and others.\n    [available-products] =\u003e paperback, hardcover\n    [product-name] =\u003e Dune\n    [boolean-value] =\u003e true,\n    [expand-boolean] =\u003e true,\n    [null-value] =\u003e\n    [inline-array] =\u003e Array\n        (\n            [0] =\u003e one\n            [1] =\u003e two\n            [2] =\u003e three\n        )\n\n    [expand-array] =\u003e one,two,three\n    [env-test] =\u003e gomjabbar\n    [env] =\u003e Array\n        (\n            [test] =\u003e gomjabbar\n        )\n\n)\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrasmash%2Fexpander","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgrasmash%2Fexpander","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgrasmash%2Fexpander/lists"}