Sha256: 1472d0985a0cbffa602fee34f135f949711acf6c08eefb5f8952ec55726a58f2
Contents?: true
Size: 1.83 KB
Versions: 1
Compression:
Stored size: 1.83 KB
Contents
require 'contracts' unless String.respond_to?(:colors) class String def colorize(*args) self end end end module Contracts class RakeTask include Rake::DSL def initialize @exit_with_error = false end def install desc "Tasks for contracts gem" namespace :contracts do validate_task end end def validate_task desc "Validates all contracts in a given directory against a given host" task :validate, :host, :dir do |t, args| if args.to_a.size < 2 fail "USAGE: rake contracts:validate[<host>, <contract_dir>]".colorize(:yellow) end validate_contracts(args[:host], args[:dir]) end end def validate_contracts(host, dir) WebMock.allow_net_connect! contracts = Dir[File.join(dir, '*.json')] if contracts.empty? fail "No contracts found in directory #{dir}".colorize(:yellow) end puts "Validating contracts in directory #{dir} against host #{host}\n\n" total_failed = 0 contracts.each do |contract_file| print "#{contract_file.split('/').last}:" contract = Contracts.build_from_file(contract_file, host) errors = contract.validate if errors.empty? puts " OK!".colorize(:green) else @exit_with_error = true total_failed += 1 puts " FAILED!".colorize(:red) errors.each do |error| puts "\t* #{error}".colorize(:light_red) end puts "" end end if @exit_with_error fail "#{total_failed} of #{contracts.size} failed. Check output for detailed error messages.".colorize(:red) else puts "#{contracts.size} valid contract#{contracts.size > 1 ? 's' : nil}".colorize(:green) end end end end Contracts::RakeTask.new.install
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
contracts_api_test-0.0.1 | lib/contracts/rake_task.rb |