return $message['due']->diff(new DateTimeImmutable)->d == REMIND_THRESHOLD;
}
+const lines = 'lines';
+function lines(string $string): array {
+ return explode("\n", $string);
+}
+
+const glue = 'join';
+function glue(string $delim): callable {
+ return function(array $strings) use ($delim): string {
+ return implode($delim, $strings);
+ };
+}
+
const unlines = 'unlines';
function unlines($lines) {
return implode("\n", $lines);
'Water' => [
'imapQuery' => 'FROM "@watercorporation.com.au"',
'regex' => '/Due date:.*?(?<due>\d{1,2}\/\d{2}\/\d{4}).*?Amount to pay:.*\$(?<amount>[0-9]+(\.[0-9]{2})?)/',
- 'messageTransform' => function($message) {
- return implode(" ", array_map('trim', explode("\n", strip_tags(base64_decode($message)))));
- },
+ 'messageTransform' => ∘(glue(" "), map('trim'), lines, 'strip_tags', 'base64_decode'),
'dateTransform' => function($date) {
return str_replace('/', '-', $date);
}
'Internet' => [
'imapQuery' => 'FROM "@online.telstra.com"',
'regex' => '/Total \$(?<amount>[0-9]+(\.[0-9]{2})?).*?Due Date (?<due>\d{1,2} \w{3} \d{4})/',
- 'messageTransform' => function($message) {
- return implode(" ", array_map('trim', explode("\n", strip_tags(html_entity_decode($message)))));
- }
+ 'messageTransform' => ∘(glue(" "), map('trim'), lines, 'strip_tags', 'html_entity_decode')
],
'Gas' => [
'imapQuery' => 'FROM "@energy.agl.com.au"',
'regex' => '/Direct Debit amount: \$(?<amount>[0-9]+(\.[0-9]{2})?).*?Direct Debit date: (?<due>\d{1,2} \w{3} \d+)/',
- 'messageTransform' => function($message) {
- return implode(" ", array_map('trim', explode("\n", $message)));
- }
+ 'messageTransform' => ∘(glue(" "), map('trim'), lines)
]
];