Skip to content

Commit 03cd1c5

Browse files
Release 0.4.0.0
2 parents 8126429 + 653719c commit 03cd1c5

File tree

9 files changed

+104
-31
lines changed

9 files changed

+104
-31
lines changed

.travis.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ matrix:
1919
- ghc: 8.2.2
2020
- ghc: 8.4.4
2121
- ghc: 8.6.5
22-
#- ghc: 8.8.3
23-
#- ghc: 8.10.1
22+
#- ghc: 8.8.4
23+
#- ghc: 8.10.2
2424

2525
# Stack
2626
- ghc: 8.2.2
@@ -29,7 +29,7 @@ matrix:
2929
env: STACK_YAML="$TRAVIS_BUILD_DIR/stack-8.4.4.yaml"
3030
- ghc: 8.6.5
3131
env: STACK_YAML="$TRAVIS_BUILD_DIR/stack-8.6.5.yaml"
32-
- ghc: 8.8.3
32+
- ghc: 8.8.4
3333
env: STACK_YAML="$TRAVIS_BUILD_DIR/stack.yaml"
3434

3535
install:

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ following conventions:
2424

2525
[KaC]: <https://keepachangelog.com/en/1.0.0/>
2626

27+
## 0.4.0.0 (2020-09-12)
28+
29+
### Breaking
30+
31+
* Add item support for tags
32+
2733
## 0.3.0.0 (2020-08-23)
2834

2935
### Breaking

doc/queue-sheet.1.md

+7-1
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,17 @@ exhausted, the previous item can be specified using the *prev* property. If
8282
both *prev* and *next* are specified, *prev* is ignored.
8383

8484
Items can be specified by name only, using a string or a number. To associate
85-
a URL with an item, use an object with the following properties:
85+
a URL or tags with an item, use an object with the following properties:
8686

8787
*name*
8888
: name of the item (string, required)
8989

9090
*url*
9191
: item URL (string, optional)
9292

93+
*tags*
94+
: list of tags (list of string, optional)
95+
9396
To organize queues into sections, the YAML file should be written as an object
9497
with two properties:
9598

@@ -189,6 +192,9 @@ An item is an object with the following properties:
189192
*url*
190193
: item URL or empty string if no URL (string)
191194

195+
Item tags are exposed as boolean properties prefixed with "tag_". For
196+
example, a tag named "em" is exposed as "tag_em".
197+
192198
## `QUEUES.pdf`
193199

194200
Unless specified otherwise, the built PDF is output to a file with the same
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# `queue-sheet-haskell` `0.4.0.0` Release Notes
2+
3+
Date
4+
: 2020-09-12
5+
6+
## Overview
7+
8+
This release of Queue Sheet adds support for associating tags with items. See
9+
the updated man page for details.
10+
11+
YAML files used with version `0.3.0.0` work with version `0.4.0.0` without
12+
change, but YAML files that include item tags will not work with version
13+
`0.3.0.0` or before.

queue-sheet.cabal

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: queue-sheet
2-
version: 0.3.0.0
2+
version: 0.4.0.0
33
category: Utils
44
synopsis: queue sheet utility
55
description:
@@ -21,7 +21,7 @@ tested-with:
2121
GHC ==8.2.2
2222
|| ==8.4.4
2323
|| ==8.6.5
24-
|| ==8.8.3
24+
|| ==8.8.4
2525

2626
extra-source-files:
2727
CHANGELOG.md

queue-sheet.nix

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
}:
55
mkDerivation {
66
pname = "queue-sheet";
7-
version = "0.3.0.0";
7+
version = "0.4.0.0";
88
src = ./.;
99
isLibrary = false;
1010
isExecutable = true;

src/QueueSheet/Types.hs

+6-3
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ data Item
165165
= Item
166166
{ itemName :: !Name
167167
, itemUrl :: !(Maybe Url)
168+
, itemTags :: ![Tag]
168169
}
169170
deriving (Eq, Show)
170171

@@ -173,17 +174,19 @@ instance FromJSON Item where
173174
(A.Object o) -> do
174175
itemName <- o .: "name"
175176
itemUrl <- o .:? "url"
177+
itemTags <- o .:? "tags" .!= []
176178
return Item{..}
177179
value -> do
178180
itemName <- Name <$> parseToString value
179-
let itemUrl = Nothing
181+
let itemUrl = Nothing
182+
itemTags = []
180183
return Item{..}
181184

182185
instance Ginger.ToGVal m Item where
183-
toGVal Item{..} = Ginger.dict
186+
toGVal Item{..} = Ginger.dict $
184187
[ "name" ~> itemName
185188
, "url" ~> itemUrl
186-
]
189+
] ++ [("tag_" <> tag) ~> True | Tag tag <- itemTags]
187190

188191
------------------------------------------------------------------------------
189192
-- $Queue

stack.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
resolver: lts-16.10
1+
resolver: lts-16.13
22

33
packages:
44
- .

test/QueueSheet/File/Test.hs

