Skip to content
This repository has been archived by the owner on Dec 5, 2019. It is now read-only.

Refactor rake tasks and fix rubocop offenses #181

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 4 additions & 37 deletions lib/pacto/rake_task.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,14 @@
require 'thor'
require 'pacto/cli'
require 'pacto/cli/helpers'
require 'pacto/rake_task/generate_task'

# FIXME: RakeTask is a huge class, refactor this please
# rubocop:disable ClassLength
module Pacto
class RakeTask
extend Forwardable
include Thor::Actions
include Rake::DSL
include Pacto::CLI::Helpers
include

def initialize
@exit_with_error = false
Expand Down Expand Up @@ -43,11 +42,12 @@ def validate_task
def generate_task
desc 'Generates contracts from partial contracts'
task :generate, :input_dir, :output_dir, :host do |_t, args|
puts args
if args.to_a.size < 3
fail Pacto::UI.colorize('USAGE: rake pacto:generate[<request_contract_dir>, <output_dir>, <record_host>]', :yellow)
end

generate_contracts(args[:input_dir], args[:output_dir], args[:host])
Pacto::RakeTask::GenerateTask.new(args[:input_dir], args[:output_dir], args[:host]).generate_contracts
end
end

Expand All @@ -57,40 +57,7 @@ def meta_validate
run(:meta_validate, *args)
end
end

# rubocop:enable MethodLength

# FIXME: generate_contracts is a big method =(. Needs refactoring
# rubocop:disable MethodLength
def generate_contracts(input_dir, output_dir, host)
WebMock.allow_net_connect!
generator = Pacto::Generator.contract_generator
puts "Generating contracts from partial contracts in #{input_dir} and recording to #{output_dir}\n\n"

failed_contracts = []
each_contract(input_dir) do |contract_file|
begin
contract = generator.generate_from_partial_contract(contract_file, host)
output_file = File.expand_path(File.basename(contract_file), output_dir)
output_file = File.open(output_file, 'wb')
output_file.write contract
output_file.flush
output_file.close
rescue InvalidContract => e
failed_contracts << contract_file
puts Pacto::UI.colorize(e.message, :red)
end
end

if failed_contracts.empty?
puts Pacto::UI.colorize('Successfully generated all contracts', :green)
else
fail Pacto::UI.colorize("The following contracts could not be generated: #{failed_contracts.join ','}", :red)
end
end
# rubocop:enable MethodLength
end
end
# rubocop:enable ClassLength

Pacto::RakeTask.new.install
51 changes: 51 additions & 0 deletions lib/pacto/rake_task/generate_task.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
module Pacto
class RakeTask
class GenerateTask
include Pacto::CLI::Helpers

def initialize(input_dir, output_dir, host)
@input_dir, @output_dir, @host = input_dir, output_dir, host
@generator = Pacto::Generator.contract_generator
end

def generate_contracts
WebMock.allow_net_connect!
show_initial_message

self.failed_contracts = []
each_contract(input_dir, &method(:generate_contract!))

show_final_message
end

private

attr_reader :generator, :input_dir, :output_dir, :host
attr_accessor :failed_contracts

def generate_contract!(contract_file)
contract = generator.generate_from_partial_contract(contract_file, host)
output_file = File.expand_path(File.basename(contract_file), output_dir)
output_file = File.open(output_file, 'wb')
output_file.write contract
output_file.flush
output_file.close
rescue InvalidContract => e
failed_contracts << contract_file
puts Pacto::UI.colorize(e.message, :red)
end

def show_initial_message
puts "Generating contracts from partial contracts in #{input_dir} and recording to #{output_dir}\n\n"
end

def show_final_message
if failed_contracts.empty?
puts Pacto::UI.colorize('Successfully generated all contracts', :green)
else
fail Pacto::UI.colorize("The following contracts could not be generated: #{failed_contracts.join ','}", :red)
end
end
end
end
end