Commit 5147c0de authored by Mike Ryan's avatar Mike Ryan

Resolve "Configuration/option handling"

parent 7285f367
Pipeline #55449055 passed with stage
in 2 minutes and 25 seconds
......@@ -25,6 +25,7 @@
"league/csv": "^9.1",
"monolog/monolog": "^1.23",
"symfony/console": "^4.1",
"symfony/options-resolver": "^4.2",
"symfony/yaml": "~3.4.5"
},
"require-dev": {
......
......@@ -16,7 +16,7 @@ arraytosql:
extract:
class: Soong\Extractor\ArrayExtractor
configuration:
data_record_class: Soong\Data\Record
#data_record_class: Soong\Data\Record
key_properties:
id:
type: integer
......
......@@ -4,13 +4,11 @@
<class>Soong\Task\EtlTask</class>
<configuration>
<record_class>Soong\Data\Record</record_class>
<!-- Note we have no key_map - we are using this migration as an exporter. -->
<extract>
<class>Soong\Extractor\DBAL</class>
<configuration>
<data_record_class>Soong\Data\Record</data_record_class>
<connection>
<!-- Replace with your test database credentials. -->
<dbname>etltemp</dbname>
<user>root</user>
<host>127.0.0.1</host>
......@@ -34,7 +32,6 @@
</transformer>
</bar>
<num>
<!-- Without deduping elements, parser introduces extra layer. -->
<transformer_1>
<class>Soong\Transformer\Increment</class>
<source>num</source>
......@@ -54,7 +51,6 @@
</id>
</key_properties>
<properties>
<!-- Without deduping elements, parser introduces extra layer. -->
<property_name_1>foo</property_name_1>
<property_name_2>bar</property_name_2>
<property_name_3>num</property_name_3>
......
......@@ -14,6 +14,8 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
- Static methods removed from `Task` component and moved to non-static methods on the new `TaskPipeline` component: `addTask()`, `getTask()`, `getAllTasks()`.
### Added
- `ConfigurableComponent` interface added, and all configurable component interfaces inherit from it.
- `OptionsResolverComponent` added implementing `ConfigurableComponent` using `Symfony\OptionsResolver` - this is now the base class for all configurable components. Any such components adding configuration options to their parent class must implement `optionDefinitions()` to defined them.
- Commands now use `hassankhan/config` instead of custom YAML handling - configuration now can be YAML, JSON, or XML transparently (examples provided for each).
- `TaskPipeline` component for managing groups of tasks.
- `ComponentNotFound` and `DuplicateTask` exceptions added.
......
This diff is collapsed.
var annotated_dup =
[
[ "Soong", null, [
[ "Configuration", null, [
[ "OptionsResolverComponent", "class_soong_1_1_configuration_1_1_options_resolver_component.html", "class_soong_1_1_configuration_1_1_options_resolver_component" ]
] ],
[ "Console", null, [
[ "Command", null, [
[ "EtlCommand", "class_soong_1_1_console_1_1_command_1_1_etl_command.html", "class_soong_1_1_console_1_1_command_1_1_etl_command" ],
[ "MigrateCommand", "class_soong_1_1_console_1_1_command_1_1_migrate_command.html", "class_soong_1_1_console_1_1_command_1_1_migrate_command" ],
[ "RollbackCommand", "class_soong_1_1_console_1_1_command_1_1_rollback_command.html", "class_soong_1_1_console_1_1_command_1_1_rollback_command" ],
[ "StatusCommand", "class_soong_1_1_console_1_1_command_1_1_status_command.html", "class_soong_1_1_console_1_1_command_1_1_status_command" ],
[ "YamlRecursiveFilterIterator", "class_soong_1_1_console_1_1_command_1_1_yaml_recursive_filter_iterator.html", "class_soong_1_1_console_1_1_command_1_1_yaml_recursive_filter_iterator" ]
[ "StatusCommand", "class_soong_1_1_console_1_1_command_1_1_status_command.html", "class_soong_1_1_console_1_1_command_1_1_status_command" ]
] ]
] ],
[ "Contracts", null, [
[ "Configuration", null, [
[ "ConfigurableComponent", "interface_soong_1_1_contracts_1_1_configuration_1_1_configurable_component.html", "interface_soong_1_1_contracts_1_1_configuration_1_1_configurable_component" ]
] ],
[ "Data", null, [
[ "DataProperty", "interface_soong_1_1_contracts_1_1_data_1_1_data_property.html", "interface_soong_1_1_contracts_1_1_data_1_1_data_property" ],
[ "DataRecord", "interface_soong_1_1_contracts_1_1_data_1_1_data_record.html", "interface_soong_1_1_contracts_1_1_data_1_1_data_record" ]
......@@ -100,6 +105,5 @@ var annotated_dup =
] ]
] ],
[ "Countable", "class_countable.html", null ],
[ "RecursiveFilterIterator", "class_recursive_filter_iterator.html", null ],
[ "RuntimeException", "class_runtime_exception.html", null ]
];
\ No newline at end of file
......@@ -97,11 +97,9 @@ Inheritance diagram for Countable:</div>
<img src="class_countable.png" usemap="#Countable_map" alt=""/>
<map id="Countable_map" name="Countable_map">
<area href="interface_soong_1_1_contracts_1_1_key_map_1_1_key_map.html" title="Represents the mapping of extracted keys to loaded keys." alt="KeyMap" shape="rect" coords="0,56,148,80"/>
<area href="class_soong_1_1_extractor_1_1_countable_extractor_base.html" title="Provides default implementation of count()." alt="CountableExtractorBase" shape="rect" coords="316,56,464,80"/>
<area href="class_soong_1_1_extractor_1_1_countable_extractor_base.html" title="Provides default implementation of count()." alt="CountableExtractorBase" shape="rect" coords="158,56,306,80"/>
<area href="class_soong_1_1_key_map_1_1_key_map_base.html" title="Common implementation many/most key map implementations will need." alt="KeyMapBase" shape="rect" coords="0,112,148,136"/>
<area href="class_soong_1_1_extractor_1_1_array_extractor.html" title="Extractor for in-memory arrays." alt="ArrayExtractor" shape="rect" coords="158,112,306,136"/>
<area href="class_soong_1_1_extractor_1_1_csv.html" title="CSV extractor based on The League CSV library." alt="Csv" shape="rect" coords="316,112,464,136"/>
<area href="class_soong_1_1_extractor_1_1_d_b_a_l.html" title="Extractor for DBAL SQL queries." alt="DBAL" shape="rect" coords="474,112,622,136"/>
<area href="class_soong_1_1_extractor_1_1_d_b_a_l.html" title="Extractor for DBAL SQL queries." alt="DBAL" shape="rect" coords="158,112,306,136"/>
<area href="class_soong_1_1_key_map_1_1_d_b_a_l.html" title="Implementation of key maps using DBAL for storage." alt="DBAL" shape="rect" coords="0,168,148,192"/>
</map>
</div></div>
......
docs/api/html/class_countable.png

2.29 KB | W: | H:

docs/api/html/class_countable.png

1.5 KB | W: | H:

docs/api/html/class_countable.png
docs/api/html/class_countable.png
docs/api/html/class_countable.png
docs/api/html/class_countable.png
  • 2-up
  • Swipe
  • Onion skin
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.15"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Soong: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(initResizable);
/* @license-end */</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Soong
</div>
<div id="projectbrief">Soong provides a general-purpose ETL library for data migration.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.15 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('class_soong_1_1_configuration_1_1_options_resolver_component.html','');});
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">OptionsResolverComponent Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html">OptionsResolverComponent</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html#ac4e9a85b2c962619ea3bef67d26b190c">$configuration</a></td><td class="entry"><a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html">OptionsResolverComponent</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr><td class="entry"><a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html#a956d2892adf6bd8717ab303ac381cccc">$resolver</a></td><td class="entry"><a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html">OptionsResolverComponent</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html#aaab3c36103bf96482ce7a3830bd09452">getAllConfigurationValues</a>()</td><td class="entry"><a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html">OptionsResolverComponent</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html#a7875405fc51a51d010fbc862d024af4f">getConfigurationValue</a>(string $optionName)</td><td class="entry"><a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html">OptionsResolverComponent</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html#aa3271447a235ee4e580066710a6f35f9">optionDefinitions</a>()</td><td class="entry"><a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html">OptionsResolverComponent</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
</div>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.15"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Soong: OptionsResolverComponent Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(initResizable);
/* @license-end */</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Soong
</div>
<div id="projectbrief">Soong provides a general-purpose ETL library for data migration.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.15 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('class_soong_1_1_configuration_1_1_options_resolver_component.html','');});
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="class_soong_1_1_configuration_1_1_options_resolver_component-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">OptionsResolverComponent Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="dynheader">
Inheritance diagram for OptionsResolverComponent:</div>
<div class="dyncontent">
<div class="center">
<img src="class_soong_1_1_configuration_1_1_options_resolver_component.png" usemap="#OptionsResolverComponent_map" alt=""/>
<map id="OptionsResolverComponent_map" name="OptionsResolverComponent_map">
<area href="interface_soong_1_1_contracts_1_1_configuration_1_1_configurable_component.html" alt="ConfigurableComponent" shape="rect" coords="534,0,702,24"/>
<area href="class_soong_1_1_extractor_1_1_extractor_base.html" title="Common implementation details for extractors." alt="ExtractorBase" shape="rect" coords="0,112,168,136"/>
<area href="class_soong_1_1_key_map_1_1_key_map_base.html" title="Common implementation many/most key map implementations will need." alt="KeyMapBase" shape="rect" coords="356,112,524,136"/>
<area href="class_soong_1_1_loader_1_1_loader_base.html" title="Common implementation details for loaders." alt="LoaderBase" shape="rect" coords="534,112,702,136"/>
<area href="class_soong_1_1_task_1_1_task.html" title="Basic base class for migration tasks." alt="Task" shape="rect" coords="712,112,880,136"/>
<area href="class_soong_1_1_transformer_1_1_transformer_base.html" title="Loaders take a DataRecord and put it..." alt="TransformerBase" shape="rect" coords="890,112,1058,136"/>
<area href="class_soong_1_1_extractor_1_1_array_extractor.html" title="Extractor for in-memory arrays." alt="ArrayExtractor" shape="rect" coords="178,168,346,192"/>
<area href="class_soong_1_1_extractor_1_1_countable_extractor_base.html" title="Provides default implementation of count()." alt="CountableExtractorBase" shape="rect" coords="178,224,346,248"/>
<area href="class_soong_1_1_extractor_1_1_csv.html" title="CSV extractor based on The League CSV library." alt="Csv" shape="rect" coords="178,280,346,304"/>
<area href="class_soong_1_1_key_map_1_1_d_b_a_l.html" title="Implementation of key maps using DBAL for storage." alt="DBAL" shape="rect" coords="356,168,524,192"/>
<area href="class_soong_1_1_loader_1_1_csv.html" title="Real dumb demo of a simple loader." alt="Csv" shape="rect" coords="712,168,880,192"/>
<area href="class_soong_1_1_loader_1_1_d_b_a_l.html" title="Loader for DBAL SQL tables." alt="DBAL" shape="rect" coords="712,224,880,248"/>
<area href="class_soong_1_1_loader_1_1_var_dump.html" title="Loader for testing/debugging pipelines." alt="VarDump" shape="rect" coords="712,280,880,304"/>
<area href="class_soong_1_1_transformer_1_1_copy.html" title="Transformer to simply copy extracted data to the destination." alt="Copy" shape="rect" coords="1068,168,1236,192"/>
<area href="class_soong_1_1_transformer_1_1_double.html" title="Transformer to multiply the extracted data value by 2." alt="Double" shape="rect" coords="1068,224,1236,248"/>
<area href="class_soong_1_1_transformer_1_1_increment.html" title="Transformer to add 1 to the extracted data." alt="Increment" shape="rect" coords="1068,280,1236,304"/>
<area href="class_soong_1_1_transformer_1_1_key_map_lookup.html" title="Transformer accepting a unique key from the extracted data and looking up the key of any data loaded ..." alt="KeyMapLookup" shape="rect" coords="1068,336,1236,360"/>
<area href="class_soong_1_1_transformer_1_1_uc_first.html" title="Transformer to uppercase the first letter of the extracted data." alt="UcFirst" shape="rect" coords="1068,392,1236,416"/>
<area href="class_soong_1_1_transformer_1_1_value_lookup.html" title="Transformer to lookup a value to be returned based on an input value." alt="ValueLookup" shape="rect" coords="1068,448,1236,472"/>
</map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:aaab3c36103bf96482ce7a3830bd09452"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html#aaab3c36103bf96482ce7a3830bd09452">getAllConfigurationValues</a> ()</td></tr>
<tr class="separator:aaab3c36103bf96482ce7a3830bd09452"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7875405fc51a51d010fbc862d024af4f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html#a7875405fc51a51d010fbc862d024af4f">getConfigurationValue</a> (string $optionName)</td></tr>
<tr class="separator:a7875405fc51a51d010fbc862d024af4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:aa3271447a235ee4e580066710a6f35f9"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html#aa3271447a235ee4e580066710a6f35f9">optionDefinitions</a> ()</td></tr>
<tr class="separator:aa3271447a235ee4e580066710a6f35f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:ac4e9a85b2c962619ea3bef67d26b190c"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html#ac4e9a85b2c962619ea3bef67d26b190c">$configuration</a> = []</td></tr>
<tr class="separator:ac4e9a85b2c962619ea3bef67d26b190c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a956d2892adf6bd8717ab303ac381cccc"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html#a956d2892adf6bd8717ab303ac381cccc">$resolver</a></td></tr>
<tr class="separator:a956d2892adf6bd8717ab303ac381cccc"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="aaab3c36103bf96482ce7a3830bd09452"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaab3c36103bf96482ce7a3830bd09452">&#9670;&nbsp;</a></span>getAllConfigurationValues()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">getAllConfigurationValues </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Retrieve a list of all available configuration values.<dl class="section return"><dt>Returns</dt><dd>iterable Option values keyed by names.</dd></dl>
</p>
<p>Implements <a class="el" href="interface_soong_1_1_contracts_1_1_configuration_1_1_configurable_component.html#aaab3c36103bf96482ce7a3830bd09452">ConfigurableComponent</a>.</p>
</div>
</div>
<a id="a7875405fc51a51d010fbc862d024af4f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7875405fc51a51d010fbc862d024af4f">&#9670;&nbsp;</a></span>getConfigurationValue()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">getConfigurationValue </td>
<td>(</td>
<td class="paramtype">string&#160;</td>
<td class="paramname"><em>$optionName</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Retrieve a configuration value for a named option.<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramtype">string</td><td class="paramname">$optionName</td><td>Name of the option to retrieve.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>mixed|null Retrieved value, or NULL if unset.</dd></dl>
</p>
<p>Implements <a class="el" href="interface_soong_1_1_contracts_1_1_configuration_1_1_configurable_component.html#a7875405fc51a51d010fbc862d024af4f">ConfigurableComponent</a>.</p>
<p class="reference">Referenced by <a class="el" href="class_soong_1_1_extractor_1_1_array_extractor.html#ac751e87b3d4c4bf2feb03bee8b092755">ArrayExtractor\count()</a>, <a class="el" href="class_soong_1_1_key_map_1_1_d_b_a_l.html#ad3e493d4fdb3bc8a7052982564e1626a">DBAL\delete()</a>, <a class="el" href="class_soong_1_1_extractor_1_1_array_extractor.html#ab0a765efdadef3c0b619be67014d3410">ArrayExtractor\extractAll()</a>, <a class="el" href="class_soong_1_1_extractor_1_1_csv.html#ab0a765efdadef3c0b619be67014d3410">Csv\extractAll()</a>, <a class="el" href="class_soong_1_1_extractor_1_1_d_b_a_l.html#ab0a765efdadef3c0b619be67014d3410">DBAL\extractAll()</a>, <a class="el" href="class_soong_1_1_loader_1_1_loader_base.html#a9051457c78305a12d7eff3b88980bd2a">LoaderBase\getKeyProperties()</a>, <a class="el" href="class_soong_1_1_extractor_1_1_extractor_base.html#a9051457c78305a12d7eff3b88980bd2a">ExtractorBase\getKeyProperties()</a>, <a class="el" href="class_soong_1_1_loader_1_1_loader_base.html#ad92c14b6c86304d3f1fb86b2936d3408">LoaderBase\getProperties()</a>, <a class="el" href="class_soong_1_1_extractor_1_1_extractor_base.html#ad92c14b6c86304d3f1fb86b2936d3408">ExtractorBase\getProperties()</a>, <a class="el" href="class_soong_1_1_extractor_1_1_array_extractor.html#ad92c14b6c86304d3f1fb86b2936d3408">ArrayExtractor\getProperties()</a>, <a class="el" href="class_soong_1_1_key_map_1_1_key_map_base.html#a872cad7b980113655ab33a7471b7802a">KeyMapBase\hashKeys()</a>, <a class="el" href="class_soong_1_1_key_map_1_1_d_b_a_l.html#ad39c70322389b8d8c48a65e41b5a93c7">DBAL\iterate()</a>, <a class="el" href="class_soong_1_1_loader_1_1_csv.html#a4f1db7dc6c9a065f5ad352c1281950e2">Csv\load()</a>, <a class="el" href="class_soong_1_1_loader_1_1_d_b_a_l.html#a4f1db7dc6c9a065f5ad352c1281950e2">DBAL\load()</a>, <a class="el" href="class_soong_1_1_key_map_1_1_d_b_a_l.html#a6717a7ca289564b573237ccded001d3e">DBAL\lookupExtractedKeys()</a>, <a class="el" href="class_soong_1_1_key_map_1_1_d_b_a_l.html#aa730b6c6333715bcd8d65e1f24e49efb">DBAL\lookupLoadedKey()</a>, <a class="el" href="class_soong_1_1_key_map_1_1_d_b_a_l.html#ae83df9d07dd0cba43a2c26ced42b0ac6">DBAL\saveKeyMap()</a>, <a class="el" href="class_soong_1_1_transformer_1_1_value_lookup.html#a721df97b0ec866ef25fe4a87468a9924">ValueLookup\transform()</a>, and <a class="el" href="class_soong_1_1_transformer_1_1_key_map_lookup.html#a721df97b0ec866ef25fe4a87468a9924">KeyMapLookup\transform()</a>.</p>
</div>
</div>
<a id="aa3271447a235ee4e580066710a6f35f9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa3271447a235ee4e580066710a6f35f9">&#9670;&nbsp;</a></span>optionDefinitions()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">optionDefinitions </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>List of definition arrays for each option supported by the component. </p>
<dl class="section return"><dt>Returns</dt><dd>array </dd></dl>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="ac4e9a85b2c962619ea3bef67d26b190c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac4e9a85b2c962619ea3bef67d26b190c">&#9670;&nbsp;</a></span>$configuration</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">array $configuration = []</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Resolved configuration for the component. </p>
<p>Configuration values keyed by configuration name. </p>
<p class="reference">Referenced by <a class="el" href="class_soong_1_1_configuration_1_1_options_resolver_component.html#aaab3c36103bf96482ce7a3830bd09452">OptionsResolverComponent\getAllConfigurationValues()</a>.</p>
</div>