From 9abe95502760685aac75e2c03f932b28ded5303e Mon Sep 17 00:00:00 2001 From: Nitsan Avni Date: Mon, 6 Feb 2023 22:38:45 +0000 Subject: [PATCH] add jq translation --- jq/README.md | 21 ++++++++++++++++++ jq/gilded-rose.jq | 49 ++++++++++++++++++++++++++++++++++++++++++ jq/test-gilded-rose.sh | 3 +++ jq/texttest_fixture.jq | 22 +++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100644 jq/README.md create mode 100644 jq/gilded-rose.jq create mode 100755 jq/test-gilded-rose.sh create mode 100644 jq/texttest_fixture.jq diff --git a/jq/README.md b/jq/README.md new file mode 100644 index 00000000..a4dd4d82 --- /dev/null +++ b/jq/README.md @@ -0,0 +1,21 @@ +# Installs + +[install jaq](https://github.com/01mf02/jaq#installation) (latest development version) + +# Failing Unit Test + +```shell +./test-gilded-rose.sh +``` + +# TextTest Fixture + +```shell +jaq -nr "$(cat gilded-rose.jq) $(cat texttest_fixture.jq)" +``` + +Specify days (e.g. 10 days): + +```shell +jaq --arg days 10 -nr "$(cat gilded-rose.jq) $(cat texttest_fixture.jq)" +``` diff --git a/jq/gilded-rose.jq b/jq/gilded-rose.jq new file mode 100644 index 00000000..32689e2f --- /dev/null +++ b/jq/gilded-rose.jq @@ -0,0 +1,49 @@ +def update_quality: + if .name != "Aged Brie" and .name != "Backstage passes to a TAFKAL80ETC concert" then + if .quality > 0 then + if .name != "Sulfuras, Hand of Ragnaros" then + .quality = .quality - 1 + else . end + else . end + else + if .quality < 50 then + .quality = .quality + 1 + | + if .name == "Backstage passes to a TAFKAL80ETC concert" then + if .sell_in < 11 then + if .quality < 50 then + .quality = .quality + 1 + else . end + else . end + | + if .sell_in < 6 then + if .quality < 50 then + .quality = .quality + 1 + else . end + else . end + else . end + else . end + end + | + if .name != "Sulfuras, Hand of Ragnaros" then + .sell_in = .sell_in - 1 + else . end + | + if .sell_in < 0 then + if .name != "Aged Brie" then + if .name != "Backstage passes to a TAFKAL80ETC concert" then + if .quality > 0 then + if .name != "Sulfuras, Hand of Ragnaros" then + .quality = .quality - 1 + else . end + else . end + else + .quality = .quality - .quality + end + else + if .quality < 50 then + .quality = .quality + 1 + else . end + end + else . end + ; diff --git a/jq/test-gilded-rose.sh b/jq/test-gilded-rose.sh new file mode 100755 index 00000000..2e32d49f --- /dev/null +++ b/jq/test-gilded-rose.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +jaq -en "$(cat gilded-rose.jq)"'{name:"foo",sell_in:0,quality:0} | update_quality | .name == "fixme"' diff --git a/jq/texttest_fixture.jq b/jq/texttest_fixture.jq new file mode 100644 index 00000000..28fcd69e --- /dev/null +++ b/jq/texttest_fixture.jq @@ -0,0 +1,22 @@ +"OMGHAI!", +( + [ + { name: "+5 Dexterity Vest", sell_in: 10, quality: 20 }, + { name: "Aged Brie", sell_in: 2, quality: 0 }, + { name: "Elixir of the Mongoose", sell_in: 5, quality: 7 }, + { name: "Sulfuras, Hand of Ragnaros", sell_in: 0, quality: 80 }, + { name: "Sulfuras, Hand of Ragnaros", sell_in: 1, quality: 80 }, + { name: "Backstage passes to a TAFKAL80ETC concert", sell_in: 15, quality: 20 }, + { name: "Backstage passes to a TAFKAL80ETC concert", sell_in: 10, quality: 49 }, + { name: "Backstage passes to a TAFKAL80ETC concert", sell_in: 5, quality: 49 }, + { name: "Conjured Mana Cake", sell_in: 3, quality: 6} # <-- :O + ] | + { items: ., day: 0 } | + recurse(.day += 1 | .items = [.items[] | update_quality]; .day < ($ARGS.named.days // 2 | tonumber)) | + ( + "", + (["-------- day ", (.day | tostring), " --------"] | add), + ("name, sellIn, quality"), + (.items[] | [.name, .sell_in, .quality | tostring] | join(", ")) + ) +)