From 0558f6d63fea46cd03eabc3c4269a0b1c58489c5 Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Tue, 18 Jul 2023 08:16:12 -0300 Subject: [PATCH 01/23] Implement new repository card component Co-authored-by: Guilherme Nunes Lopes --- app/assets/images/issues.svg | 11 +++++++++ app/assets/images/prs.svg | 3 +++ app/assets/images/stars.svg | 3 +++ app/decorators/repository_decorator.rb | 4 ++-- app/views/repositories/_card.html.erb | 33 ++++++++++++++++++++++++++ app/views/repositories/index.html.erb | 12 +++------- config/locales/pt-BR/pt-BR.yml | 10 +++++--- 7 files changed, 62 insertions(+), 14 deletions(-) create mode 100644 app/assets/images/issues.svg create mode 100644 app/assets/images/prs.svg create mode 100644 app/assets/images/stars.svg create mode 100644 app/views/repositories/_card.html.erb diff --git a/app/assets/images/issues.svg b/app/assets/images/issues.svg new file mode 100644 index 000000000..cd253c01d --- /dev/null +++ b/app/assets/images/issues.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/app/assets/images/prs.svg b/app/assets/images/prs.svg new file mode 100644 index 000000000..86c6db8be --- /dev/null +++ b/app/assets/images/prs.svg @@ -0,0 +1,3 @@ + + + diff --git a/app/assets/images/stars.svg b/app/assets/images/stars.svg new file mode 100644 index 000000000..f9029b92b --- /dev/null +++ b/app/assets/images/stars.svg @@ -0,0 +1,3 @@ + + + diff --git a/app/decorators/repository_decorator.rb b/app/decorators/repository_decorator.rb index 5c1f22116..81b40fb79 100644 --- a/app/decorators/repository_decorator.rb +++ b/app/decorators/repository_decorator.rb @@ -8,9 +8,9 @@ def self.collection_decorator_class end def languages - return '' unless language + return [] unless language - language.split(',').first(3).to_sentence + language.split(', ').map(&:strip) end def name diff --git a/app/views/repositories/_card.html.erb b/app/views/repositories/_card.html.erb new file mode 100644 index 000000000..cb0feae40 --- /dev/null +++ b/app/views/repositories/_card.html.erb @@ -0,0 +1,33 @@ +
+
+ <%= link_to repository.link, target: "_blank" do %> +

<%= repository.link %>