+65-20
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import Test.Tasty.HUnit ((@=?), testCase)
2929
-- (queue-sheet)
3030
import QueueSheet.File (loadYaml')
3131
import QueueSheet.Types
32-
( Date(Date), Item(Item, itemName, itemUrl), Name(Name)
32+
( Date(Date), Item(Item, itemName, itemTags, itemUrl), Name(Name)
3333
, Queue
3434
( Queue, queueDate, queueItems, queueName, queueSection, queueTags
3535
, queueUrl
@@ -40,6 +40,13 @@ import QueueSheet.Types
4040

4141
------------------------------------------------------------------------------
4242

43+
defaultItem :: Item
44+
defaultItem = Item
45+
{ itemName = Name ""
46+
, itemUrl = Nothing
47+
, itemTags = []
48+
}
49+
4350
defaultQueue :: Queue
4451
defaultQueue = Queue
4552
{ queueName = Name ""
@@ -379,9 +386,8 @@ testQueuePrev = testGroup "prev"
379386
{ qsQueues =
380387
[ defaultQueue
381388
{ queueName = Name "test"
382-
, queueItems = Just . Left $ Item
389+
, queueItems = Just . Left $ defaultItem
383390
{ itemName = Name "premiere"
384-
, itemUrl = Nothing
385391
}
386392
}
387393
]
@@ -397,9 +403,8 @@ testQueuePrev = testGroup "prev"
397403
{ qsQueues =
398404
[ defaultQueue
399405
{ queueName = Name "test"
400-
, queueItems = Just . Left $ Item
406+
, queueItems = Just . Left $ defaultItem
401407
{ itemName = Name "42"
402-
, itemUrl = Nothing
403408
}
404409
}
405410
]
@@ -415,9 +420,8 @@ testQueuePrev = testGroup "prev"
415420
{ qsQueues =
416421
[ defaultQueue
417422
{ queueName = Name "test"
418-
, queueItems = Just . Left $ Item
423+
, queueItems = Just . Left $ defaultItem
419424
{ itemName = Name "premiere"
420-
, itemUrl = Nothing
421425
}
422426
}
423427
]
@@ -434,7 +438,7 @@ testQueuePrev = testGroup "prev"
434438
{ qsQueues =
435439
[ defaultQueue
436440
{ queueName = Name "test"
437-
, queueItems = Just . Left $ Item
441+
, queueItems = Just . Left $ defaultItem
438442
{ itemName = Name "42"
439443
, itemUrl = Just $ Url "https://www.example.com/42"
440444
}
@@ -449,6 +453,28 @@ testQueuePrev = testGroup "prev"
449453
, " url: https://www.example.com/42"
450454
]
451455
]
456+
, testCase "tags" $ do
457+
let expected = defaultQueueSheet
458+
{ qsQueues =
459+
[ defaultQueue
460+
{ queueName = Name "test"
461+
, queueItems = Just . Left $ defaultItem
462+
{ itemName = Name "42"
463+
, itemTags = [Tag "one", Tag "two"]
464+
}
465+
}
466+
]
467+
}
468+
Right expected @=? loadYaml
469+
[ validFile "/tmp/test.yaml"
470+
[ "- name: test"
471+
, " prev:"
472+
, " name: 42"
473+
, " tags:"
474+
, " - one"
475+
, " - two"
476+
]
477+
]
452478
, testCase "empty" $ do
453479
let message = intercalate "\n"
454480
[ "error loading /tmp/test.yaml: Aeson exception:"
@@ -471,9 +497,8 @@ testQueueNext = testGroup "next"
471497
[ defaultQueue
472498
{ queueName = Name "test"
473499
, queueItems = Just $ Right
474-
[ Item
500+
[ defaultItem
475501
{ itemName = Name "one"
476-
, itemUrl = Nothing
477502
}
478503
]
479504
}
@@ -492,9 +517,8 @@ testQueueNext = testGroup "next"
492517
[ defaultQueue
493518
{ queueName = Name "test"
494519
, queueItems = Just $ Right
495-
[ Item
520+
[ defaultItem
496521
{ itemName = Name "42"
497-
, itemUrl = Nothing
498522
}
499523
]
500524
}
@@ -513,9 +537,8 @@ testQueueNext = testGroup "next"
513537
[ defaultQueue
514538
{ queueName = Name "test"
515539
, queueItems = Just $ Right
516-
[ Item
540+
[ defaultItem
517541
{ itemName = Name "one"
518-
, itemUrl = Nothing
519542
}
520543
]
521544
}
@@ -534,7 +557,7 @@ testQueueNext = testGroup "next"
534557
[ defaultQueue
535558
{ queueName = Name "test"
536559
, queueItems = Just $ Right
537-
[ Item
560+
[ defaultItem
538561
{ itemName = Name "one"
539562
, itemUrl = Just $
540563
Url "https://www.example.com/one"
@@ -551,17 +574,40 @@ testQueueNext = testGroup "next"
551574
, " url: https://www.example.com/one"
552575
]
553576
]
577+
, testCase "tags" $ do
578+
let expected = defaultQueueSheet
579+
{ qsQueues =
580+
[ defaultQueue
581+
{ queueName = Name "test"
582+
, queueItems = Just $ Right
583+
[ defaultItem
584+
{ itemName = Name "one"
585+
, itemTags = [Tag "one", Tag "two"]
586+
}
587+
]
588+
}
589+
]
590+
}
591+
Right expected @=? loadYaml
592+
[ validFile "/tmp/test.yaml"
593+
[ "- name: test"
594+
, " next:"
595+
, " - name: one"
596+
, " tags:"
597+
, " - one"
598+
, " - two"
599+
]
600+
]
554601
, testCase "multiple" $ do
555602
let expected = defaultQueueSheet
556603
{ qsQueues =
557604
[ defaultQueue
558605
{ queueName = Name "test"
559606
, queueItems = Just $ Right
560-
[ Item
607+
[ defaultItem
561608
{ itemName = Name "one"
562-
, itemUrl = Nothing
563609
}
564-
, Item
610+
, defaultItem
565611
{ itemName = Name "42"
566612
, itemUrl = Just $
567613
Url "https://www.example.com/42"
@@ -600,9 +646,8 @@ testQueueNext = testGroup "next"
600646
[ defaultQueue
601647
{ queueName = Name "test"
602648
, queueItems = Just $ Right
603-
[ Item
649+
[ defaultItem
604650
{ itemName = Name "42"
605-
, itemUrl = Nothing
606651
}
607652
]
608653
}

0 commit comments

Comments
 (0)