From 158c86d97fa87e43951dab466723e43fe9ec334e Mon Sep 17 00:00:00 2001 From: David Stosik Date: Fri, 5 Jul 2024 22:39:43 +0900 Subject: [PATCH] Better memo (with 200-char limit) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Following up on #5, I tried to make the transaction memo better, while also making sure it won't break YNAB API's current limit of 200 characters. ([Which I think should be abolished.](https://github.com/ynab/ynab-sdk-ruby/issues/77) 😬) --- lib/mfynab/cli.rb | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/mfynab/cli.rb b/lib/mfynab/cli.rb index f3e4ae8..fccd26e 100644 --- a/lib/mfynab/cli.rb +++ b/lib/mfynab/cli.rb @@ -194,7 +194,7 @@ def start payee_name: row["content"][0, 100], date: Date.strptime(row["date"], "%Y/%m/%d").strftime("%Y-%m-%d"), cleared: "cleared", - memo: memo, + memo: generate_memo_for(row), import_id: import_id, } end @@ -215,6 +215,26 @@ def start attr_reader :argv + def generate_memo_for(row) + category = row + .values_at("category", "subcategory") + .delete_if { _1.nil? || _1.empty? || _1 == "未分類" } + .join("/") + + memo_parts = [ + row["memo"], # prioritize memo if present, since it's user input + row["content"], + category, + ] + + memo_parts + .delete_if { _1.nil? || _1.empty? } + .join(" - ") + .slice(0, 200) # YNAB's API currently limits memo to 200 characters, + # even though YNAB itself allows longer memos. See: + # https://github.com/ynab/ynab-sdk-ruby/issues/77 + end + def config_file if argv.empty? raise "You need to pass a config file"