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