Formatting concern: Every file should end with a newline.
[nfoiled.git] / Rakefile.rb
blob0fdd9294f044ae39225924ebec84a8a9e2c95b82
1 ($:.unshift File.expand_path(File.join( File.dirname(__FILE__), 'lib' ))).uniq!
2 require 'nfoiled'
4 require 'fileutils'
6 # =======================
7 # = Gem packaging tasks =
8 # =======================
9 begin
10   require 'echoe'
11   
12   task :package => :'package:install'
13   task :manifest => :'package:manifest'
14   namespace :package do
15     Echoe.new('nfoiled', Nfoiled::VERSION) do |g|; g.name = 'Nfoiled'
16       g.project = 'nfoiled'
17       g.author = ['elliottcable']
18       g.email = ['Nfoiled@elliottcable.com']
19       g.summary = 'The Rubyist\'s interface to Ncurses.'
20       g.url = 'http://github.com/elliottcable/nfoiled'
21       g.runtime_dependencies = ['ncurses'] #, 'yard >=0.2.3'
22       g.development_dependencies = ['echoe', 'rspec', 'rcov', 'yard', 'stringray']
23       g.manifest_name = '.manifest'
24       g.ignore_pattern = /^\.git\/|^meta\/|\.gemspec/
25     end
26   
27     desc 'tests packaged files to ensure they are all present'
28     task :verify => :package do
29       # An error message will be displayed if files are missing
30       if system %(ruby -e "require 'rubygems'; require 'pkg/nfoiled-#{Nfoiled::VERSION}/lib/nfoiled'")
31         puts "\nThe library files are present"
32       end
33     end
35     task :copy_gemspec => [:package] do
36       pkg = Dir['pkg/*'].select {|dir| File.directory? dir}.last
37       mv File.join(pkg, pkg.gsub(/^pkg\//,'').gsub(/\-\d+$/,'.gemspec')), './'
38     end
40     desc 'builds a gemspec as GitHub wants it'
41     task :gemspec => [:package, :copy_gemspec, :clobber_package]
42   end
43   
44 rescue LoadError
45   desc 'You need the `echoe` gem to package Nfoiled'
46   task :package
47 end
49 # =======================
50 # = Spec/Coverage tasks =
51 # =======================
52 begin
53   require 'spec'
54   require 'rcov'
55   require 'spec/rake/spectask'
56   
57   task :default => :'coverage:run'
58   task :coverage => :'coverage:run'
59   namespace :coverage do
60     Spec::Rake::SpecTask.new(:run) do |t|
61       t.spec_opts = ["--format", "specdoc"]
62       t.spec_opts << "--colour" unless ENV['CI']
63       t.spec_files = Dir['spec/**/*_spec.rb'].sort
64       t.libs = ['lib']
65       t.rcov = true
66       t.rcov_opts = ['--exclude-only', '".*"', '--include-file', '"^lib"']
67       t.rcov_dir = File.join('meta', 'coverage')
68     end
69     
70     begin
71       require 'spec/rake/verify_rcov'
72       # For the moment, this is the only way I know of to fix RCov. I may
73       # release the fix as it's own gem at some point in the near future.
74       require 'stringray/core_ext/spec/rake/verify_rcov'
75       RCov::VerifyTask.new(:verify) do |t|
76         t.threshold = 50
77         t.index_html = File.join('meta', 'coverage', 'index.html')
78         t.require_exact_threshold = false
79       end
80     rescue LoadError
81       desc 'You need the `stringray` gem to verify coverage'
82       task :verify
83     end
84     
85     task :open do
86       system 'open ' + File.join('meta', 'coverage', 'index.html') if PLATFORM['darwin']
87     end
88   end
89   
90 rescue LoadError
91   desc 'You need the `rcov` and `rspec` gems to run specs/coverage'
92   task :coverage
93 end
95 # =======================
96 # = Documentation tasks =
97 # =======================
98 begin
99   require 'yard'
100   require 'yard/rake/yardoc_task'
101   
102   task :documentation => :'documentation:generate'
103   namespace :documentation do
104     YARD::Rake::YardocTask.new :generate do |t|
105       t.files   = ['lib/**/*.rb']
106       t.options = ['--output-dir', File.join('meta', 'documentation'),
107                    '--readme', 'README.markdown']
108     end
109     
110     YARD::Rake::YardocTask.new :dotyardoc do |t|
111       t.files   = ['lib/**/*.rb']
112       t.options = ['--no-output',
113                    '--readme', 'README.markdown']
114     end
115     
116     task :open do
117       system 'open ' + File.join('meta', 'documentation', 'index.html') if PLATFORM['darwin']
118     end
119   end
120   
121 rescue LoadError
122   desc 'You need the `yard` gem to generate documentation'
123   task :documentation
126 # =========
127 # = Other =
128 # =========
129 desc 'Removes all meta producs'
130 task :clobber do
131   `rm -rf #{File.expand_path(File.join( File.dirname(__FILE__), 'meta' ))}`
134 desc 'Check everything over before commiting'
135 task :aok => [:'documentation:generate', :'documentation:open',
136               :'package:manifest',
137               :'coverage:run', :'coverage:verify', :'coverage:open']
139 task :ci => [:'documentation:generate', :'coverage:run', :'coverage:verify']