Make the transform functions nicer in rules.php
authorCameron Ball <cameron@cameron1729.xyz>
Thu, 6 Dec 2018 03:04:48 +0000 (11:04 +0800)
committerCameron Ball <cameron@cameron1729.xyz>
Wed, 19 Dec 2018 03:48:36 +0000 (11:48 +0800)
common.php
rules.php

index 6b80309..996c1aa 100644 (file)
@@ -99,6 +99,18 @@ function messageNeedsReminder($message) {
     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);
index 807e1f9..7630bd4 100644 (file)
--- a/rules.php
+++ b/rules.php
@@ -8,9 +8,7 @@ return [
     '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);
         }
@@ -18,15 +16,11 @@ return [
     '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)
     ]
 ];