+ <% end %> +
+
"> + <%= inline_svg_tag 'issues.svg', class: 'h-4 w-4' %> + 40 +
+
"> + <%= inline_svg_tag 'prs.svg', class: 'h-4 w-4' %> + 1K +
+
"> + <%= inline_svg_tag 'stars.svg', class: 'h-4 w-4' %> + 374 +
+
+
+
+
+ <% repository.languages.each do |language| %> + + <%= language %> + + <% end %> +
+ + <%= t("repositories.index.highlight") %> + +
+
diff --git a/app/views/repositories/index.html.erb b/app/views/repositories/index.html.erb index e64989e2a..545c5e8d3 100644 --- a/app/views/repositories/index.html.erb +++ b/app/views/repositories/index.html.erb @@ -15,15 +15,9 @@ <% end %> -
- <% @repositories.each do |repository| %> - <%= link_to repository.link, class: "list-group-item list-group-item-action", target: "_blank" do %> - - <%= repository.link %> - <%= repository.languages %> - <% end %> - <% end %> -
+ <% @repositories.each do |repository| %> + <%= render 'card', repository: repository %> + <% end %> <%= paginate @repositories %> diff --git a/config/locales/pt-BR/pt-BR.yml b/config/locales/pt-BR/pt-BR.yml index d0e7efb8a..edff0f678 100644 --- a/config/locales/pt-BR/pt-BR.yml +++ b/config/locales/pt-BR/pt-BR.yml @@ -92,6 +92,10 @@ pt-BR: repositories: index: open_source_repositories: "Projetos Open Source" + highlight: 'Recomendado' + issues: 'Issues' + pull_requests: 'Pull Requests' + stars: 'Stars' not_started: 'Não iniciado' finished: 'Finalizado' admin: @@ -203,12 +207,12 @@ pt-BR: details: "Detalhes" allocation: access_allocation: Acessar Alocação - current_allocation: Alocação Atual + current_allocation: Alocação Atual not_allocated: Não Alocado allocations: Alocações project_name: Nome do Projeto - start_at: Início - end_at: Término + start_at: Início + end_at: Término in_progress: Em Progresso punches_filter: filter: Filtro From dc96493bf43f8f7630b182bb345652ebe39a4640 Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Fri, 28 Jul 2023 17:03:00 -0300 Subject: [PATCH 02/23] feat: implement update_repository_stats method Co-authored-by: Gabriel Quaresma Co-authored-by: Guilherme Nunes Lopes --- app/services/github/repositories/sync.rb | 38 ++++++++++++++---- .../services/github/repositories/sync_spec.rb | 40 +++++++++++++++++-- 2 files changed, 67 insertions(+), 11 deletions(-) diff --git a/app/services/github/repositories/sync.rb b/app/services/github/repositories/sync.rb index 7302bffde..0889c19e9 100644 --- a/app/services/github/repositories/sync.rb +++ b/app/services/github/repositories/sync.rb @@ -13,15 +13,10 @@ def call Rails.logger.info("[GH] -- Repositories: #{repositories.count}") repositories.map do |repository| - repository_owner, repository_name = repository.link.split('/')[-2..-1] + update_repository_languages(repository) + update_repository_stats(repository) - request = client.repos.languages(repository_owner, repository_name) - - if request.success? - languages = request.body.keys[0..MAX_LANGUAGES_NUMBER-1].join(', ') - - repository.update(language: languages) - end + repository end.compact end @@ -32,6 +27,33 @@ def call def repositories @repositories ||= Repository.all end + + def repository_owner_and_name(repository) + repository.link.split('/')[-2..-1] + end + + def update_repository_languages(repository) + repository_owner, repository_name = repository_owner_and_name(repository) + request = client.repos.languages(repository_owner, repository_name) + + if request.success? + languages = request.body.keys[0..MAX_LANGUAGES_NUMBER-1].join(', ') + + repository.update(language: languages) + end + end + + def update_repository_stats(repository) + repository_owner, repository_name = repository_owner_and_name(repository) + request = client.repos.get(repository_owner, repository_name) + + if request.success? + repository.update( + issues: request.body['open_issues_count'], + stars: request.body['stargazers_count'] + ) + end + end end end end diff --git a/spec/services/github/repositories/sync_spec.rb b/spec/services/github/repositories/sync_spec.rb index b98f1c4cf..942e7e20f 100644 --- a/spec/services/github/repositories/sync_spec.rb +++ b/spec/services/github/repositories/sync_spec.rb @@ -10,15 +10,49 @@ end describe '#call' do - subject(:call) { described_class.new(client: client).call } + subject(:call) { described_class.new(client:).call } let(:client) { instance_double('Github') } context 'when there are no repositories in database' do - it { is_expected.to be_empty } end - # TODO: Add specs to cover all use cases + context 'when there are repositories in database' do + let!(:repository) { create(:repository).decorate } + let(:client) do + class_double( + 'Github', + repos: double( + languages: double( + success?: true, + body: { ruby: 'ruby' } + ), + get: double( + success?: true, + body: { 'open_issues_count' => 3, 'stargazers_count' => 4 } + ) + ) + ) + end + + it 'returns updated repositories languages' do + call.each do |repository| + expect(repository.language).to eq('ruby') + end + end + + it 'returns updated repositories issues' do + call.each do |repository| + expect(repository.issues).to eq(3) + end + end + + it 'returns updated repositories stars' do + call.each do |repository| + expect(repository.stars).to eq(4) + end + end + end end end From 7eb34b7d8dcdf7088dd2b986d6597763340227cf Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Fri, 28 Jul 2023 17:04:24 -0300 Subject: [PATCH 03/23] feat: rename task Co-authored-by: Gabriel Quaresma Co-authored-by: Guilherme Nunes Lopes --- lib/tasks/github.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/github.rake b/lib/tasks/github.rake index 380ab70d5..a67e03f49 100644 --- a/lib/tasks/github.rake +++ b/lib/tasks/github.rake @@ -1,6 +1,6 @@ namespace :github do desc "Sync repository languages" - task sync_repository_languages: :environment do + task sync_repository_languages_and_stats: :environment do Rails.logger = Logger.new(STDOUT) client = Github.new(headers: {"Authorization" => "token #{ENV['GITHUB_OAUTH_TOKEN']}"}) From ba9b5719d703e6d83c871de87ffe3fdaf0bce489 Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Fri, 28 Jul 2023 17:06:41 -0300 Subject: [PATCH 04/23] feat: add issues and stars into repositories table Co-authored-by: Gabriel Quaresma Co-authored-by: Guilherme Nunes Lopes --- .../20230728175727_add_issues_and_stars_to_repositories.rb | 6 ++++++ db/schema.rb | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20230728175727_add_issues_and_stars_to_repositories.rb diff --git a/db/migrate/20230728175727_add_issues_and_stars_to_repositories.rb b/db/migrate/20230728175727_add_issues_and_stars_to_repositories.rb new file mode 100644 index 000000000..add7ccf45 --- /dev/null +++ b/db/migrate/20230728175727_add_issues_and_stars_to_repositories.rb @@ -0,0 +1,6 @@ +class AddIssuesAndStarsToRepositories < ActiveRecord::Migration[7.0] + def change + add_column :repositories, :issues, :integer + add_column :repositories, :stars, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 7704de159..3f39fbca2 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_07_24_160449) do +ActiveRecord::Schema[7.0].define(version: 2023_07_28_175727) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -187,6 +187,8 @@ t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false t.string "language" + t.integer "issues" + t.integer "stars" t.boolean "highlight", default: false t.text "description" end From 5c4c176c75aaa419a2236ecd7c2fb369bd307e16 Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Fri, 28 Jul 2023 17:07:05 -0300 Subject: [PATCH 05/23] feat: update RepositoryDecorator Co-authored-by: Gabriel Quaresma Co-authored-by: Guilherme Nunes Lopes --- app/decorators/repository_decorator.rb | 20 +++++++++++++++++++- spec/decorators/repository_decorator_spec.rb | 6 +++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/decorators/repository_decorator.rb b/app/decorators/repository_decorator.rb index 81b40fb79..6b8b4bba5 100644 --- a/app/decorators/repository_decorator.rb +++ b/app/decorators/repository_decorator.rb @@ -10,10 +10,28 @@ def self.collection_decorator_class def languages return [] unless language - language.split(', ').map(&:strip) + language.split(', ').map(&:strip).first(3) + end + + def issues_formatted + format_number(model.issues) + end + + def stars_formatted + format_number(model.stars) end def name link[/[\w_-]+$/] end + + private + + def format_number(number) + if number >= 1000 + "#{(number/1000).round(1)}K" + else + number + end + end end diff --git a/spec/decorators/repository_decorator_spec.rb b/spec/decorators/repository_decorator_spec.rb index d39171927..207c89459 100644 --- a/spec/decorators/repository_decorator_spec.rb +++ b/spec/decorators/repository_decorator_spec.rb @@ -6,7 +6,7 @@ let(:repository) { create(:repository, language: 'Javascript, Docker, Ruby, HTML, CSS').decorate } it 'returns only the first three' do - expect(repository.languages).to eq('Javascript, Docker e Ruby') + expect(repository.languages).to eq(['Javascript', 'Docker', 'Ruby']) end end @@ -14,7 +14,7 @@ let(:repository) { create(:repository, language: 'Javascript, Docker').decorate } it 'returns available languages' do - expect(repository.languages).to eq('Javascript e Docker') + expect(repository.languages).to eq(['Javascript', 'Docker']) end end @@ -22,7 +22,7 @@ let(:repository) { create(:repository, language: nil).decorate } it 'returns empty string' do - expect(repository.languages).to eq '' + expect(repository.languages).to be_empty end end end From 30cfbb9d003ddc133bc8ecf51d280fb6526e2d4b Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Fri, 28 Jul 2023 17:07:34 -0300 Subject: [PATCH 06/23] feat: update app/views/repositories/_card.html.erb Co-authored-by: Gabriel Quaresma Co-authored-by: Guilherme Nunes Lopes --- app/views/repositories/_card.html.erb | 39 +++++++++++++++------------ spec/features/repositories_spec.rb | 25 +++++++++++------ 2 files changed, 39 insertions(+), 25 deletions(-) diff --git a/app/views/repositories/_card.html.erb b/app/views/repositories/_card.html.erb index cb0feae40..d96c7dd43 100644 --- a/app/views/repositories/_card.html.erb +++ b/app/views/repositories/_card.html.erb @@ -1,33 +1,38 @@ -
-
- <%= link_to repository.link, target: "_blank" do %> -

<%= repository.link %>

