Skip to content

Commit 0c73199

Browse files
committed
feat: Build order
1 parent 6a572cc commit 0c73199

File tree

3 files changed

+42
-21
lines changed

3 files changed

+42
-21
lines changed

Sources/Cli/SharedOptions.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ struct SharedOptions: ParsableArguments {
6969

7070
@Option(help: ArgumentHelp(
7171
"Sort parameter(s) <s>." +
72-
"Available: [start]",
72+
"Available: []",
7373
valueName: "s"
74-
)) var sortParameters: [Field] = [.start]
74+
)) var sortParameters: [Order] = []
7575

7676
@Flag(help: ArgumentHelp(
7777
"Print debug statements"

Sources/Model/Object.swift

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ enum Object {
55
case notFound
66
}
77

8+
@discardableResult
89
static func valueForKeyPath(_ object: Any, _ keyPath: String) throws -> Any? {
910
let keys = keyPath.split(separator: ".").map { String($0) }
1011

Sources/Model/Sorting.swift

+39-19
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,36 @@
11
import ArgumentParser
22
import Foundation
33

4-
class Order {
5-
let field: Field
4+
final class Order: ArgumentParser.ExpressibleByArgument {
5+
let field: String
66
let direction: Direction
77

8-
init(field: Field, direction: Direction) {
9-
self.field = field
10-
self.direction = direction
8+
public init?(argument: String) {
9+
let o = Order.parse(s: argument.lowercased())
10+
if o != nil {
11+
field = o!.field
12+
direction = o!.direction
13+
} else {
14+
return nil
15+
}
1116
}
1217

13-
func sort(events: [Event]) -> [Event] {
14-
if field == .start {
15-
if direction == .asc {
16-
} else {}
17-
}
18-
return events
18+
init(field: String, direction: Direction) {
19+
self.field = field
20+
self.direction = direction
1921
}
2022

2123
static func parse(s: String) -> Order? {
2224
let ss: [String] = s.split(separator: ":").map { String($0) }
2325
switch ss.count {
2426
// found a string candidate for field only
2527
case 1:
26-
return parseField(ss[0]).map {
28+
return parseField(s: ss[0]).map {
2729
Order(field: $0, direction: Direction.asc)
2830
}
2931
// found a string candidates for field and direction
3032
case 2:
31-
switch (parseField(ss[0]), Direction(rawValue: ss[1])) {
33+
switch (parseField(s: ss[0]), Direction(rawValue: ss[1])) {
3234
case let (.some(f), .some(d)):
3335
return Order(field: f, direction: d)
3436
default:
@@ -39,13 +41,31 @@ class Order {
3941
}
4042
}
4143

42-
private static func parseField(_: String) -> Field? {
43-
nil
44-
}
45-
}
44+
private static let event =
45+
Event(
46+
id: UUID().uuidString,
47+
calendar: PlanCalendar.Unknown,
48+
title: Title(text: "empty"),
49+
schedule: Schedule(
50+
now: Date(),
51+
startDate: Date(),
52+
endDate: Date(),
53+
allDay: false
54+
),
55+
location: "",
56+
meeting: Meeting(organizer: "", attendees: []),
57+
services: [:],
58+
tags: []
59+
)
4660

47-
enum Field: String, ExpressibleByArgument {
48-
case start
61+
private static func parseField(s: String) -> String? {
62+
do {
63+
try Object.valueForKeyPath(event, s)
64+
return s
65+
} catch {
66+
return nil
67+
}
68+
}
4969
}
5070

5171
enum Direction: String, ExpressibleByArgument {

0 commit comments

Comments
 (0)