///|
pub fn compare_agents(
text : String,
left_agent : String,
right_agent : String,
paths : Array[String],
) -> String {
let robots = parse(text)
let lines : Array[String] = []
for path in paths {
let left = decide(robots, left_agent, path).allowed
let right = decide(robots, right_agent, path).allowed
if left != right {
lines.push(path + " " + bool_word(left) + " vs " + bool_word(right))
}
}
if lines.is_empty() {
"same"
} else {
join_lines(lines)
}
}
///|
pub fn compare_versions(
old_text : String,
new_text : String,
agent : String,
paths : Array[String],
) -> String {
let old = parse(old_text)
let fresh = parse(new_text)
let lines : Array[String] = []
for path in paths {
let before = decide(old, agent, path).allowed
let after = decide(fresh, agent, path).allowed
if before != after {
lines.push(path + " " + bool_word(before) + " -> " + bool_word(after))
}
}
if lines.is_empty() {
"same"
} else {
join_lines(lines)
}
}
///|
pub fn bool_word(value : Bool) -> String {
if value {
"allow"
} else {
"block"
}
}
///|
pub fn decision_matrix(
text : String,
agents : Array[String],
paths : Array[String],
) -> String {
let robots = parse(text)
let lines : Array[String] = []
let header : Array[String] = ["path"]
for agent in agents {
header.push(agent)
}
lines.push(join_with(header, ","))
for path in paths {
let row : Array[String] = [path]
for agent in agents {
row.push(bool_word(decide(robots, agent, path).allowed))
}
lines.push(join_with(row, ","))
}
join_lines(lines)
}