Skip to content

Commit d3a4822

Browse files
Merge #1096
1096: Made the search feature -/_ insensitive. r=sgrif The changes to the test crate descriptions are because the test enforces sort order. Closes #1065
2 parents b910144 + 1b06e61 commit d3a4822

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

src/krate/mod.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use chrono::{NaiveDate, NaiveDateTime};
66
use conduit::{Request, Response};
77
use conduit_router::RequestParams;
88
use diesel::associations::Identifiable;
9+
use diesel::expression::helper_types::Eq;
910
use diesel::helper_types::Select;
1011
use diesel::pg::upsert::*;
1112
use diesel::pg::Pg;
@@ -281,14 +282,20 @@ impl<'a> NewCrate<'a> {
281282
impl Crate {
282283
pub fn by_name(name: &str) -> CrateQuery {
283284
Crate::all()
284-
.filter(canon_crate_name(crates::name).eq(canon_crate_name(name)))
285+
.filter(Crate::name_canonically_equals(name))
285286
.into_boxed()
286287
}
287288

288289
pub fn all() -> Select<crates::table, AllColumns> {
289290
crates::table.select(ALL_COLUMNS)
290291
}
291292

293+
fn name_canonically_equals(
294+
s: &str,
295+
) -> Eq<canon_crate_name<crates::name>, canon_crate_name<&str>> {
296+
canon_crate_name(crates::name).eq(canon_crate_name(s))
297+
}
298+
292299
pub fn valid_name(name: &str) -> bool {
293300
let under_max_length = name.chars().take(MAX_NAME_LENGTH + 1).count() <= MAX_NAME_LENGTH;
294301
Crate::valid_ident(name) && under_max_length
@@ -620,15 +627,15 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
620627
let q = plainto_tsquery(q_string);
621628
query = query.filter(
622629
q.matches(crates::textsearchable_index_col)
623-
.or(crates::name.eq(q_string)),
630+
.or(Crate::name_canonically_equals(q_string)),
624631
);
625632

626633
query = query.select((
627634
ALL_COLUMNS,
628-
crates::name.eq(q_string),
635+
Crate::name_canonically_equals(q_string),
629636
recent_downloads.clone(),
630637
));
631-
let perfect_match = crates::name.eq(q_string).desc();
638+
let perfect_match = Crate::name_canonically_equals(q_string).desc();
632639
if sort == "downloads" {
633640
query = query.order((perfect_match, crates::downloads.desc()));
634641
} else if sort == "recent-downloads" {

src/tests/krate.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -232,12 +232,12 @@ fn exact_match_first_on_queries() {
232232
.description("bar_exact baz_exact")
233233
.expect_build(&conn);
234234

235-
::CrateBuilder::new("bar_exact", user.id)
236-
.description("foo_exact baz_exact foo_exact baz_exact")
235+
::CrateBuilder::new("bar-exact", user.id)
236+
.description("foo_exact baz_exact foo-exact baz_exact")
237237
.expect_build(&conn);
238238

239239
::CrateBuilder::new("baz_exact", user.id)
240-
.description("foo_exact bar_exact foo_exact bar_exact foo_exact bar_exact")
240+
.description("foo-exact bar_exact foo-exact bar_exact foo_exact bar_exact")
241241
.expect_build(&conn);
242242

243243
::CrateBuilder::new("other_exact", user.id)
@@ -247,25 +247,25 @@ fn exact_match_first_on_queries() {
247247

248248
let mut req = ::req(app, Method::Get, "/api/v1/crates");
249249

250-
let mut response = ok_resp!(middle.call(req.with_query("q=foo_exact")));
250+
let mut response = ok_resp!(middle.call(req.with_query("q=foo-exact")));
251251
let json: CrateList = ::json(&mut response);
252252
assert_eq!(json.meta.total, 3);
253253
assert_eq!(json.crates[0].name, "foo_exact");
254254
assert_eq!(json.crates[1].name, "baz_exact");
255-
assert_eq!(json.crates[2].name, "bar_exact");
255+
assert_eq!(json.crates[2].name, "bar-exact");
256256

257257
let mut response = ok_resp!(middle.call(req.with_query("q=bar_exact")));
258258
let json: CrateList = ::json(&mut response);
259259
assert_eq!(json.meta.total, 3);
260-
assert_eq!(json.crates[0].name, "bar_exact");
260+
assert_eq!(json.crates[0].name, "bar-exact");
261261
assert_eq!(json.crates[1].name, "baz_exact");
262262
assert_eq!(json.crates[2].name, "foo_exact");
263263

264264
let mut response = ok_resp!(middle.call(req.with_query("q=baz_exact")));
265265
let json: CrateList = ::json(&mut response);
266266
assert_eq!(json.meta.total, 3);
267267
assert_eq!(json.crates[0].name, "baz_exact");
268-
assert_eq!(json.crates[1].name, "bar_exact");
268+
assert_eq!(json.crates[1].name, "bar-exact");
269269
assert_eq!(json.crates[2].name, "foo_exact");
270270
}
271271

0 commit comments

Comments
 (0)