Commit 15257730 authored by Mike Ryan's avatar Mike Ryan

#16: Move all interfaces to Contracts directory and strip Interface suffixes.

Co-authored-by: Adam Globus-Hoenich's avatarPhéna Proxima <[email protected]>
parent aab2ea34
Pipeline #47232759 passed with stage
in 2 minutes and 15 seconds
......@@ -12,6 +12,8 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
- `EtlTaskInterface::getLoader()`
### Changed
- `Interface` and `Trait` suffixes removed from all interfaces and traits.
- All interfaces moved into `Contracts` directory.
- All main components must now be created using `Class::create()` rather than `new`. This affects:
- `DataPropertyInterface`
- `DataRecordInterface`
......
......@@ -813,7 +813,7 @@ WARN_LOGFILE =
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched.
INPUT = ../src ../tests api/doxygen_home.md1
INPUT = ../src ../tests/Contracts api/doxygen_home.md1
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
......
......@@ -21,38 +21,38 @@ At the moment, configuration is represented as a simple keyed array. We anticipa
As an ETL framework, the key components of Soong are of course:
- [Extractors][1b68bb10]: Extractors read data from a source data store and via `extract*()` methods produce iterators to deliver one record at a time as a `DataRecordInterface` instance. They accept static configuration to determine where and how to access the source data, and runtime options to control what records to process on a given invocation. Being able to tell how many source records are available for migration is very helpful, although on occasion there may be data sources where this is impossible (or at least very slow) - therefore, countability is not required by `ExtractorInterface`. Most extractors will want to implement `\Countable` (a `CountableExtractorBase` class is provided which should be a good starting point for most extractors).
- [Extractors][1b68bb10]: Extractors read data from a source data store and via `extract*()` methods produce iterators to deliver one record at a time as a `DataRecord` instance. They accept static configuration to determine where and how to access the source data, and runtime options to control what records to process on a given invocation. Being able to tell how many source records are available for migration is very helpful, although on occasion there may be data sources where this is impossible (or at least very slow) - therefore, countability is not required by `ExtractorInterface`. Most extractors will want to implement `\Countable` (a `CountableExtractorBase` class is provided which should be a good starting point for most extractors).
- [Transformers][f8e7b6dc]: A Transfomer class accepts a value (usually a property from an extractor-produced record) and produces a new value.
- [Loaders][d4c501b1]: Loaders accept one `DataRecordInterface` instance at a time and load the data it contains into a destination as configured. Note that not all destinations may permit deleting loaded data (e.g., a loader could be used to output a CSV file). The deletion capability (used by rollback operations) should be moved to a separate interface.
- [Loaders][d4c501b1]: Loaders accept one `DataRecord` instance at a time and load the data it contains into a destination as configured. Note that not all destinations may permit deleting loaded data (e.g., a loader could be used to output a CSV file). The deletion capability (used by rollback operations) should be moved to a separate interface.
[1b68bb10]: interface_soong_1_1_extractor_1_1_extractor_interface.html "Extractors"
[f8e7b6dc]: interface_soong_1_1_transformer_1_1_transformer_interface.html "Transformers"
[d4c501b1]: interface_soong_1_1_loader_1_1_loader_interface.html "Loaders"
[1b68bb10]: interface_soong_1_1_contracts_1_1_extractor_1_1_extractor.html "Extractors"
[f8e7b6dc]: interface_soong_1_1_contracts_1_1_transformer_1_1_transformer.html "Transformers"
[d4c501b1]: interface_soong_1_1_contracts_1_1_loader_1_1_loader.html "Loaders"
The ETL pipeline components need to communicate the data they handle with each other (extractor outputs need to pass through a series of transformers and ultimately into a loader). The canonical representation of such data would be an associative array of arbitrarily-typed values, but rather than require a single representation it is more flexible to abstract the data.
- [DataProperty][81696853]: Represents a value (which could be a scalar, an array, or an object). Implementations of DataPropertyInterface should be immutable - the value should be set at construction time and may not subsequently be changed. The value may be any scalar, array, or object type - including `DataPropertyInterface`.
- [DataRecord][ba5fb4bd]: A data record (a set of named `DataPropertyInterface` instances) is represented by `DataRecordInterface`. In the context of an ETL pipeline, an extractor will output a `DataRecordInterface` to input to transformers, and the transformation process will populate another instance of `DataRecordInterface` one property at a time to ultimately pass to a loader.
- [DataProperty][81696853]: Represents a value (which could be a scalar, an array, or an object). Implementations of DataProperty should be immutable - the value should be set at construction time and may not subsequently be changed. The value may be any scalar, array, or object type - including `DataPropertyInterface`.
- [DataRecord][ba5fb4bd]: A data record (a set of named `DataProperty` instances) is represented by `DataRecordInterface`. In the context of an ETL pipeline, an extractor will output a `DataRecordInterface` to input to transformers, and the transformation process will populate another instance of `DataRecordInterface` one property at a time to ultimately pass to a loader.
[81696853]: interface_soong_1_1_data_1_1_data_property_interface.html "DataProperty"
[ba5fb4bd]: interface_soong_1_1_data_1_1_data_record_interface.html "DataRecord"
[81696853]: interface_soong_1_1_contracts_1_1_data_1_1_data_property.html "DataProperty"
[ba5fb4bd]: interface_soong_1_1_contracts_1_1_data_1_1_data_record.html "DataRecord"
To manage the migration process, we have:
- [Task][845d1aeb]: A named object controlling the execution of operations according to a set of configuration. Most tasks will be ETL tasks, designed to migrate data, but the overall migration process may require some non-ETL housekeeping tasks (like moving files around) - classes derived from `TaskInterface` rather than `EtlTaskInterface` can be used to incorporate these operations.
- [Task][845d1aeb]: A named object controlling the execution of operations according to a set of configuration. Most tasks will be ETL tasks, designed to migrate data, but the overall migration process may require some non-ETL housekeeping tasks (like moving files around) - classes derived from `Taske` rather than `EtlTask` can be used to incorporate these operations.
- [EtlTask][fd591c8f]: A Task specifically designed to perform an ETL operation in the following manner:
1. Invoke an `ExtractorInterface` instance and iterate over its data set, retrieving one source `DataRecordInterface` at a time.
2. Create a destination `DataRecordInterface`, and for each property to be stored in this record, execute one or more `TransformerInterface` instances to derive the destination property from source properties and configuration.
3. Pass the destination `DataRecordInterface` to a `LoaderInterface` instance for final disposition.
1. Invoke an `Extractor` instance and iterate over its data set, retrieving one source `DataRecord` at a time.
2. Create a destination `DataRecorde`, and for each property to be stored in this record, execute one or more `Transformer` instances to derive the destination property from source properties and configuration.
3. Pass the destination `DataRecord` to a `Loader` instance for final disposition.
[845d1aeb]: interface_soong_1_1_task_1_1_task_interface.html "Task"
[fd591c8f]: interface_soong_1_1_task_1_1_etl_task_interface.html "EtlTask"
[845d1aeb]: interface_soong_1_1_contracts_1_1_task_1_1_task.html "Task"
[fd591c8f]: interface_soong_1_1_contracts_1_1_task_1_1_etl_task.html "EtlTask"
Finally, we have:
- [KeyMap][8129d923]: Storage of the relationships between extracted and loaded records (based on the designated unique keys for each). This enables maintaining relationships between keyed records when the keys change during migration (as when loading into an auto-increment SQL table), as well as providing rollback and auditing capabilities.
[8129d923]: interface_soong_1_1_key_map_1_1_key_map_interface.html "KeyMap"
[8129d923]: interface_soong_1_1_contracts_1_1_key_map_1_1_key_map.html "KeyMap"
[162ae00a]: https://gitlab.com/soongetl/soong/issues "Soong ETL issue queue"
[44ab6025]: https://gitlab.com/soongetl/soong/issues/14 "Configuration/option handling"
This diff is collapsed.
......@@ -10,13 +10,33 @@ var annotated_dup =
[ "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" ]
] ]
] ],
[ "Contracts", null, [
[ "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" ]
] ],
[ "Extractor", null, [
[ "Extractor", "interface_soong_1_1_contracts_1_1_extractor_1_1_extractor.html", "interface_soong_1_1_contracts_1_1_extractor_1_1_extractor" ]
] ],
[ "KeyMap", null, [
[ "KeyMap", "interface_soong_1_1_contracts_1_1_key_map_1_1_key_map.html", "interface_soong_1_1_contracts_1_1_key_map_1_1_key_map" ]
] ],
[ "Loader", null, [
[ "Loader", "interface_soong_1_1_contracts_1_1_loader_1_1_loader.html", "interface_soong_1_1_contracts_1_1_loader_1_1_loader" ]
] ],
[ "Task", null, [
[ "EtlTask", "interface_soong_1_1_contracts_1_1_task_1_1_etl_task.html", "interface_soong_1_1_contracts_1_1_task_1_1_etl_task" ],
[ "Task", "interface_soong_1_1_contracts_1_1_task_1_1_task.html", "interface_soong_1_1_contracts_1_1_task_1_1_task" ]
] ],
[ "Transformer", null, [
[ "Transformer", "interface_soong_1_1_contracts_1_1_transformer_1_1_transformer.html", "interface_soong_1_1_contracts_1_1_transformer_1_1_transformer" ]
] ]
] ],
[ "Csv", null, [
[ "Extractor", "class_soong_1_1_csv_1_1_extractor.html", "class_soong_1_1_csv_1_1_extractor" ],
[ "Loader", "class_soong_1_1_csv_1_1_loader.html", "class_soong_1_1_csv_1_1_loader" ]
] ],
[ "Data", null, [
[ "DataPropertyInterface", "interface_soong_1_1_data_1_1_data_property_interface.html", "interface_soong_1_1_data_1_1_data_property_interface" ],
[ "DataRecordInterface", "interface_soong_1_1_data_1_1_data_record_interface.html", "interface_soong_1_1_data_1_1_data_record_interface" ],
[ "Property", "class_soong_1_1_data_1_1_property.html", "class_soong_1_1_data_1_1_property" ],
[ "Record", "class_soong_1_1_data_1_1_record.html", "class_soong_1_1_data_1_1_record" ]
] ],
......@@ -28,35 +48,24 @@ var annotated_dup =
[ "Extractor", null, [
[ "ArrayExtractor", "class_soong_1_1_extractor_1_1_array_extractor.html", "class_soong_1_1_extractor_1_1_array_extractor" ],
[ "CountableExtractorBase", "class_soong_1_1_extractor_1_1_countable_extractor_base.html", "class_soong_1_1_extractor_1_1_countable_extractor_base" ],
[ "ExtractorBase", "class_soong_1_1_extractor_1_1_extractor_base.html", "class_soong_1_1_extractor_1_1_extractor_base" ],
[ "ExtractorInterface", "interface_soong_1_1_extractor_1_1_extractor_interface.html", "interface_soong_1_1_extractor_1_1_extractor_interface" ]
[ "ExtractorBase", "class_soong_1_1_extractor_1_1_extractor_base.html", "class_soong_1_1_extractor_1_1_extractor_base" ]
] ],
[ "KeyMap", null, [
[ "KeyMapBase", "class_soong_1_1_key_map_1_1_key_map_base.html", "class_soong_1_1_key_map_1_1_key_map_base" ],
[ "KeyMapInterface", "interface_soong_1_1_key_map_1_1_key_map_interface.html", "interface_soong_1_1_key_map_1_1_key_map_interface" ]
[ "KeyMapBase", "class_soong_1_1_key_map_1_1_key_map_base.html", "class_soong_1_1_key_map_1_1_key_map_base" ]
] ],
[ "Loader", null, [
[ "LoaderBase", "class_soong_1_1_loader_1_1_loader_base.html", "class_soong_1_1_loader_1_1_loader_base" ],
[ "LoaderInterface", "interface_soong_1_1_loader_1_1_loader_interface.html", "interface_soong_1_1_loader_1_1_loader_interface" ],
[ "VarDump", "class_soong_1_1_loader_1_1_var_dump.html", "class_soong_1_1_loader_1_1_var_dump" ]
] ],
[ "StatusLogger", null, [
[ "StatusLogger", "class_soong_1_1_status_logger_1_1_status_logger.html", null ],
[ "StatusLoggerInterface", "interface_soong_1_1_status_logger_1_1_status_logger_interface.html", null ]
] ],
[ "Task", null, [
[ "EtlTask", "class_soong_1_1_task_1_1_etl_task.html", "class_soong_1_1_task_1_1_etl_task" ],
[ "EtlTaskInterface", "interface_soong_1_1_task_1_1_etl_task_interface.html", "interface_soong_1_1_task_1_1_etl_task_interface" ],
[ "Task", "class_soong_1_1_task_1_1_task.html", "class_soong_1_1_task_1_1_task" ],
[ "TaskInterface", "interface_soong_1_1_task_1_1_task_interface.html", "interface_soong_1_1_task_1_1_task_interface" ]
[ "Task", "class_soong_1_1_task_1_1_task.html", "class_soong_1_1_task_1_1_task" ]
] ],
[ "Tests", null, [
[ "Csv", null, [
[ "LoaderCsvTest", "class_soong_1_1_tests_1_1_csv_1_1_loader_csv_test.html", "class_soong_1_1_tests_1_1_csv_1_1_loader_csv_test" ]
] ],
[ "Data", null, [
[ "DataPropertyBase", "class_soong_1_1_tests_1_1_data_1_1_data_property_base.html", "class_soong_1_1_tests_1_1_data_1_1_data_property_base" ],
[ "PropertyTest", "class_soong_1_1_tests_1_1_data_1_1_property_test.html", "class_soong_1_1_tests_1_1_data_1_1_property_test" ]
[ "Contracts", null, [
[ "Data", null, [
[ "DataPropertyTestBase", "class_soong_1_1_tests_1_1_contracts_1_1_data_1_1_data_property_test_base.html", "class_soong_1_1_tests_1_1_contracts_1_1_data_1_1_data_property_test_base" ]
] ]
] ]
] ],
[ "Transformer", null, [
......@@ -65,7 +74,6 @@ var annotated_dup =
[ "Increment", "class_soong_1_1_transformer_1_1_increment.html", "class_soong_1_1_transformer_1_1_increment" ],
[ "KeyMapLookup", "class_soong_1_1_transformer_1_1_key_map_lookup.html", "class_soong_1_1_transformer_1_1_key_map_lookup" ],
[ "TransformerBase", "class_soong_1_1_transformer_1_1_transformer_base.html", "class_soong_1_1_transformer_1_1_transformer_base" ],
[ "TransformerInterface", "interface_soong_1_1_transformer_1_1_transformer_interface.html", "interface_soong_1_1_transformer_1_1_transformer_interface" ],
[ "UcFirst", "class_soong_1_1_transformer_1_1_uc_first.html", "class_soong_1_1_transformer_1_1_uc_first" ],
[ "ValueLookup", "class_soong_1_1_transformer_1_1_value_lookup.html", "class_soong_1_1_transformer_1_1_value_lookup" ]
] ]
......
......@@ -96,13 +96,13 @@ Inheritance diagram for Countable:</div>
<div class="center">
<img src="class_countable.png" usemap="#Countable_map" alt=""/>
<map id="Countable_map" name="Countable_map">
<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="interface_soong_1_1_key_map_1_1_key_map_interface.html" title="Represents the mapping of extracted keys to loaded keys." alt="KeyMapInterface" shape="rect" coords="474,56,622,80"/>
<area href="class_soong_1_1_csv_1_1_extractor.html" title="CSV extractor based on The League CSV library." alt="Extractor" shape="rect" coords="0,112,148,136"/>
<area href="class_soong_1_1_d_b_a_l_1_1_extractor.html" title="Extractor for DBAL SQL queries." alt="Extractor" shape="rect" coords="158,112,306,136"/>
<area href="class_soong_1_1_extractor_1_1_array_extractor.html" title="Extractor for in-memory arrays." alt="ArrayExtractor" shape="rect" coords="316,112,464,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="474,112,622,136"/>
<area href="class_soong_1_1_d_b_a_l_1_1_key_map.html" title="Implementation of key maps using DBAL for storage." alt="KeyMap" shape="rect" coords="474,168,622,192"/>
<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_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_csv_1_1_extractor.html" title="CSV extractor based on The League CSV library." alt="Extractor" shape="rect" coords="158,112,306,136"/>
<area href="class_soong_1_1_d_b_a_l_1_1_extractor.html" title="Extractor for DBAL SQL queries." alt="Extractor" shape="rect" coords="316,112,464,136"/>
<area href="class_soong_1_1_extractor_1_1_array_extractor.html" title="Extractor for in-memory arrays." alt="ArrayExtractor" shape="rect" coords="474,112,622,136"/>
<area href="class_soong_1_1_d_b_a_l_1_1_key_map.html" title="Implementation of key maps using DBAL for storage." alt="KeyMap" shape="rect" coords="0,168,148,192"/>
</map>
</div></div>
</div><!-- contents -->
......@@ -111,7 +111,7 @@ Inheritance diagram for Countable:</div>
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="class_countable.html">Countable</a></li>
<li class="footer">Generated on Mon Feb 11 2019 15:52:07 for Soong by
<li class="footer">Generated on Tue Feb 12 2019 10:58:15 for Soong by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
......
docs/api/html/class_countable.png

2.34 KB | W: | H:

docs/api/html/class_countable.png

2.27 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
......@@ -105,7 +105,7 @@ Inheritance diagram for RecursiveFilterIterator:</div>
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="class_recursive_filter_iterator.html">RecursiveFilterIterator</a></li>
<li class="footer">Generated on Mon Feb 11 2019 15:52:07 for Soong by
<li class="footer">Generated on Tue Feb 12 2019 10:58:15 for Soong by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
......
......@@ -101,7 +101,7 @@ $(document).ready(function(){initNavTree('class_soong_1_1_console_1_1_command_1_
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Mon Feb 11 2019 15:52:07 for Soong by
<li class="footer">Generated on Tue Feb 12 2019 10:58:15 for Soong by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
......
......@@ -226,7 +226,7 @@ Protected Member Functions</h2></td></tr>
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>Soong</b></li><li class="navelem"><b>Console</b></li><li class="navelem"><b>Command</b></li><li class="navelem"><a class="el" href="class_soong_1_1_console_1_1_command_1_1_etl_command.html">EtlCommand</a></li>
<li class="footer">Generated on Mon Feb 11 2019 15:52:07 for Soong by
<li class="footer">Generated on Tue Feb 12 2019 10:58:15 for Soong by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
......
......@@ -103,7 +103,7 @@ $(document).ready(function(){initNavTree('class_soong_1_1_console_1_1_command_1_
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Mon Feb 11 2019 15:52:07 for Soong by
<li class="footer">Generated on Tue Feb 12 2019 10:58:15 for Soong by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
......
......@@ -191,7 +191,7 @@ Protected Member Functions</h2></td></tr>
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>Soong</b></li><li class="navelem"><b>Console</b></li><li class="navelem"><b>Command</b></li><li class="navelem"><a class="el" href="class_soong_1_1_console_1_1_command_1_1_migrate_command.html">MigrateCommand</a></li>
<li class="footer">Generated on Mon Feb 11 2019 15:52:07 for Soong by
<li class="footer">Generated on Tue Feb 12 2019 10:58:15 for Soong by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
......
......@@ -103,7 +103,7 @@ $(document).ready(function(){initNavTree('class_soong_1_1_console_1_1_command_1_
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Mon Feb 11 2019 15:52:07 for Soong by
<li class="footer">Generated on Tue Feb 12 2019 10:58:15 for Soong by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
......
......@@ -191,7 +191,7 @@ Protected Member Functions</h2></td></tr>
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>Soong</b></li><li class="navelem"><b>Console</b></li><li class="navelem"><b>Command</b></li><li class="navelem"><a class="el" href="class_soong_1_1_console_1_1_command_1_1_rollback_command.html">RollbackCommand</a></li>
<li class="footer">Generated on Mon Feb 11 2019 15:52:07 for Soong by
<li class="footer">Generated on Tue Feb 12 2019 10:58:15 for Soong by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
......
......@@ -103,7 +103,7 @@ $(document).ready(function(){initNavTree('class_soong_1_1_console_1_1_command_1_
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Mon Feb 11 2019 15:52:07 for Soong by
<li class="footer">Generated on Tue Feb 12 2019 10:58:15 for Soong by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
......
......@@ -191,7 +191,7 @@ Protected Member Functions</h2></td></tr>
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>Soong</b></li><li class="navelem"><b>Console</b></li><li class="navelem"><b>Command</b></li><li class="navelem"><a class="el" href="class_soong_1_1_console_1_1_command_1_1_status_command.html">StatusCommand</a></li>
<li class="footer">Generated on Mon Feb 11 2019 15:52:07 for Soong by
<li class="footer">Generated on Tue Feb 12 2019 10:58:15 for Soong by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
......
......@@ -99,7 +99,7 @@ $(document).ready(function(){initNavTree('class_soong_1_1_console_1_1_command_1_
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Mon Feb 11 2019 15:52:07 for Soong by
<li class="footer">Generated on Tue Feb 12 2019 10:58:15 for Soong by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
......
......@@ -136,7 +136,7 @@ Public Member Functions</h2></td></tr>
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>Soong</b></li><li class="navelem"><b>Console</b></li><li class="navelem"><b>Command</b></li><li class="navelem"><a class="el" href="class_soong_1_1_console_1_1_command_1_1_yaml_recursive_filter_iterator.html">YamlRecursiveFilterIterator</a></li>
<li class="footer">Generated on Mon Feb 11 2019 15:52:07 for Soong by
<li class="footer">Generated on Tue Feb 12 2019 10:58:15 for Soong by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
......
......@@ -95,8 +95,8 @@ $(document).ready(function(){initNavTree('class_soong_1_1_csv_1_1_extractor.html
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="class_soong_1_1_extractor_1_1_extractor_base.html#ac4e9a85b2c962619ea3bef67d26b190c">$configuration</a></td><td class="entry"><a class="el" href="class_soong_1_1_extractor_1_1_extractor_base.html">ExtractorBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr><td class="entry"><a class="el" href="class_soong_1_1_extractor_1_1_extractor_base.html#affec3aee02b830965ed105ef1b3234c9">__construct</a>(array $configuration)</td><td class="entry"><a class="el" href="class_soong_1_1_extractor_1_1_extractor_base.html">ExtractorBase</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="interface_soong_1_1_extractor_1_1_extractor_interface.html#ac1c9036f87cc7a83b53ffbd46cebcfb6">CONFIGURATION_KEY_PROPERTIES</a></td><td class="entry"><a class="el" href="interface_soong_1_1_extractor_1_1_extractor_interface.html">ExtractorInterface</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="interface_soong_1_1_extractor_1_1_extractor_interface.html#a5ad3ad5a60f6536b0a939e715cc0a4a1">CONFIGURATION_PROPERTIES</a></td><td class="entry"><a class="el" href="interface_soong_1_1_extractor_1_1_extractor_interface.html">ExtractorInterface</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="interface_soong_1_1_contracts_1_1_extractor_1_1_extractor.html#ac1c9036f87cc7a83b53ffbd46cebcfb6">CONFIGURATION_KEY_PROPERTIES</a></td><td class="entry"><a class="el" href="interface_soong_1_1_contracts_1_1_extractor_1_1_extractor.html">Extractor</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="interface_soong_1_1_contracts_1_1_extractor_1_1_extractor.html#a5ad3ad5a60f6536b0a939e715cc0a4a1">CONFIGURATION_PROPERTIES</a></td><td class="entry"><a class="el" href="interface_soong_1_1_contracts_1_1_extractor_1_1_extractor.html">Extractor</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_soong_1_1_csv_1_1_extractor.html#ac751e87b3d4c4bf2feb03bee8b092755">count</a>()</td><td class="entry"><a class="el" href="class_soong_1_1_csv_1_1_extractor.html">Extractor</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="class_soong_1_1_extractor_1_1_extractor_base.html#a9ecbd7222fad3e3e1960502a4337cd63">create</a>(array $configuration)</td><td class="entry"><a class="el" href="class_soong_1_1_extractor_1_1_extractor_base.html">ExtractorBase</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_soong_1_1_csv_1_1_extractor.html#ab0a765efdadef3c0b619be67014d3410">extractAll</a>()</td><td class="entry"><a class="el" href="class_soong_1_1_csv_1_1_extractor.html">Extractor</a></td><td class="entry"></td></tr>
......@@ -109,7 +109,7 @@ $(document).ready(function(){initNavTree('class_soong_1_1_csv_1_1_extractor.html
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Mon Feb 11 2019 15:52:07 for Soong by
<li class="footer">Generated on Tue Feb 12 2019 10:58:15 for Soong by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
......
......@@ -103,7 +103,7 @@ Inheritance diagram for Extractor:</div>
<area href="class_soong_1_1_extractor_1_1_countable_extractor_base.html" title="Provides default implementation of count()." alt="CountableExtractorBase" shape="rect" coords="79,112,227,136"/>
<area href="class_soong_1_1_extractor_1_1_extractor_base.html" title="Common implementation details for extractors." alt="ExtractorBase" shape="rect" coords="0,56,148,80"/>
<area href="class_countable.html" alt="Countable" shape="rect" coords="158,56,306,80"/>
<area href="interface_soong_1_1_extractor_1_1_extractor_interface.html" title="Extractors turn a data source into a series of DataRecords." alt="ExtractorInterface" shape="rect" coords="0,0,148,24"/>
<area href="interface_soong_1_1_contracts_1_1_extractor_1_1_extractor.html" title="Extractors turn a data source into a series of DataRecords." alt="Extractor" shape="rect" coords="0,0,148,24"/>
</map>
</div></div>
<table class="memberdecls">
......@@ -139,11 +139,11 @@ Additional Inherited Members</h2></td></tr>
<tr class="inherit_header pub_static_methods_class_soong_1_1_extractor_1_1_extractor_base"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_class_soong_1_1_extractor_1_1_extractor_base')"><img src="closed.png" alt="-"/>&#160;Static Public Member Functions inherited from <a class="el" href="class_soong_1_1_extractor_1_1_extractor_base.html">ExtractorBase</a></td></tr>
<tr class="memitem:a9ecbd7222fad3e3e1960502a4337cd63 inherit pub_static_methods_class_soong_1_1_extractor_1_1_extractor_base"><td class="memItemLeft" align="right" valign="top">static&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_soong_1_1_extractor_1_1_extractor_base.html#a9ecbd7222fad3e3e1960502a4337cd63">create</a> (array $configuration)</td></tr>
<tr class="separator:a9ecbd7222fad3e3e1960502a4337cd63 inherit pub_static_methods_class_soong_1_1_extractor_1_1_extractor_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_attribs_interface_soong_1_1_extractor_1_1_extractor_interface"><td colspan="2" onclick="javascript:toggleInherit('pub_attribs_interface_soong_1_1_extractor_1_1_extractor_interface')"><img src="closed.png" alt="-"/>&#160;Public Attributes inherited from <a class="el" href="interface_soong_1_1_extractor_1_1_extractor_interface.html">ExtractorInterface</a></td></tr>
<tr class="memitem:ac1c9036f87cc7a83b53ffbd46cebcfb6 inherit pub_attribs_interface_soong_1_1_extractor_1_1_extractor_interface"><td class="memItemLeft" align="right" valign="top">const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="interface_soong_1_1_extractor_1_1_extractor_interface.html#ac1c9036f87cc7a83b53ffbd46cebcfb6">CONFIGURATION_KEY_PROPERTIES</a> = 'key_properties'</td></tr>
<tr class="separator:ac1c9036f87cc7a83b53ffbd46cebcfb6 inherit pub_attribs_interface_soong_1_1_extractor_1_1_extractor_interface"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ad3ad5a60f6536b0a939e715cc0a4a1 inherit pub_attribs_interface_soong_1_1_extractor_1_1_extractor_interface"><td class="memItemLeft" align="right" valign="top">const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="interface_soong_1_1_extractor_1_1_extractor_interface.html#a5ad3ad5a60f6536b0a939e715cc0a4a1">CONFIGURATION_PROPERTIES</a> = 'properties'</td></tr>
<tr class="separator:a5ad3ad5a60f6536b0a939e715cc0a4a1 inherit pub_attribs_interface_soong_1_1_extractor_1_1_extractor_interface"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_attribs_interface_soong_1_1_contracts_1_1_extractor_1_1_extractor"><td colspan="2" onclick="javascript:toggleInherit('pub_attribs_interface_soong_1_1_contracts_1_1_extractor_1_1_extractor')"><img src="closed.png" alt="-"/>&#160;Public Attributes inherited from <a class="el" href="interface_soong_1_1_contracts_1_1_extractor_1_1_extractor.html">Extractor</a></td></tr>
<tr class="memitem:ac1c9036f87cc7a83b53ffbd46cebcfb6 inherit pub_attribs_interface_soong_1_1_contracts_1_1_extractor_1_1_extractor"><td class="memItemLeft" align="right" valign="top">const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="interface_soong_1_1_contracts_1_1_extractor_1_1_extractor.html#ac1c9036f87cc7a83b53ffbd46cebcfb6">CONFIGURATION_KEY_PROPERTIES</a> = 'key_properties'</td></tr>
<tr class="separator:ac1c9036f87cc7a83b53ffbd46cebcfb6 inherit pub_attribs_interface_soong_1_1_contracts_1_1_extractor_1_1_extractor"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ad3ad5a60f6536b0a939e715cc0a4a1 inherit pub_attribs_interface_soong_1_1_contracts_1_1_extractor_1_1_extractor"><td class="memItemLeft" align="right" valign="top">const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="interface_soong_1_1_contracts_1_1_extractor_1_1_extractor.html#a5ad3ad5a60f6536b0a939e715cc0a4a1">CONFIGURATION_PROPERTIES</a> = 'properties'</td></tr>
<tr class="separator:a5ad3ad5a60f6536b0a939e715cc0a4a1 inherit pub_attribs_interface_soong_1_1_contracts_1_1_extractor_1_1_extractor"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_class_soong_1_1_extractor_1_1_extractor_base"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_class_soong_1_1_extractor_1_1_extractor_base')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="class_soong_1_1_extractor_1_1_extractor_base.html">ExtractorBase</a></td></tr>
<tr class="memitem:ac4e9a85b2c962619ea3bef67d26b190c inherit pro_attribs_class_soong_1_1_extractor_1_1_extractor_base"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_soong_1_1_extractor_1_1_extractor_base.html#ac4e9a85b2c962619ea3bef67d26b190c">$configuration</a> = []</td></tr>
<tr class="separator:ac4e9a85b2c962619ea3bef67d26b190c inherit pro_attribs_class_soong_1_1_extractor_1_1_extractor_base"><td class="memSeparator" colspan="2">&#160;</td></tr>
......@@ -185,10 +185,10 @@ Additional Inherited Members</h2></td></tr>
</table>
</div><div class="memdoc">
<p>Iterator over all canonical source data.Note filtering may be applied here to the raw data, if there are records in the raw source which are not part of the logical source for this extraction process.<dl class="section return"><dt>Returns</dt><dd>DataRecordInterface[] One data record from the source being extracted.</dd></dl>
<p>Iterator over all canonical source data.Note filtering may be applied here to the raw data, if there are records in the raw source which are not part of the logical source for this extraction process.<dl class="section return"><dt>Returns</dt><dd>DataRecord[] One data record from the source being extracted.</dd></dl>
</p>
<p>Implements <a class="el" href="interface_soong_1_1_extractor_1_1_extractor_interface.html#ab0a765efdadef3c0b619be67014d3410">ExtractorInterface</a>.</p>
<p>Implements <a class="el" href="interface_soong_1_1_contracts_1_1_extractor_1_1_extractor.html#ab0a765efdadef3c0b619be67014d3410">Extractor</a>.</p>
</div>
</div>
......@@ -210,7 +210,7 @@ Additional Inherited Members</h2></td></tr>
<p>List the properties available in records generated by this extractor.<dl class="section return"><dt>Returns</dt><dd>array Array of property names.</dd></dl>
</p>
<p>Implements <a class="el" href="interface_soong_1_1_extractor_1_1_extractor_interface.html#ad92c14b6c86304d3f1fb86b2936d3408">ExtractorInterface</a>.</p>
<p>Implements <a class="el" href="interface_soong_1_1_contracts_1_1_extractor_1_1_extractor.html#ad92c14b6c86304d3f1fb86b2936d3408">Extractor</a>.</p>
</div>
</div>
......@@ -250,7 +250,7 @@ Additional Inherited Members</h2></td></tr>
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><b>Soong</b></li><li class="navelem"><b>Csv</b></li><li class="navelem"><a class="el" href="class_soong_1_1_csv_1_1_extractor.html">Extractor</a></li>
<li class="footer">Generated on Mon Feb 11 2019 15:52:07 for Soong by
<li class="footer">Generated on Tue Feb 12 2019 10:58:15 for Soong by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
......
......@@ -100,13 +100,13 @@ $(document).ready(function(){initNavTree('class_soong_1_1_csv_1_1_loader.html','
<tr class="even"><td class="entry"><a class="el" href="class_soong_1_1_csv_1_1_loader.html#ab13250374c5f4e2cd44502611b599176">delete</a>(array $key)</td><td class="entry"><a class="el" href="class_soong_1_1_csv_1_1_loader.html">Loader</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="class_soong_1_1_csv_1_1_loader.html#a9051457c78305a12d7eff3b88980bd2a">getKeyProperties</a>()</td><td class="entry"><a class="el" href="class_soong_1_1_csv_1_1_loader.html">Loader</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="class_soong_1_1_csv_1_1_loader.html#ad92c14b6c86304d3f1fb86b2936d3408">getProperties</a>()</td><td class="entry"><a class="el" href="class_soong_1_1_csv_1_1_loader.html">Loader</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="class_soong_1_1_csv_1_1_loader.html#a80a9ae7bba68b927dc266bf6cdc61603">load</a>(DataRecordInterface $data)</td><td class="entry"><a class="el" href="class_soong_1_1_csv_1_1_loader.html">Loader</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="class_soong_1_1_csv_1_1_loader.html#a4f1db7dc6c9a065f5ad352c1281950e2">load</a>(DataRecord $data)</td><td class="entry"><a class="el" href="class_soong_1_1_csv_1_1_loader.html">Loader</a></td><td class="entry"></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 on Mon Feb 11 2019 15:52:07 for Soong by
<li class="footer">Generated on Tue Feb 12 2019 10:58:15 for Soong by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
</ul>
......
......@@ -100,8 +100,8 @@ Inheritance diagram for Loader:</div>
<div class="center">
<img src="class_soong_1_1_csv_1_1_loader.png" usemap="#Loader_map" alt=""/>
<map id="Loader_map" name="Loader_map">
<area href="class_soong_1_1_loader_1_1_loader_base.html" title="Common implementation details for loaders." alt="LoaderBase" shape="rect" coords="0,56,102,80"/>
<area href="interface_soong_1_1_loader_1_1_loader_interface.html" title="Loaders take one DataRecord at a time and load them into a destination." alt="LoaderInterface" shape="rect" coords="0,0,102,24"/>
<area href="class_soong_1_1_loader_1_1_loader_base.html" title="Common implementation details for loaders." alt="LoaderBase" shape="rect" coords="0,56,80,80"/>
<area href="interface_soong_1_1_contracts_1_1_loader_1_1_loader.html" title="Loaders take one DataRecord at a time and load them into a destination." alt="Loader" shape="rect" coords="0,0,80,24"/>
</map>
</div></div>
<table class="memberdecls">
......@@ -113,8 +113,8 @@ Public Member Functions</h2></td></tr>
<tr class="separator:a9051457c78305a12d7eff3b88980bd2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad92c14b6c86304d3f1fb86b2936d3408"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_soong_1_1_csv_1_1_loader.html#ad92c14b6c86304d3f1fb86b2936d3408">getProperties</a> ()</td></tr>
<tr class="separator:ad92c14b6c86304d3f1fb86b2936d3408"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a80a9ae7bba68b927dc266bf6cdc61603"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_soong_1_1_csv_1_1_loader.html#a80a9ae7bba68b927dc266bf6cdc61603">load</a> (<a class="el" href="interface_soong_1_1_data_1_1_data_record_interface.html">DataRecordInterface</a> $data)</td></tr>
<tr class="separator:a80a9ae7bba68b927dc266bf6cdc61603"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4f1db7dc6c9a065f5ad352c1281950e2"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_soong_1_1_csv_1_1_loader.html#a4f1db7dc6c9a065f5ad352c1281950e2">load</a> (<a class="el" href="interface_soong_1_1_contracts_1_1_data_1_1_data_record.html">DataRecord</a> $data)</td></tr>
<tr class="separator:a4f1db7dc6c9a065f5ad352c1281950e2"><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>
......@@ -160,7 +160,7 @@ Additional Inherited Members</h2></td></tr>
</dl>
</p>
<p>Implements <a class="el" href="interface_soong_1_1_loader_1_1_loader_interface.html#ab13250374c5f4e2cd44502611b599176">LoaderInterface</a>.</p>
<p>Implements <a class="el" href="interface_soong_1_1_contracts_1_1_loader_1_1_loader.html#ab13250374c5f4e2cd44502611b599176">Loader</a>.</p>
</div>
</div>
......@@ -182,7 +182,7 @@ Additional Inherited Members</h2></td></tr>
<p>List the properties which form a unique key for the extracted data.<dl class="section return"><dt>Returns</dt><dd>array Array keyed by property name, with value being an array containing a 'type' key whose value is the type of the property.</dd></dl>
</p>
<p>Implements <a class="el" href="interface_soong_1_1_loader_1_1_loader_interface.html#a9051457c78305a12d7eff3b88980bd2a">LoaderInterface</a>.</p>
<p>Implements <a class="el" href="interface_soong_1_1_contracts_1_1_loader_1_1_loader.html#a9051457c78305a12d7eff3b88980bd2a">Loader</a>.</p>