Skip to content

Commit

Permalink
Save Gemfiles Use Case
Browse files Browse the repository at this point in the history
  • Loading branch information
emileswarts committed Feb 13, 2018
1 parent 852e346 commit 7588161
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
public/cache/*.html
tmp/*
!tmp/.keep
1 change: 1 addition & 0 deletions lib/loader.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
24 changes: 24 additions & 0 deletions lib/use_cases/save_gemfiles.rb
Original file line number Diff line number Diff line change
@@ -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
35 changes: 35 additions & 0 deletions spec/use_cases/save_gemfiles_spec.rb
Original file line number Diff line number Diff line change
@@ -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
Empty file added tmp/.keep
Empty file.

0 comments on commit 7588161

Please sign in to comment.