diff --git a/app/assets/stylesheets/modules/stats.css b/app/assets/stylesheets/modules/stats.css index b2bdbd1fe2f..0dfda9fad31 100644 --- a/app/assets/stylesheets/modules/stats.css +++ b/app/assets/stylesheets/modules/stats.css @@ -47,7 +47,7 @@ .stat__count { font-size: 24px; } } -.stats__graph__heading { +.stats__heading { margin-bottom: 42px; font-weight: 600; font-size: 18px; @@ -205,3 +205,32 @@ @-moz-document url-prefix() { .stats__graph__gem__count { top: 8px; } } + +.stats__table { + width: 100%; + border-collapse: separate; + border-spacing: 30px 15px; + border-left: 3%; +} + +.stats__table__row { + height: 30px; + width: 100%; } + +.stats__table__column { + /* Size table columns to contents. */ + width: 1%; + white-space: nowrap; + + font-weight: 400; + text-align: right; + vertical-align: middle; } + + @media (max-width: 709px) { + .stats__table__column { + font-size: 13px; } } + @media (min-width: 710px) { + .stats__table__column { + font-size: 15px; } } + +.stats__table__column a { color: black; } diff --git a/app/controllers/stats_controller.rb b/app/controllers/stats_controller.rb index 912ee7afaa5..7d63ad54697 100644 --- a/app/controllers/stats_controller.rb +++ b/app/controllers/stats_controller.rb @@ -5,5 +5,6 @@ def index @number_of_downloads = GemDownload.total_count @most_downloaded = Rubygem.by_downloads.limit(10).includes(:gem_download).to_a @most_downloaded_count = @most_downloaded.first && @most_downloaded.first.gem_download.count + @recent_uploads = Version.recent_uploads(10) end end diff --git a/app/models/version.rb b/app/models/version.rb index fe6b248de01..5c9c82b7818 100644 --- a/app/models/version.rb +++ b/app/models/version.rb @@ -157,6 +157,13 @@ def self.just_updated(limit = 5) .limit(limit) end + def self.recent_uploads(limit) + joins(:rubygem) + .indexed + .by_created_at + .limit(limit) + end + def self.published(limit) indexed.by_built_at.limit(limit) end diff --git a/app/views/stats/index.html.erb b/app/views/stats/index.html.erb index 8ecb659f519..6a84d9abbe6 100644 --- a/app/views/stats/index.html.erb +++ b/app/views/stats/index.html.erb @@ -15,17 +15,39 @@ -

- <%= t('stats.index.all_time_most_downloaded') %> -

+
+

+ <%= t('stats.index.all_time_most_downloaded') %> +

-<% @most_downloaded.each do |gem| %> -
-

<%= link_to gem.name, rubygem_path(gem) %>

-
-
- <%= number_to_delimited gem.downloads %> + <% @most_downloaded.each do |gem| %> +
+

<%= link_to gem.name, rubygem_path(gem) %>

+
+
+ <%= number_to_delimited gem.downloads %> +
-
-<% end %> + <% end %> +
+ +
+

+ <%= t('stats.index.recent_uploads') %> +

+ + + <% @recent_uploads.each do |version| %> + + + + + + <% end %> +
+ <%= link_to version.rubygem.name, rubygem_path(version.rubygem) %> + + <%= link_to version.number, rubygem_version_path(version.rubygem, version.slug) %> +
+
diff --git a/config/locales/en.yml b/config/locales/en.yml index ab6ecb08b92..c0bb6f35a9c 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -159,6 +159,7 @@ en: total_gems: Total gems total_users: Total users all_time_most_downloaded: All Time Most Downloaded + recent_uploads: Recent Uploads users: new: diff --git a/test/functional/stats_controller_test.rb b/test/functional/stats_controller_test.rb index 9fa319727fa..6bfb4bbfa49 100644 --- a/test/functional/stats_controller_test.rb +++ b/test/functional/stats_controller_test.rb @@ -7,9 +7,11 @@ class StatsControllerTest < ActionController::TestCase @number_of_users = 101 @number_of_downloads = 42 rails_cinco = create(:rubygem, name: 'rails_cinco', number: 1) + @recent_uploads = [create(:version)] Rubygem.stubs(:total_count).returns @number_of_gems User.stubs(:count).returns @number_of_users + Version.stubs(:recent_uploads).returns @recent_uploads create(:gem_download, count: @number_of_downloads) rails_cinco.gem_download.update(count: 1) @@ -39,6 +41,7 @@ class StatsControllerTest < ActionController::TestCase should "load up the number of gems, users, and downloads" do assert_received(User, :count) assert_received(Rubygem, :total_count) + assert_received(Version, :recent_uploads) { |subject| subject.with(10) } end end diff --git a/test/unit/version_test.rb b/test/unit/version_test.rb index d7bc13b3f6c..08e1f83b602 100644 --- a/test/unit/version_test.rb +++ b/test/unit/version_test.rb @@ -133,6 +133,27 @@ class VersionTest < ActiveSupport::TestCase end end + context "recent uploads" do + setup do + @gem_1 = create(:rubygem) + @second = create(:version, rubygem: @gem_1, created_at: 1.day.ago) + @fourth = create(:version, rubygem: @gem_1, created_at: 4.days.ago) + + @gem_2 = create(:rubygem) + @first = create(:version, rubygem: @gem_2, created_at: 1.minute.ago) + @not_included_fifth = create(:version, rubygem: @gem_2, created_at: 10.days.ago) + + @gem_3 = create(:rubygem) + @third = create(:version, rubygem: @gem_3, created_at: 3.days.ago) + end + + should "include specified number of versions ordered by created at" do + versions = Version.recent_uploads(4) + assert_equal 4, versions.size + assert_equal [@first, @second, @third, @fourth], versions + end + end + context "with a rubygem" do setup do @rubygem = create(:rubygem)