Skip to content

Commit 59a4bd5

Browse files
Merge #1016 #1023
1016: Give tables in readmes a bit of padding and a border r=carols10cents Before: <img width="253" alt="before" src="https://user-images.githubusercontent.com/193874/29745854-40021ae6-8a94-11e7-868c-80e5e350b6f2.png"> After: <img width="278" alt="after" src="https://user-images.githubusercontent.com/193874/29745855-43dfb466-8a94-11e7-8e0e-e3fc5cb12b48.png"> 1023: Add query to display recent_downloads on krates::show r=carols10cents Additionally, we've updated the join for this data on krate::index to use the new public API Diesel added for this in the most recent version, and made sure that any other endpoints which *don't* include this data are returning NULL instead of 0 /cc @natboehm
3 parents fec6115 + 037e852 + c68f750 commit 59a4bd5

File tree

3 files changed

+23
-8
lines changed

3 files changed

+23
-8
lines changed

app/styles/crate.scss

+9
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,15 @@
320320
padding: 0 2px;
321321
}
322322
}
323+
324+
table {
325+
border-collapse: collapse;
326+
327+
th, td {
328+
border: 1px solid #dfe2e5;
329+
padding: 6px 13px;
330+
}
331+
}
323332
}
324333
.last-update {
325334
color: $main-color-light;

src/krate.rs

+11-8
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,6 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
573573
use diesel::types::{Bool, BigInt, Nullable};
574574
use diesel::expression::functions::date_and_time::{now, date};
575575
use diesel::expression::sql_literal::sql;
576-
use diesel::query_source::joins::LeftOuter;
577576

578577
let conn = req.db_conn()?;
579578
let (offset, limit) = req.pagination(10, 100)?;
@@ -585,13 +584,11 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
585584
let recent_downloads = sql::<Nullable<BigInt>>("SUM(crate_downloads.downloads)");
586585

587586
let mut query = crates::table
588-
.join(
589-
crate_downloads::table,
590-
LeftOuter,
587+
.left_join(crate_downloads::table.on(
591588
crates::id.eq(crate_downloads::crate_id).and(
592589
crate_downloads::date.gt(date(now - 90.days())),
593590
),
594-
)
591+
))
595592
.group_by(crates::id)
596593
.select((
597594
ALL_COLUMNS,
@@ -775,7 +772,7 @@ pub fn summary(req: &mut Request) -> CargoResult<Response> {
775772
.map(|versions| Version::max(versions.into_iter().map(|v| v.num)))
776773
.zip(krates)
777774
.map(|(max_version, krate)| {
778-
Ok(krate.minimal_encodable(max_version, None, false, Some(0)))
775+
Ok(krate.minimal_encodable(max_version, None, false, None))
779776
})
780777
.collect()
781778
};
@@ -833,6 +830,8 @@ pub fn summary(req: &mut Request) -> CargoResult<Response> {
833830

834831
/// Handles the `GET /crates/:crate_id` route.
835832
pub fn show(req: &mut Request) -> CargoResult<Response> {
833+
use diesel::expression::dsl::*;
834+
836835
let name = &req.params()["crate_id"];
837836
let conn = req.db_conn()?;
838837
let krate = Crate::by_name(name).first::<Crate>(&*conn)?;
@@ -849,6 +848,10 @@ pub fn show(req: &mut Request) -> CargoResult<Response> {
849848
.inner_join(categories::table)
850849
.select(categories::all_columns)
851850
.load(&*conn)?;
851+
let recent_downloads = CrateDownload::belonging_to(&krate)
852+
.filter(crate_downloads::date.gt(date(now - 90.days())))
853+
.select(sum(crate_downloads::downloads))
854+
.get_result(&*conn)?;
852855

853856
let badges = badges::table.filter(badges::crate_id.eq(krate.id)).load(
854857
&*conn,
@@ -872,7 +875,7 @@ pub fn show(req: &mut Request) -> CargoResult<Response> {
872875
Some(&cats),
873876
Some(badges),
874877
false,
875-
Some(0),
878+
recent_downloads,
876879
),
877880
versions: versions
878881
.into_iter()
@@ -1037,7 +1040,7 @@ pub fn new(req: &mut Request) -> CargoResult<Response> {
10371040
warnings: Warnings<'a>,
10381041
}
10391042
Ok(req.json(&R {
1040-
krate: krate.minimal_encodable(max_version, None, false, Some(0)),
1043+
krate: krate.minimal_encodable(max_version, None, false, None),
10411044
warnings: warnings,
10421045
}))
10431046
})

src/tests/krate.rs

+3
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,8 @@ fn show() {
404404
.version(::VersionBuilder::new("0.5.0"))
405405
.version(::VersionBuilder::new("0.5.1"))
406406
.keyword("kw1")
407+
.downloads(20)
408+
.recent_downloads(10)
407409
.expect_build(&conn);
408410
}
409411

@@ -415,6 +417,7 @@ fn show() {
415417
assert_eq!(json.krate.homepage, krate.homepage);
416418
assert_eq!(json.krate.documentation, krate.documentation);
417419
assert_eq!(json.krate.keywords, Some(vec!["kw1".into()]));
420+
assert_eq!(json.krate.recent_downloads, Some(10));
418421
let versions = json.krate.versions.as_ref().unwrap();
419422
assert_eq!(versions.len(), 3);
420423
assert_eq!(json.versions.len(), 3);

0 commit comments

Comments
 (0)