From cb00cd7be836b0350e8178dcaf1572ff9f46ea7f Mon Sep 17 00:00:00 2001 From: Malaber <32635600+Malaber@users.noreply.github.com> Date: Tue, 7 May 2019 09:51:37 +0200 Subject: [PATCH] Generalize tournament save interactor It now is responsible for saving all ApplicationRecord objects to the database. This will reduce code duplication one we have other objects that need to be saved. (As we will soon need to save individual matches) --- app/controllers/tournaments_controller.rb | 4 ++-- app/interactors/add_group_stage_to_tournament.rb | 2 +- app/interactors/add_playoffs_to_tournament.rb | 2 +- ...t_to_database.rb => save_application_record_object.rb} | 4 ++-- app/organizers/add_group_stage_to_tournament_and_save.rb | 7 +++++++ ...stage_to_tournament_and_save_tournament_to_database.rb | 7 ------- app/organizers/add_playoffs_to_tournament_and_save.rb | 7 +++++++ ...yoffs_to_tournament_and_save_tournament_to_database.rb | 7 ------- .../save_tournament_to_database_interactor_spec.rb | 8 ++++---- 9 files changed, 24 insertions(+), 24 deletions(-) rename app/interactors/{save_tournament_to_database.rb => save_application_record_object.rb} (63%) create mode 100644 app/organizers/add_group_stage_to_tournament_and_save.rb delete mode 100644 app/organizers/add_group_stage_to_tournament_and_save_tournament_to_database.rb create mode 100644 app/organizers/add_playoffs_to_tournament_and_save.rb delete mode 100644 app/organizers/add_playoffs_to_tournament_and_save_tournament_to_database.rb diff --git a/app/controllers/tournaments_controller.rb b/app/controllers/tournaments_controller.rb index 6a4a3e5..6f80705 100644 --- a/app/controllers/tournaments_controller.rb +++ b/app/controllers/tournaments_controller.rb @@ -38,14 +38,14 @@ class TournamentsController < ApplicationController if group_stage groups = organize_teams_in_groups(teams) # add groups to tournament - result = AddGroupStageToTournamentAndSaveTournamentToDatabase.call(tournament: tournament, groups: groups) + result = AddGroupStageToTournamentAndSave.call(tournament: tournament, groups: groups) else # convert teams parameter into Team objects teams = teams.map(&method(:find_or_create_team)) # associate provided teams with tournament tournament.teams = teams # add playoff stage to tournament - result = AddPlayoffsToTournamentAndSaveTournamentToDatabase.call(tournament: tournament) + result = AddPlayoffsToTournamentAndSave.call(tournament: tournament) end # validate tournament unless tournament.valid? diff --git a/app/interactors/add_group_stage_to_tournament.rb b/app/interactors/add_group_stage_to_tournament.rb index 14b798c..d1d28e2 100644 --- a/app/interactors/add_group_stage_to_tournament.rb +++ b/app/interactors/add_group_stage_to_tournament.rb @@ -10,7 +10,7 @@ class AddGroupStageToTournament begin group_stage = GroupStageService.generate_group_stage(groups) tournament.stages = [group_stage] - context.tournament = tournament + context.object_to_save = tournament rescue StandardError context.fail! end diff --git a/app/interactors/add_playoffs_to_tournament.rb b/app/interactors/add_playoffs_to_tournament.rb index fbe7f25..9efc2ec 100644 --- a/app/interactors/add_playoffs_to_tournament.rb +++ b/app/interactors/add_playoffs_to_tournament.rb @@ -12,7 +12,7 @@ class AddPlayoffsToTournament else tournament.stages.concat playoff_stages end - context.tournament = tournament + context.object_to_save = tournament else context.fail! end diff --git a/app/interactors/save_tournament_to_database.rb b/app/interactors/save_application_record_object.rb similarity index 63% rename from app/interactors/save_tournament_to_database.rb rename to app/interactors/save_application_record_object.rb index 40acf12..0bc2073 100644 --- a/app/interactors/save_tournament_to_database.rb +++ b/app/interactors/save_application_record_object.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -class SaveTournamentToDatabase +class SaveApplicationRecordObject include Interactor def call - if context.tournament.save + if context.object_to_save.save nil else context.fail! diff --git a/app/organizers/add_group_stage_to_tournament_and_save.rb b/app/organizers/add_group_stage_to_tournament_and_save.rb new file mode 100644 index 0000000..b1f1012 --- /dev/null +++ b/app/organizers/add_group_stage_to_tournament_and_save.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddGroupStageToTournamentAndSave + include Interactor::Organizer + + organize AddGroupStageToTournament, SaveApplicationRecordObject +end diff --git a/app/organizers/add_group_stage_to_tournament_and_save_tournament_to_database.rb b/app/organizers/add_group_stage_to_tournament_and_save_tournament_to_database.rb deleted file mode 100644 index 83710b5..0000000 --- a/app/organizers/add_group_stage_to_tournament_and_save_tournament_to_database.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -class AddGroupStageToTournamentAndSaveTournamentToDatabase - include Interactor::Organizer - - organize AddGroupStageToTournament, SaveTournamentToDatabase -end diff --git a/app/organizers/add_playoffs_to_tournament_and_save.rb b/app/organizers/add_playoffs_to_tournament_and_save.rb new file mode 100644 index 0000000..766add6 --- /dev/null +++ b/app/organizers/add_playoffs_to_tournament_and_save.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddPlayoffsToTournamentAndSave + include Interactor::Organizer + + organize AddPlayoffsToTournament, SaveApplicationRecordObject +end diff --git a/app/organizers/add_playoffs_to_tournament_and_save_tournament_to_database.rb b/app/organizers/add_playoffs_to_tournament_and_save_tournament_to_database.rb deleted file mode 100644 index d4466a0..0000000 --- a/app/organizers/add_playoffs_to_tournament_and_save_tournament_to_database.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -class AddPlayoffsToTournamentAndSaveTournamentToDatabase - include Interactor::Organizer - - organize AddPlayoffsToTournament, SaveTournamentToDatabase -end diff --git a/spec/interactors/save_tournament_to_database_interactor_spec.rb b/spec/interactors/save_tournament_to_database_interactor_spec.rb index b10bba5..ce2edb3 100644 --- a/spec/interactors/save_tournament_to_database_interactor_spec.rb +++ b/spec/interactors/save_tournament_to_database_interactor_spec.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -RSpec.describe SaveTournamentToDatabase do +RSpec.describe SaveApplicationRecordObject do before do @tournament = create(:tournament) end context 'save succeeds' do let(:context) do - SaveTournamentToDatabase.call(tournament: @tournament) + SaveApplicationRecordObject.call(object_to_save: @tournament) end before do expect_any_instance_of(Tournament) @@ -19,13 +19,13 @@ RSpec.describe SaveTournamentToDatabase do end it 'provides the tournament' do - expect(context.tournament).to eq(@tournament) + expect(context.object_to_save).to eq(@tournament) end end context 'save fails' do let(:context) do - SaveTournamentToDatabase.call(tournament: @tournament) + SaveApplicationRecordObject.call(object_to_save: @tournament) end before do expect_any_instance_of(Tournament)