#!/usr/bin/env rake

require 'pathname'
require 'rake/clean'

begin
	require 'hoe'
rescue LoadError
	abort "This Rakefile requires hoe (gem install hoe)"
end

GEMSPEC = 'arborist.gemspec'

BASEDIR = Pathname( __FILE__ ).dirname
LIBDIR = BASEDIR + 'lib'
NODE_STATE_GRAPH = BASEDIR + 'node-state-machine.dot'


Hoe.plugin :mercurial
Hoe.plugin :signing
Hoe.plugin :deveiate

Hoe.plugins.delete :rubyforge


hoespec = Hoe.spec 'arborist' do |spec|
	spec.readme_file = 'README.md'
	spec.history_file = 'History.md'
	spec.extra_rdoc_files = FileList[ '*.rdoc', '*.md' ]
	spec.license 'BSD-3-Clause'
	spec.urls = {
		home:   'http://deveiate.org/projects/arborist',
		code:   'http://bitbucket.org/ged/arborist',
		docs:   'http://deveiate.org/code/arborist',
		github: 'http://github.com/ged/arborist',
	}

	spec.developer 'Michael Granger', 'ged@FaerieMUD.org'
	spec.developer 'Mahlon E. Smith', 'mahlon@martini.nu'

	spec.dependency 'schedulability', '~> 0.4'
	spec.dependency 'loggability', '~> 0.12'
	spec.dependency 'configurability', '~> 3.0'
	spec.dependency 'pluggability', '~> 0.4'
	spec.dependency 'state_machines', '~> 0.5'
	spec.dependency 'msgpack', '~> 1.0'
	spec.dependency 'cztop', '~> 0.11'
	spec.dependency 'cztop-reactor', '~> 0.3'
	spec.dependency 'gli', '~> 2.3'
	spec.dependency 'tty', '~> 0.7'
	spec.dependency 'tty-tree', '~> 0.1'
	spec.dependency 'pry', '~> 0.11'

	spec.dependency 'rspec', '~> 3.2', :developer
	spec.dependency 'rspec-wait', '~> 0.0', :developer
	spec.dependency 'simplecov', '~> 0.9', :developer
	spec.dependency 'timecop', '~> 0.7', :developer
	spec.dependency 'rdoc', '~> 5.1', :developer
	spec.dependency 'state_machines-graphviz', '~> 0.0', :developer

	spec.require_ruby_version( '>=2.3.1' )
	spec.hg_sign_tags = true if spec.respond_to?( :hg_sign_tags= )

	spec.rdoc_locations << "deveiate:/usr/local/www/public/code/#{remote_rdoc_dir}"
end


ENV['VERSION'] ||= hoespec.spec.version.to_s

# Run the tests before checking in
task 'hg:precheckin' => [ :check_history, :check_manifest, :gemspec, :spec ]

# Rebuild the ChangeLog immediately before release
task :prerelease => 'ChangeLog'
CLOBBER.include( 'ChangeLog' )

desc "Build a coverage report"
task :coverage do
	ENV["COVERAGE"] = 'yes'
	Rake::Task[:spec].invoke
end


# Use the fivefish formatter for docs generated from development checkout
if File.directory?( '.hg' )
	require 'rdoc/task'

	Rake::Task[ 'docs' ].clear
	RDoc::Task.new( 'docs' ) do |rdoc|
	    rdoc.main = "README.md"
	    rdoc.rdoc_files.include( "*.rdoc", "*.md", "ChangeLog", "lib/**/*.rb" )
	    rdoc.generator = :fivefish
		rdoc.title = 'Arborist'
	    rdoc.rdoc_dir = 'doc'
	end
end

file 'Manifest.txt'

task :gemspec => [ 'ChangeLog', __FILE__, 'Manifest.txt', GEMSPEC ]
file GEMSPEC => __FILE__ do |task|
	spec = $hoespec.spec
	spec.files.delete( '.gemtest' )
	spec.files.delete( 'LICENSE' )
	spec.signing_key = nil
	spec.version = "#{spec.version.bump}.0.pre#{Time.now.strftime("%Y%m%d%H%M%S")}"
	#spec.cert_chain = [ 'certs/ged.pem' ]
	File.open( task.name, 'w' ) do |fh|
		fh.write( spec.to_ruby )
	end
end
CLOBBER.include( GEMSPEC )

task :default => :gemspec


file NODE_STATE_GRAPH

desc "Generate a graph of the node status state machine."
task NODE_STATE_GRAPH do |task|
	$LOAD_PATH.unshift( LIBDIR.to_s )

	require 'state_machines'
	require 'state_machines/graphviz'
	require 'arborist/node'

	state_machine = Arborist::Node.state_machine
	name = File.basename( NODE_STATE_GRAPH, '.dot' )
	puts "Writing status state machine diagram to #{NODE_STATE_GRAPH}"
	graph = state_machine.draw( path: BASEDIR.to_s, name: name, format: 'dot' )
	# graph.output
end

CLEAN.include( NODE_STATE_GRAPH.to_s )


task :diagrams => [ NODE_STATE_GRAPH ]