- <% end %> +
+
+
+ <%= link_to repository.link, target: "_blank" do %> +

<%= repository.link %>

+ <% end %> + <%= simple_format repository.description %> +
-
"> + <% if repository.issues.present? %> +
"> <%= inline_svg_tag 'issues.svg', class: 'h-4 w-4' %> - 40 + <%= repository.issues_formatted %>
-
"> - <%= inline_svg_tag 'prs.svg', class: 'h-4 w-4' %> - 1K -
-
"> + <% end %> + <% if repository.stars.present? %> +
"> <%= inline_svg_tag 'stars.svg', class: 'h-4 w-4' %> - 374 + <%= repository.stars_formatted %>
+ <%end%>
<% repository.languages.each do |language| %> - + <%= language %> <% end %>
- - <%= t("repositories.index.highlight") %> - + <% if repository.highlight.present? %> + + <%= t("repositories.index.highlight") %> + + <%end%>
diff --git a/spec/features/repositories_spec.rb b/spec/features/repositories_spec.rb index 9a094cf6d..fe4af0607 100644 --- a/spec/features/repositories_spec.rb +++ b/spec/features/repositories_spec.rb @@ -16,7 +16,7 @@ visit repositories_path - expect(page).to have_css('.list-group .list-group-item', :count => 25) + expect(page).to have_css('#repository-card', :count => 25) end it 'have all links for repositories' do @@ -25,8 +25,13 @@ end it 'have all languages for repositories' do - expect(page).to have_text(repository.languages) & - have_text(second_repository.languages) + repository.languages.each do |language| + expect(page).to have_css('#language-tag', :text => language) + end + + second_repository.languages.each do |language| + expect(page).to have_css('#language-tag', :text => language) + end end it 'has all descriptions for repositories' do @@ -47,8 +52,13 @@ fill_in 'search-input-field', with: 'javascript' find('#filter-button').click - expect(page).to have_text(repository.languages) - expect(page).not_to have_text(second_repository.languages) + repository.languages.each do |language| + expect(page).to have_css('#language-tag', :text => language) + end + + second_repository.languages.each do |language| + expect(page).not_to have_css('#language-tag', :text => language) + end end it 'not have any repository with Go' do @@ -63,9 +73,8 @@ fill_in 'search-input-field', with: 'python' find('#filter-button').click - expect(page).to have_text(repository.languages) & - have_text(second_repository.languages) - expect(page).to have_css('.list-group .list-group-item', :count => 2) + expect(page).to have_text('python') + expect(page).to have_css('#repository-card', :count => 2) end end end From f6a3c721055c542cc7a8cd2b2961b047fcc1f00e Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Mon, 31 Jul 2023 09:30:11 -0300 Subject: [PATCH 07/23] chore: remove unused locale key --- config/locales/pt-BR/pt-BR.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/config/locales/pt-BR/pt-BR.yml b/config/locales/pt-BR/pt-BR.yml index e7fcd7a78..e673be5d7 100644 --- a/config/locales/pt-BR/pt-BR.yml +++ b/config/locales/pt-BR/pt-BR.yml @@ -99,7 +99,6 @@ pt-BR: open_source_repositories: "Projetos Open Source" highlight: 'Recomendado' issues: 'Issues' - pull_requests: 'Pull Requests' stars: 'Stars' not_started: 'Não iniciado' finished: 'Finalizado' From 1f4c532ff721ab09fc79d4c6773bcb538e7879bd Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Mon, 31 Jul 2023 11:17:09 -0300 Subject: [PATCH 08/23] feat: code review --- app/services/github/repositories/sync.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/services/github/repositories/sync.rb b/app/services/github/repositories/sync.rb index 0889c19e9..7a469cf82 100644 --- a/app/services/github/repositories/sync.rb +++ b/app/services/github/repositories/sync.rb @@ -28,27 +28,27 @@ def repositories @repositories ||= Repository.all end - def repository_owner_and_name(repository) - repository.link.split('/')[-2..-1] + def repository_owner_and_name(repository_link) + repository_link.split('/')[-2..-1] end def update_repository_languages(repository) - repository_owner, repository_name = repository_owner_and_name(repository) + repository_owner, repository_name = repository_owner_and_name(repository.link) request = client.repos.languages(repository_owner, repository_name) if request.success? languages = request.body.keys[0..MAX_LANGUAGES_NUMBER-1].join(', ') - repository.update(language: languages) + repository.update!(language: languages) end end def update_repository_stats(repository) - repository_owner, repository_name = repository_owner_and_name(repository) + repository_owner, repository_name = repository_owner_and_name(repository.link) request = client.repos.get(repository_owner, repository_name) if request.success? - repository.update( + repository.update!( issues: request.body['open_issues_count'], stars: request.body['stargazers_count'] ) From 03ed32f96c5cf524ef0876d1bfe45d2fde8b8a52 Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Tue, 1 Aug 2023 17:45:47 -0300 Subject: [PATCH 09/23] feat: update new icons --- app/assets/images/issues.svg | 8 ++++---- app/assets/images/prs.svg | 3 --- app/assets/images/stars.svg | 4 ++-- app/views/repositories/_card.html.erb | 2 +- 4 files changed, 7 insertions(+), 10 deletions(-) delete mode 100644 app/assets/images/prs.svg diff --git a/app/assets/images/issues.svg b/app/assets/images/issues.svg index cd253c01d..5484ccd72 100644 --- a/app/assets/images/issues.svg +++ b/app/assets/images/issues.svg @@ -1,10 +1,10 @@ - - - + + + - + diff --git a/app/assets/images/prs.svg b/app/assets/images/prs.svg deleted file mode 100644 index 86c6db8be..000000000 --- a/app/assets/images/prs.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/app/assets/images/stars.svg b/app/assets/images/stars.svg index f9029b92b..a65a5eb07 100644 --- a/app/assets/images/stars.svg +++ b/app/assets/images/stars.svg @@ -1,3 +1,3 @@ - - + + diff --git a/app/views/repositories/_card.html.erb b/app/views/repositories/_card.html.erb index d96c7dd43..dca3646b7 100644 --- a/app/views/repositories/_card.html.erb +++ b/app/views/repositories/_card.html.erb @@ -15,7 +15,7 @@ <% end %> <% if repository.stars.present? %>
"> - <%= inline_svg_tag 'stars.svg', class: 'h-4 w-4' %> + <%= inline_svg_tag 'stars.svg', class: 'h-5 w-5' %> <%= repository.stars_formatted %>
<%end%> From 49a3f3e06770ba94a9be5709561d412118fb17b0 Mon Sep 17 00:00:00 2001 From: Guilherme-NL Date: Thu, 3 Aug 2023 14:06:26 -0300 Subject: [PATCH 10/23] resolve conflicts --- app/views/repositories/_card.html.erb | 4 +- spec/features/repositories_spec.rb | 80 +++++++++++++++++++++++++-- 2 files changed, 76 insertions(+), 8 deletions(-) diff --git a/app/views/repositories/_card.html.erb b/app/views/repositories/_card.html.erb index dca3646b7..1077ae8db 100644 --- a/app/views/repositories/_card.html.erb +++ b/app/views/repositories/_card.html.erb @@ -10,13 +10,13 @@ <% if repository.issues.present? %>
"> <%= inline_svg_tag 'issues.svg', class: 'h-4 w-4' %> - <%= repository.issues_formatted %> + <%= repository.issues_formatted %>
<% end %> <% if repository.stars.present? %>
"> <%= inline_svg_tag 'stars.svg', class: 'h-5 w-5' %> - <%= repository.stars_formatted %> + <%= repository.stars_formatted %>
<%end%>
diff --git a/spec/features/repositories_spec.rb b/spec/features/repositories_spec.rb index fe4af0607..cd12bd093 100644 --- a/spec/features/repositories_spec.rb +++ b/spec/features/repositories_spec.rb @@ -16,7 +16,7 @@ visit repositories_path - expect(page).to have_css('#repository-card', :count => 25) + expect(page).to have_css('#repository-card', count: 25) end it 'have all links for repositories' do @@ -26,11 +26,11 @@ it 'have all languages for repositories' do repository.languages.each do |language| - expect(page).to have_css('#language-tag', :text => language) + expect(page).to have_css('#language-tag', text: language) end second_repository.languages.each do |language| - expect(page).to have_css('#language-tag', :text => language) + expect(page).to have_css('#language-tag', text: language) end end @@ -53,11 +53,11 @@ find('#filter-button').click repository.languages.each do |language| - expect(page).to have_css('#language-tag', :text => language) + expect(page).to have_css('#language-tag', text: language) end second_repository.languages.each do |language| - expect(page).not_to have_css('#language-tag', :text => language) + expect(page).not_to have_css('#language-tag', text: language) end end @@ -74,7 +74,75 @@ find('#filter-button').click expect(page).to have_text('python') - expect(page).to have_css('#repository-card', :count => 2) + expect(page).to have_css('#repository-card', count: 2) + end + end + + context 'when the repository has no issues and stars' do + let!(:repository) { create(:repository).decorate } + + before do + visit repositories_path + end + + it 'have all issues for repositories' do + expect(page).not_to have_css('#issues-tag') + end + + it 'have all stars for repositories' do + expect(page).not_to have_css('#stars-tag') + end + end + + context 'when the repository has issues' do + context 'when issues are greater than 1000' do + let!(:repository) { create(:repository, issues: '5455').decorate } + + before do + visit repositories_path + end + + it 'returns the number of issues abbreviated to thousands' do + expect(page).to have_css('#issues-tag', text: '5K') + end + end + + context 'when issues are less than 1000' do + let!(:repository) { create(:repository, issues: '855').decorate } + + before do + visit repositories_path + end + + it 'returns the number of issues without abbreviations' do + expect(page).to have_css('#issues-tag', text: repository.issues) + end + end + end + + context 'when the repository has stars' do + context 'when stars are greater than 1000' do + let!(:repository) { create(:repository, stars: '1500').decorate } + + before do + visit repositories_path + end + + it 'returns the number of stars abbreviated to thousands' do + expect(page).to have_css('#stars-tag', text: '1K') + end + end + + context 'when stars are less than 1000' do + let!(:repository) { create(:repository, stars: '643').decorate } + + before do + visit repositories_path + end + + it 'returns the number of stars without abbreviations' do + expect(page).to have_css('#stars-tag', text: repository.stars) + end end end end From 91724a8bf9b93df39ada89a6aeb120e58d6605a3 Mon Sep 17 00:00:00 2001 From: Guilherme-NL Date: Thu, 3 Aug 2023 16:28:02 -0300 Subject: [PATCH 11/23] refactor: create repository with issues and stars as an interger --- spec/features/repositories_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/features/repositories_spec.rb b/spec/features/repositories_spec.rb index cd12bd093..87be8b202 100644 --- a/spec/features/repositories_spec.rb +++ b/spec/features/repositories_spec.rb @@ -96,7 +96,7 @@ context 'when the repository has issues' do context 'when issues are greater than 1000' do - let!(:repository) { create(:repository, issues: '5455').decorate } + let!(:repository) { create(:repository, issues: 5455).decorate } before do visit repositories_path @@ -108,7 +108,7 @@ end context 'when issues are less than 1000' do - let!(:repository) { create(:repository, issues: '855').decorate } + let!(:repository) { create(:repository, issues: 855).decorate } before do visit repositories_path @@ -122,7 +122,7 @@ context 'when the repository has stars' do context 'when stars are greater than 1000' do - let!(:repository) { create(:repository, stars: '1500').decorate } + let!(:repository) { create(:repository, stars: 1500).decorate } before do visit repositories_path @@ -134,7 +134,7 @@ end context 'when stars are less than 1000' do - let!(:repository) { create(:repository, stars: '643').decorate } + let!(:repository) { create(:repository, stars: 643).decorate } before do visit repositories_path From ecc98fcafd8b6bc3878d34f96237806f04ca8842 Mon Sep 17 00:00:00 2001 From: Guilherme-NL Date: Thu, 3 Aug 2023 17:23:09 -0300 Subject: [PATCH 12/23] refactor: move before bloc to a upper context, and define issues and stars value inside each specific context --- spec/features/repositories_spec.rb | 36 ++++++++++++------------------ 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/spec/features/repositories_spec.rb b/spec/features/repositories_spec.rb index 87be8b202..aa10138ce 100644 --- a/spec/features/repositories_spec.rb +++ b/spec/features/repositories_spec.rb @@ -95,25 +95,21 @@ end context 'when the repository has issues' do - context 'when issues are greater than 1000' do - let!(:repository) { create(:repository, issues: 5455).decorate } + let!(:repository) { create(:repository, issues:).decorate } - before do - visit repositories_path - end + before do + visit repositories_path + end + context 'when issues are greater than 1000' do + let(:issues) { 5566 } it 'returns the number of issues abbreviated to thousands' do expect(page).to have_css('#issues-tag', text: '5K') end end context 'when issues are less than 1000' do - let!(:repository) { create(:repository, issues: 855).decorate } - - before do - visit repositories_path - end - + let(:issues) { 885 } it 'returns the number of issues without abbreviations' do expect(page).to have_css('#issues-tag', text: repository.issues) end @@ -121,25 +117,21 @@ end context 'when the repository has stars' do - context 'when stars are greater than 1000' do - let!(:repository) { create(:repository, stars: 1500).decorate } + let!(:repository) { create(:repository, stars:).decorate } - before do - visit repositories_path - end + before do + visit repositories_path + end + context 'when stars are greater than 1000' do + let(:stars) { 1500 } it 'returns the number of stars abbreviated to thousands' do expect(page).to have_css('#stars-tag', text: '1K') end end context 'when stars are less than 1000' do - let!(:repository) { create(:repository, stars: 643).decorate } - - before do - visit repositories_path - end - + let(:stars) { 644 } it 'returns the number of stars without abbreviations' do expect(page).to have_css('#stars-tag', text: repository.stars) end From 0815ce48ecf3f94949ff71ca77bef6bf42c57b41 Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Fri, 4 Aug 2023 14:47:39 -0300 Subject: [PATCH 13/23] refactor: code review --- app/decorators/repository_decorator.rb | 2 +- app/views/repositories/_card.html.erb | 2 +- .../services/github/repositories/sync_spec.rb | 21 +++++++++---------- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/app/decorators/repository_decorator.rb b/app/decorators/repository_decorator.rb index 6b8b4bba5..789dd8bf6 100644 --- a/app/decorators/repository_decorator.rb +++ b/app/decorators/repository_decorator.rb @@ -10,7 +10,7 @@ def self.collection_decorator_class def languages return [] unless language - language.split(', ').map(&:strip).first(3) + language.split(', ').first(3).map(&:strip) end def issues_formatted diff --git a/app/views/repositories/_card.html.erb b/app/views/repositories/_card.html.erb index 1077ae8db..e12a0174a 100644 --- a/app/views/repositories/_card.html.erb +++ b/app/views/repositories/_card.html.erb @@ -29,7 +29,7 @@ <% end %>
- <% if repository.highlight.present? %> + <% if repository.highlight? %> <%= t("repositories.index.highlight") %> diff --git a/spec/services/github/repositories/sync_spec.rb b/spec/services/github/repositories/sync_spec.rb index 942e7e20f..ff273729d 100644 --- a/spec/services/github/repositories/sync_spec.rb +++ b/spec/services/github/repositories/sync_spec.rb @@ -10,12 +10,14 @@ end describe '#call' do - subject(:call) { described_class.new(client:).call } + subject(:github_repositories_sync) { described_class.new(client:) } let(:client) { instance_double('Github') } context 'when there are no repositories in database' do - it { is_expected.to be_empty } + it 'is expected to be empty' do + expect(github_repositories_sync.call).to be_empty + end end context 'when there are repositories in database' do @@ -37,21 +39,18 @@ end it 'returns updated repositories languages' do - call.each do |repository| - expect(repository.language).to eq('ruby') - end + repository, = github_repositories_sync.call + expect(repository.language).to eq('ruby') end it 'returns updated repositories issues' do - call.each do |repository| - expect(repository.issues).to eq(3) - end + repository, = github_repositories_sync.call + expect(repository.issues).to eq(3) end it 'returns updated repositories stars' do - call.each do |repository| - expect(repository.stars).to eq(4) - end + repository, = github_repositories_sync.call + expect(repository.stars).to eq(4) end end end From 79f8cce0432ca4a279dafcc0cf6ce4d3b3dee098 Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Fri, 4 Aug 2023 15:14:08 -0300 Subject: [PATCH 14/23] refactor: use render collection --- .../repositories/{_card.html.erb => _repository.html.erb} | 0 app/views/repositories/index.html.erb | 5 +---- 2 files changed, 1 insertion(+), 4 deletions(-) rename app/views/repositories/{_card.html.erb => _repository.html.erb} (100%) diff --git a/app/views/repositories/_card.html.erb b/app/views/repositories/_repository.html.erb similarity index 100% rename from app/views/repositories/_card.html.erb rename to app/views/repositories/_repository.html.erb diff --git a/app/views/repositories/index.html.erb b/app/views/repositories/index.html.erb index 545c5e8d3..1d746cf02 100644 --- a/app/views/repositories/index.html.erb +++ b/app/views/repositories/index.html.erb @@ -15,9 +15,6 @@ <% end %>
- <% @repositories.each do |repository| %> - <%= render 'card', repository: repository %> - <% end %> - + <%= render @repositories %> <%= paginate @repositories %>
From ef99de806a793fb571bc3cc19e460f0e10ea117f Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Fri, 11 Aug 2023 08:01:01 -0300 Subject: [PATCH 15/23] refactor: app/services/github/repositories/sync.rb + tests --- app/services/github/repositories/sync.rb | 40 +++++++++---------- .../services/github/repositories/sync_spec.rb | 29 +++++++++++++- 2 files changed, 47 insertions(+), 22 deletions(-) diff --git a/app/services/github/repositories/sync.rb b/app/services/github/repositories/sync.rb index 7a469cf82..71ec87391 100644 --- a/app/services/github/repositories/sync.rb +++ b/app/services/github/repositories/sync.rb @@ -13,8 +13,10 @@ def call Rails.logger.info("[GH] -- Repositories: #{repositories.count}") repositories.map do |repository| - update_repository_languages(repository) - update_repository_stats(repository) + languages = fetch_repository_languages(repository.link) + stats = fetch_repository_stats(repository.link) + + repository.update!(language: languages, issues: stats[:issues], stars: stats[:stars]) repository end.compact @@ -28,31 +30,29 @@ def repositories @repositories ||= Repository.all end - def repository_owner_and_name(repository_link) - repository_link.split('/')[-2..-1] - end - - def update_repository_languages(repository) - repository_owner, repository_name = repository_owner_and_name(repository.link) + def fetch_repository_languages(repository_link) + repository_owner, repository_name = repository_owner_and_name(repository_link) request = client.repos.languages(repository_owner, repository_name) - if request.success? - languages = request.body.keys[0..MAX_LANGUAGES_NUMBER-1].join(', ') + return nil if !request.success? - repository.update!(language: languages) - end + request.body.keys[0..MAX_LANGUAGES_NUMBER-1].join(', ') end - def update_repository_stats(repository) - repository_owner, repository_name = repository_owner_and_name(repository.link) + def fetch_repository_stats(repository_link) + repository_owner, repository_name = repository_owner_and_name(repository_link) request = client.repos.get(repository_owner, repository_name) - if request.success? - repository.update!( - issues: request.body['open_issues_count'], - stars: request.body['stargazers_count'] - ) - end + return {} if !request.success? + + { + issues: request.body['open_issues_count'], + stars: request.body['stargazers_count'] + } + end + + def repository_owner_and_name(repository_link) + repository_link.split('/')[-2..-1] end end end diff --git a/spec/services/github/repositories/sync_spec.rb b/spec/services/github/repositories/sync_spec.rb index ff273729d..9e91d0194 100644 --- a/spec/services/github/repositories/sync_spec.rb +++ b/spec/services/github/repositories/sync_spec.rb @@ -22,16 +22,18 @@ context 'when there are repositories in database' do let!(:repository) { create(:repository).decorate } + let(:github_languages_success) { true } + let(:github_get_success) { true } let(:client) do class_double( 'Github', repos: double( languages: double( - success?: true, + success?: github_languages_success, body: { ruby: 'ruby' } ), get: double( - success?: true, + success?: github_get_success, body: { 'open_issues_count' => 3, 'stargazers_count' => 4 } ) ) @@ -52,6 +54,29 @@ repository, = github_repositories_sync.call expect(repository.stars).to eq(4) end + + context 'when github languages API endpoint is not successful' do + let(:github_languages_success) { false } + + it 'returns repositories languages as nil' do + repository, = github_repositories_sync.call + expect(repository.language).to be_nil + end + end + + context 'when github get API endpoint is not successful' do + let(:github_get_success) { false } + + it 'returns repositories issues as nil' do + repository, = github_repositories_sync.call + expect(repository.issues).to be_nil + end + + it 'returns repositories stars as nil' do + repository, = github_repositories_sync.call + expect(repository.stars).to be_nil + end + end end end end From 8f3fa1fff3f26489ddbf792f28a1a5b94da252b3 Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Fri, 11 Aug 2023 08:03:31 -0300 Subject: [PATCH 16/23] style: rubocop --- app/services/github/repositories/sync.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/services/github/repositories/sync.rb b/app/services/github/repositories/sync.rb index 71ec87391..caf03a911 100644 --- a/app/services/github/repositories/sync.rb +++ b/app/services/github/repositories/sync.rb @@ -34,16 +34,16 @@ def fetch_repository_languages(repository_link) repository_owner, repository_name = repository_owner_and_name(repository_link) request = client.repos.languages(repository_owner, repository_name) - return nil if !request.success? + return nil unless request.success? - request.body.keys[0..MAX_LANGUAGES_NUMBER-1].join(', ') + request.body.keys[0..MAX_LANGUAGES_NUMBER - 1].join(', ') end def fetch_repository_stats(repository_link) repository_owner, repository_name = repository_owner_and_name(repository_link) request = client.repos.get(repository_owner, repository_name) - return {} if !request.success? + return {} unless request.success? { issues: request.body['open_issues_count'], @@ -52,7 +52,7 @@ def fetch_repository_stats(repository_link) end def repository_owner_and_name(repository_link) - repository_link.split('/')[-2..-1] + repository_link.split('/')[-2..] end end end From 9de6863db6b0db5ea63c3d6ad45c5d38d3587a12 Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Fri, 11 Aug 2023 10:07:27 -0300 Subject: [PATCH 17/23] refactor: app/decorators/repository_decorator.rb + tests --- app/decorators/repository_decorator.rb | 19 +-- ...27_add_issues_and_stars_to_repositories.rb | 4 +- spec/decorators/repository_decorator_spec.rb | 117 +++++++++++++++++- spec/features/repositories_spec.rb | 6 +- 4 files changed, 132 insertions(+), 14 deletions(-) diff --git a/app/decorators/repository_decorator.rb b/app/decorators/repository_decorator.rb index 789dd8bf6..c572c3421 100644 --- a/app/decorators/repository_decorator.rb +++ b/app/decorators/repository_decorator.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class RepositoryDecorator < ApplicationDecorator + include ActionView::Helpers::NumberHelper + delegate_all def self.collection_decorator_class @@ -13,6 +15,10 @@ def languages language.split(', ').first(3).map(&:strip) end + def name + link[/[\w_-]+$/] + end + def issues_formatted format_number(model.issues) end @@ -21,17 +27,12 @@ def stars_formatted format_number(model.stars) end - def name - link[/[\w_-]+$/] - end - private def format_number(number) - if number >= 1000 - "#{(number/1000).round(1)}K" - else - number - end + return '0' if number.nil? + return number.to_s if number <= 999 + + number_to_human(number, precision: 2, separator: '.', units: { thousand: "K", million: "M" }).gsub(/\s+/, '') end end diff --git a/db/migrate/20230728175727_add_issues_and_stars_to_repositories.rb b/db/migrate/20230728175727_add_issues_and_stars_to_repositories.rb index add7ccf45..1ccbd6f84 100644 --- a/db/migrate/20230728175727_add_issues_and_stars_to_repositories.rb +++ b/db/migrate/20230728175727_add_issues_and_stars_to_repositories.rb @@ -1,6 +1,6 @@ class AddIssuesAndStarsToRepositories < ActiveRecord::Migration[7.0] def change - add_column :repositories, :issues, :integer - add_column :repositories, :stars, :integer + add_column :repositories, :issues, :integer, default: 0 + add_column :repositories, :stars, :integer, default: 0 end end diff --git a/spec/decorators/repository_decorator_spec.rb b/spec/decorators/repository_decorator_spec.rb index 207c89459..b1f49fd8d 100644 --- a/spec/decorators/repository_decorator_spec.rb +++ b/spec/decorators/repository_decorator_spec.rb @@ -34,5 +34,120 @@ expect(repository.name).to eql "rails2-r_ruby" end end -end + describe '#issues_formatted' do + context 'when repository has less than 1_000 issues' do + let(:repository) { build(:repository, issues: 999).decorate } + + it 'returns 999' do + expect(repository.issues_formatted).to eql '999' + end + end + + context 'when repository has 1_000 issues' do + let(:repository) { build(:repository, issues: 1_000).decorate } + + it 'returns 1K' do + expect(repository.issues_formatted).to eql '1K' + end + end + + context 'when repository has more than 1_001 issues' do + let(:repository) { build(:repository, issues: 1_001).decorate } + + it 'returns 1K' do + expect(repository.issues_formatted).to eql '1K' + end + end + + context 'when repository has 1 million issues' do + let(:repository) { build(:repository, issues: 1_000_000).decorate } + + it 'returns 1M' do + expect(repository.issues_formatted).to eql '1M' + end + end + + context 'when repository has more than 1 million issues' do + let(:repository) { build(:repository, issues: 1_000_001).decorate } + + it 'returns 1M' do + expect(repository.issues_formatted).to eql '1M' + end + end + + context 'when repository has 0 issues' do + let(:repository) { build(:repository, issues: 0).decorate } + + it 'returns 0' do + expect(repository.issues_formatted).to eql '0' + end + end + + context 'when repository has no issues' do + let(:repository) { build(:repository, issues: nil).decorate } + + it 'returns 0' do + expect(repository.issues_formatted).to eql '0' + end + end + end + + describe '#stars_formatted' do + context 'when repository has less than 1_000 stars' do + let(:repository) { build(:repository, stars: 999).decorate } + + it 'returns 999' do + expect(repository.stars_formatted).to eql '999' + end + end + + context 'when repository has 1_000 stars' do + let(:repository) { build(:repository, stars: 1_000).decorate } + + it 'returns 1K' do + expect(repository.stars_formatted).to eql '1K' + end + end + + context 'when repository has more than 1_001 stars' do + let(:repository) { build(:repository, stars: 1_001).decorate } + + it 'returns 1K' do + expect(repository.stars_formatted).to eql '1K' + end + end + + context 'when repository has 1 million stars' do + let(:repository) { build(:repository, stars: 1_000_000).decorate } + + it 'returns 1M' do + expect(repository.stars_formatted).to eql '1M' + end + end + + context 'when repository has more than 1 million stars' do + let(:repository) { build(:repository, stars: 1_000_001).decorate } + + it 'returns 1M' do + expect(repository.stars_formatted).to eql '1M' + end + end + + context 'when repository has 0 stars' do + let(:repository) { build(:repository, stars: 0).decorate } + + it 'returns 0' do + expect(repository.stars_formatted).to eql '0' + end + end + + context 'when repository has no stars' do + let(:repository) { build(:repository, stars: nil).decorate } + + it 'returns 0' do + expect(repository.stars_formatted).to eql '0' + end + end + end +end diff --git a/spec/features/repositories_spec.rb b/spec/features/repositories_spec.rb index aa10138ce..1c5bc19fd 100644 --- a/spec/features/repositories_spec.rb +++ b/spec/features/repositories_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'rails_helper' describe 'Repositories list', type: :feature do @@ -104,7 +106,7 @@ context 'when issues are greater than 1000' do let(:issues) { 5566 } it 'returns the number of issues abbreviated to thousands' do - expect(page).to have_css('#issues-tag', text: '5K') + expect(page).to have_css('#issues-tag', text: '5.6K') end end @@ -126,7 +128,7 @@ context 'when stars are greater than 1000' do let(:stars) { 1500 } it 'returns the number of stars abbreviated to thousands' do - expect(page).to have_css('#stars-tag', text: '1K') + expect(page).to have_css('#stars-tag', text: '1.5K') end end From 512c1165a87d08c1151bf26e942d55adb7eebdde Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Fri, 11 Aug 2023 15:36:42 -0300 Subject: [PATCH 18/23] refactor: code review + tests --- app/decorators/repository_decorator.rb | 3 +-- app/services/github/repositories/sync.rb | 5 ++++- spec/services/github/repositories/sync_spec.rb | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/decorators/repository_decorator.rb b/app/decorators/repository_decorator.rb index c572c3421..0f080ba1e 100644 --- a/app/decorators/repository_decorator.rb +++ b/app/decorators/repository_decorator.rb @@ -30,8 +30,7 @@ def stars_formatted private def format_number(number) - return '0' if number.nil? - return number.to_s if number <= 999 + return (number || 0).to_s if (number || 0) <= 999 number_to_human(number, precision: 2, separator: '.', units: { thousand: "K", million: "M" }).gsub(/\s+/, '') end diff --git a/app/services/github/repositories/sync.rb b/app/services/github/repositories/sync.rb index caf03a911..10c774362 100644 --- a/app/services/github/repositories/sync.rb +++ b/app/services/github/repositories/sync.rb @@ -16,7 +16,10 @@ def call languages = fetch_repository_languages(repository.link) stats = fetch_repository_stats(repository.link) - repository.update!(language: languages, issues: stats[:issues], stars: stats[:stars]) + repository.update!( + **(languages.present? ? { language: languages } : {}), + **(stats.values.any? ? stats : {}) + ) repository end.compact diff --git a/spec/services/github/repositories/sync_spec.rb b/spec/services/github/repositories/sync_spec.rb index 9e91d0194..dd008e138 100644 --- a/spec/services/github/repositories/sync_spec.rb +++ b/spec/services/github/repositories/sync_spec.rb @@ -21,7 +21,7 @@ end context 'when there are repositories in database' do - let!(:repository) { create(:repository).decorate } + let!(:repository) { create(:repository, language: nil).decorate } let(:github_languages_success) { true } let(:github_get_success) { true } let(:client) do From 0b9df0d1b193265c1b3a22b64f66750bb4318c33 Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Fri, 11 Aug 2023 15:41:47 -0300 Subject: [PATCH 19/23] style: code style fix --- app/services/github/repositories/sync.rb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/services/github/repositories/sync.rb b/app/services/github/repositories/sync.rb index 10c774362..12fb0c38d 100644 --- a/app/services/github/repositories/sync.rb +++ b/app/services/github/repositories/sync.rb @@ -16,10 +16,7 @@ def call languages = fetch_repository_languages(repository.link) stats = fetch_repository_stats(repository.link) - repository.update!( - **(languages.present? ? { language: languages } : {}), - **(stats.values.any? ? stats : {}) - ) + repository.update!(**(languages.present? ? { language: languages } : {}), **(stats.values.any? ? stats : {})) repository end.compact From bb3e43067c645a2c06ffd9c4e5e8c05010551069 Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Fri, 11 Aug 2023 16:06:29 -0300 Subject: [PATCH 20/23] refactor: app/services/github/repositories/sync.rb --- app/services/github/repositories/sync.rb | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/app/services/github/repositories/sync.rb b/app/services/github/repositories/sync.rb index 12fb0c38d..9e79852c5 100644 --- a/app/services/github/repositories/sync.rb +++ b/app/services/github/repositories/sync.rb @@ -16,7 +16,9 @@ def call languages = fetch_repository_languages(repository.link) stats = fetch_repository_stats(repository.link) - repository.update!(**(languages.present? ? { language: languages } : {}), **(stats.values.any? ? stats : {})) + params = build_update_params(languages, stats) + + repository.update!(params) repository end.compact @@ -54,6 +56,16 @@ def fetch_repository_stats(repository_link) def repository_owner_and_name(repository_link) repository_link.split('/')[-2..] end + + def build_update_params(languages, stats) + params = {} + + params[:language] = languages if languages.present? + params[:issues] = stats[:issues] if stats[:issues].present? + params[:stars] = stats[:stars] if stats[:stars].present? + + params + end end end end From 974bbbe185150d7ba559bfc1144c778ff98b5094 Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Fri, 11 Aug 2023 17:47:37 -0300 Subject: [PATCH 21/23] chore: update repositories table on schema.rb --- db/schema.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/db/schema.rb b/db/schema.rb index 3f39fbca2..a62b52e8a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -187,10 +187,10 @@ t.datetime "created_at", precision: nil, null: false t.datetime "updated_at", precision: nil, null: false t.string "language" - t.integer "issues" - t.integer "stars" t.boolean "highlight", default: false t.text "description" + t.integer "issues", default: 0 + t.integer "stars", default: 0 end create_table "skills", force: :cascade do |t| From 5992e4f510d0c2cc13d5907c2e9590e1edf8e215 Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Fri, 11 Aug 2023 17:53:53 -0300 Subject: [PATCH 22/23] refactor: code review + tests (part II) --- app/decorators/repository_decorator.rb | 2 +- app/services/github/repositories/sync.rb | 10 ++-------- app/views/repositories/_repository.html.erb | 4 ++-- spec/decorators/repository_decorator_spec.rb | 16 ---------------- spec/services/github/repositories/sync_spec.rb | 4 ++-- 5 files changed, 7 insertions(+), 29 deletions(-) diff --git a/app/decorators/repository_decorator.rb b/app/decorators/repository_decorator.rb index 0f080ba1e..a11e6c628 100644 --- a/app/decorators/repository_decorator.rb +++ b/app/decorators/repository_decorator.rb @@ -30,7 +30,7 @@ def stars_formatted private def format_number(number) - return (number || 0).to_s if (number || 0) <= 999 + return number.to_s if number <= 999 number_to_human(number, precision: 2, separator: '.', units: { thousand: "K", million: "M" }).gsub(/\s+/, '') end diff --git a/app/services/github/repositories/sync.rb b/app/services/github/repositories/sync.rb index 9e79852c5..e4386713d 100644 --- a/app/services/github/repositories/sync.rb +++ b/app/services/github/repositories/sync.rb @@ -54,17 +54,11 @@ def fetch_repository_stats(repository_link) end def repository_owner_and_name(repository_link) - repository_link.split('/')[-2..] + repository_link.split('/').last(2) end def build_update_params(languages, stats) - params = {} - - params[:language] = languages if languages.present? - params[:issues] = stats[:issues] if stats[:issues].present? - params[:stars] = stats[:stars] if stats[:stars].present? - - params + stats.slice(:issues, :stars).merge(language: languages).compact end end end diff --git a/app/views/repositories/_repository.html.erb b/app/views/repositories/_repository.html.erb index e12a0174a..28140148d 100644 --- a/app/views/repositories/_repository.html.erb +++ b/app/views/repositories/_repository.html.erb @@ -7,13 +7,13 @@ <%= simple_format repository.description %>
- <% if repository.issues.present? %> + <% if repository.issues > 0 %>
"> <%= inline_svg_tag 'issues.svg', class: 'h-4 w-4' %> <%= repository.issues_formatted %>
<% end %> - <% if repository.stars.present? %> + <% if repository.stars > 0 %>
"> <%= inline_svg_tag 'stars.svg', class: 'h-5 w-5' %> <%= repository.stars_formatted %> diff --git a/spec/decorators/repository_decorator_spec.rb b/spec/decorators/repository_decorator_spec.rb index b1f49fd8d..8fa2932ce 100644 --- a/spec/decorators/repository_decorator_spec.rb +++ b/spec/decorators/repository_decorator_spec.rb @@ -83,14 +83,6 @@ expect(repository.issues_formatted).to eql '0' end end - - context 'when repository has no issues' do - let(:repository) { build(:repository, issues: nil).decorate } - - it 'returns 0' do - expect(repository.issues_formatted).to eql '0' - end - end end describe '#stars_formatted' do @@ -141,13 +133,5 @@ expect(repository.stars_formatted).to eql '0' end end - - context 'when repository has no stars' do - let(:repository) { build(:repository, stars: nil).decorate } - - it 'returns 0' do - expect(repository.stars_formatted).to eql '0' - end - end end end diff --git a/spec/services/github/repositories/sync_spec.rb b/spec/services/github/repositories/sync_spec.rb index dd008e138..a999a8d00 100644 --- a/spec/services/github/repositories/sync_spec.rb +++ b/spec/services/github/repositories/sync_spec.rb @@ -69,12 +69,12 @@ it 'returns repositories issues as nil' do repository, = github_repositories_sync.call - expect(repository.issues).to be_nil + expect(repository.issues).to be_zero end it 'returns repositories stars as nil' do repository, = github_repositories_sync.call - expect(repository.stars).to be_nil + expect(repository.stars).to be_zero end end end From 226d7faa9deb7843fb34b0ea00546941dd37f3ee Mon Sep 17 00:00:00 2001 From: joaoGabriel55 Date: Fri, 11 Aug 2023 17:55:18 -0300 Subject: [PATCH 23/23] style: rubocop --- spec/decorators/repository_decorator_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/decorators/repository_decorator_spec.rb b/spec/decorators/repository_decorator_spec.rb index 8fa2932ce..9e0c0f69e 100644 --- a/spec/decorators/repository_decorator_spec.rb +++ b/spec/decorators/repository_decorator_spec.rb @@ -6,7 +6,7 @@ let(:repository) { create(:repository, language: 'Javascript, Docker, Ruby, HTML, CSS').decorate } it 'returns only the first three' do - expect(repository.languages).to eq(['Javascript', 'Docker', 'Ruby']) + expect(repository.languages).to eq(%w[Javascript Docker Ruby]) end end @@ -14,7 +14,7 @@ let(:repository) { create(:repository, language: 'Javascript, Docker').decorate } it 'returns available languages' do - expect(repository.languages).to eq(['Javascript', 'Docker']) + expect(repository.languages).to eq(%w[Javascript Docker]) end end