From 58569bae3f37e0cc3c14c811df87860ef34eca6b Mon Sep 17 00:00:00 2001 From: LordMZTE Date: Sat, 10 Jul 2021 16:14:43 +0200 Subject: [PATCH] fix contains matching & bump version --- CHANGELOG.md | 7 +++---- Cargo.toml | 2 +- src/meme.rs | 19 +++++++++++++------ 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b08c954..3a16faf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,3 @@ -# 0.2.3 -- added "matches" propery for memes -- added tests for meme matching -- added "wtf" and "wtuff" commands +# 0.2.4 +- fix match = "contains" commands matching when keyword is at the start of message, and there are invalid characters after it. +- add tests diff --git a/Cargo.toml b/Cargo.toml index 43a2c88..23a8e82 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ruff" -version = "0.2.3" +version = "0.2.4" authors = ["LordMZTE "] edition = "2018" diff --git a/src/meme.rs b/src/meme.rs index 568bb86..f03331e 100644 --- a/src/meme.rs +++ b/src/meme.rs @@ -33,17 +33,17 @@ impl Meme { Matcher::Contains => msg .match_indices(&self.keyword) .map(|(idx, subs)| { - idx == 0 + (idx == 0 || msg .chars() .nth(idx - 1) .map(|c| ALLOWED_SPACES.contains(c)) + .unwrap_or(true)) + && msg + .chars() + .nth(idx + subs.len()) + .map(|c| ALLOWED_SPACES.contains(c)) .unwrap_or(true) - && msg - .chars() - .nth(idx + subs.len()) - .map(|c| ALLOWED_SPACES.contains(c)) - .unwrap_or(true) }) .any(|b| b), } @@ -85,6 +85,9 @@ mod tests { assert!(!meme.matches("xxx")); assert!(!meme.matches("testxxx")); + assert!(!meme.matches("xxxtestxxx")); + assert!(!meme.matches("xxxtest xxx")); + assert!(!meme.matches("xxx testxxx")); assert!(meme.matches("test")); assert!(meme.matches("test xxx")); assert!(meme.matches("test; xxx")); @@ -103,6 +106,10 @@ mod tests { assert!(!meme.matches("xxx")); assert!(!meme.matches("xxxtestxxx")); + assert!(!meme.matches("xxxtest xxx")); + assert!(!meme.matches("xxx testxxx")); + assert!(!meme.matches("xxxtest")); + assert!(!meme.matches("testxxx")); assert!(meme.matches("xxx test xxx")); assert!(meme.matches("xxx,test.xxx")); assert!(meme.matches("xxx,TEST.xxx"));