|
Qore Mapper Module Reference
1.1
|
This module provides classes that help with structured data mapping, meaning the transformation of data in one or more input formats to a different output format.
Classes provided by this module:
The following is an example map hash with comments:
If this map is applied to the following data in the following way:
The result will be:
list: (2 elements)
[0]=hash: (5 members)
id : 1
name : "John Smith"
explicit_count : 1
implicit_count : 1
order_date : 2014-01-02 10:37:45.103948 Thu +01:00 (CET)
[1]=hash: (5 members)
id : 2
name : "Steve Austin"
explicit_count : 2
implicit_count : 2
order_date : 2014-01-04 19:21:08.882634 Sat +01:00 (CET))The mapper hash is made up of target (ie output) field names (note that dotted output field names result in a nested hash output unless the allow_output_dot option is set) as the key values assigned to field specifications as follows:
"name" key)"code" key); the closure or call reference must accept the following arguments:
"name": the value of this key gives the name of the input field; only use this if the input record name is different than the output field name; note that if this value contains "." characters and the allow_dot option is not set (see Mapper Options), then the value will be treated like "struct" (the "struct" key value will be created automatically); cannot be used with the "constant" key"struct": the value of this key gives the location of the input field in an input hash in dot notation, ex: "element.name" would look for the field's value in the "name" key of the "element" hash in the input record; cannot be used with the "constant" key"constant": the value of this key will be returned as a constant value; this key cannot be used with the "name", "struct", "code", or "default" keys"code": a closure or call reference to process the field data; cannot be used with the "constant" key"date_format": gives the format for converting a string to a date; see date_formatting for the format of this string; note that this also implies "type" = "date" "default": gives a default value for the field in case no input or translated value is provided"maxlen": an integer giving the maximum output string field length in bytes"number_format": gives the format for converting a string to a number; note that this also implies "type" = "number" "trunc": assign to boolean True if the field should be truncated if over the maximum field length; this key can only be set to True if the "maxlen" key is also given"mand": assign to boolean True if the field is mandatory and an exception should be thrown if no input data is supplied"type": this gives the output field type, can be:"number": field accepts only numeric values (any non-numeric values on input will cause an exception to be thrown when mapping)"int": fields accepts only integer values (any non-integer values on input will cause an exception to be thrown when mapping; note: also "integer" is accepted as an alias for "int")"date": date fieldMapper objects accept the following options in the option hash:
"allow_dot": if True (as evaluated by parse_boolean()) then field names with "." characters do not imply a structured internal element lookup; in this case input field names may have "." characters in them, use the "struct" key to use structured internal element loopups (see Mapper Specification Format "struct" docs for more info)"allow_output_dot": if True (as evaluated by parse_boolean()) then output field names with "." characters do not imply a structured/hash output element; in this case output field names may have "." characters in them"date_format": gives the global format for converting a string to a date; see date_formatting for the format of this string; this is applied to all fields of type "date" unless the field has a "date_format" value that overrides this global setting"enc": the output character encoding; if not present then "UTF-8" is assumed"input_log": an optional input data logging callback; must accept a hash giving the input data hash"input_timezone": an optional string or integer (giving seconds east of UTC) giving the time zone for parsing input data (ex: "Europe/Prague"), if not set defaults to the current TimeZone (see Qore::TimeZone::get())"name": the name of the mapper for use in logging and error strings"number_format": gives the global format for converting a string to a number; this is applied to all fields of type "number" unless the field has a "number_format" value that overrides this global setting"output_log": an optional output data logging callback; must accept a hash giving the output data hash"timezone": an optional string or integer (giving seconds east of UTC) giving the time zone definition for output data (ex: "Europe/Prague"), if not set defaults to the current TimeZone (see Qore::TimeZone::get())"trunc": an optional closure or call reference for a callback for field truncation warnings; must accept a single string giving the warning text"trunc_all": if True (as evaluated by parse_boolean()) then any field without a "trunc" key (see Mapper Specification Format "trunc" description) will automatically be truncated if a "maxlen" attribute is set for the field