diff --git a/.gitignore b/.gitignore index 8446e4b..16c6eeb 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ public/cache/*.html +tmp/* +!tmp/.keep diff --git a/lib/loader.rb b/lib/loader.rb index d9d8682..649bec5 100644 --- a/lib/loader.rb +++ b/lib/loader.rb @@ -13,6 +13,7 @@ require_relative './use_cases/slack/schedulers/every_day' require_relative './use_cases/slack/schedulers/weekday' require_relative './use_cases/fetch_gemfiles' +require_relative './use_cases/save_gemfiles' require_relative './gateways/pull_request' require_relative './gateways/pull_request_count' require_relative './gateways/slack_message' diff --git a/lib/use_cases/save_gemfiles.rb b/lib/use_cases/save_gemfiles.rb new file mode 100644 index 0000000..41c70d6 --- /dev/null +++ b/lib/use_cases/save_gemfiles.rb @@ -0,0 +1,24 @@ +module UseCases + class SaveGemfiles + def initialize(fetch_gemfiles:, file: File) + @fetch_gemfiles = fetch_gemfiles + @file = file + end + + def execute + results = fetch_gemfiles.execute + results.each do |result| + save_gemfile(result.fetch(:application_name), result.fetch(:gemfile_contents)) + end + end + + private + + attr_reader :fetch_gemfiles, :file + + def save_gemfile(application_name, file_contents) + gemfile_path = "tmp/#{application_name}_gemfile.lock" + file.open(gemfile_path, 'w') { |f| f.write(file_contents) } + end + end +end diff --git a/spec/use_cases/save_gemfiles_spec.rb b/spec/use_cases/save_gemfiles_spec.rb new file mode 100644 index 0000000..63e6e5a --- /dev/null +++ b/spec/use_cases/save_gemfiles_spec.rb @@ -0,0 +1,35 @@ +describe UseCases::SaveGemfiles do + context 'Given FetchGemfiles' do + it 'calls execute' do + fetch_gemfiles = spy + described_class.new(fetch_gemfiles: fetch_gemfiles).execute + + expect(fetch_gemfiles).to have_received(:execute) + end + end + + context 'Given no Gemfiles' do + it 'does not save them' do + fetch_gemfiles = double(execute: []) + file_gateway = spy + described_class.new(fetch_gemfiles: fetch_gemfiles, file: file_gateway).execute + + expect(file_gateway).to_not have_received(:execute) + end + end + + context 'Given one Gemfile' do + it 'saves it' do + fetch_gemfiles = double(execute: [ + { + application_name: 'foo-app', + gemfile_contents: 'some contents' + } + ]) + file_gateway = spy + described_class.new(fetch_gemfiles: fetch_gemfiles, file: file_gateway).execute + + expect(file_gateway).to have_received(:open).with('tmp/foo-app_gemfile.lock', 'w') + end + end +end diff --git a/tmp/.keep b/tmp/.keep new file mode 100644 index 0000000..e69de29