root/tags/0.5.0/Rakefile

Revision 1228, 6.6 kB (checked in by e.@brainspl.at, 11 months ago)

checking in server.rb refactor, split into config.rb boot_loader.rb, integrated Merb.root stuff. This will probably break a few small things and maybe some plugins but bear with me as this is a needed change. do not use Merb::Server.config[:foo] anymore, instead use Merb::Config[:foo], do not use MERB_ROOT anymore use Merb.root instead

Line 
1 require "rake"
2 require "rake/clean"
3 require "rake/gempackagetask"
4 require "rake/rdoctask"
5 require "rake/testtask"
6 require "spec/rake/spectask"
7 require "fileutils"
8
9 def __DIR__
10   File.dirname(__FILE__)
11 end
12
13 require __DIR__ + "/tools/rakehelp"
14 require __DIR__ + "/tools/annotation_extract"
15
16 include FileUtils
17
18 NAME = "merb"
19
20 require "lib/merb/version"
21
22 ##############################################################################
23 # Packaging & Installation
24 ##############################################################################
25 CLEAN.include ["**/.*.sw?", "*.gem", ".config"]
26
27 windows = (PLATFORM =~ /win32|cygwin/)
28
29 SUDO = windows ? "" : "sudo"
30
31 setup_clean [ "pkg", "lib/*.bundle", "*.gem", "doc/rdoc", ".config", "coverage", "cache", "log"]
32
33 desc "Packages up Merb."
34 task :default => :package
35
36 task :merb => [:clean, :rdoc, :package]
37
38 spec = Gem::Specification.new do |s|
39   s.name         = NAME
40   s.version      = Merb::VERSION
41   s.platform     = Gem::Platform::RUBY
42   s.author       = "Ezra Zygmuntowicz"
43   s.email        = "ez@engineyard.com"
44   s.homepage     = "http://merb.devjavu.com"
45   s.summary      = "Merb == Mongrel + Erb. Pocket rocket web framework."
46   s.bindir       = "bin"
47   s.description  = s.summary
48   s.executables  = %w( merb )
49   s.require_path = "lib"
50   s.files        = %w( LICENSE README Rakefile TODO ) + [Merb.svn_revision_filename] + Dir["{bin,spec,lib,examples,app_generators,merb_generators,merb_default_generators,rspec_generators,test_unit_generators,script}/**/*"]
51
52   # rdoc
53   s.has_rdoc         = true
54   s.extra_rdoc_files = %w( README LICENSE TODO )
55   #s.rdoc_options     += RDOC_OPTS + ["--exclude", "^(app|uploads)"]
56
57   # Dependencies
58   s.add_dependency "mongrel"
59   s.add_dependency "erubis"
60   #s.add_dependency "haml", ">= 1.8"
61   s.add_dependency "mime-types"
62   s.add_dependency "rubigen"
63   s.add_dependency "rake"
64   s.add_dependency "ruby2ruby"
65   s.add_dependency "json_pure"
66  
67   # Requirements
68   s.requirements << "install the json gem to get faster json parsing"
69   s.required_ruby_version = ">= 1.8.4"
70 end
71
72 Rake::GemPackageTask.new(spec) do |package|
73   # package.need_tar = true
74   package.gem_spec = spec
75 end
76
77 desc "Run :package and install the resulting .gem"
78 task :install => :package do
79   sh %{#{SUDO} gem install pkg/#{NAME}-#{Merb::VERSION}.gem --no-rdoc --no-ri}
80 end
81
82 desc "Run :clean and uninstall the .gem"
83 task :uninstall => :clean do
84   sh %{#{SUDO} gem uninstall #{NAME}}
85 end
86
87 ##############################################################################
88 # Documentation
89 ##############################################################################
90 task :doc => [:rdoc]
91 namespace :doc do
92
93   Rake::RDocTask.new do |rdoc|
94     files = ["README", "LICENSE", "CHANGELOG", "lib/**/*.rb"]
95     rdoc.rdoc_files.add(files)
96     rdoc.main = "README"
97     rdoc.title = "Merb Docs"
98     rdoc.template = __DIR__ + "/tools/allison-2.0.2/lib/allison.rb"
99     rdoc.rdoc_dir = "doc/rdoc"
100     rdoc.options << "--line-numbers" << "--inline-source"
101   end
102
103   desc "run webgen"
104   task :webgen do
105     sh %{cd doc/site; webgen}
106   end
107
108   desc "rdoc to rubyforge"
109   task :rubyforge do
110     # sh %{rake doc}
111     sh %{#{SUDO} chmod -R 755 doc} unless windows
112     sh %{/usr/bin/scp -r -p doc/rdoc/* ezmobius@rubyforge.org:/var/www/gforge-projects/merb}
113   end
114
115 end
116
117 ##############################################################################
118 # rSpec & rcov
119 ##############################################################################
120 desc "Run :specs, :rcov"
121 task :aok => [:specs, :rcov]
122
123 desc "Run all specs"
124 Spec::Rake::SpecTask.new("specs") do |t|
125   t.spec_opts = ["--format", "specdoc", "--colour"]
126   t.spec_files = Dir["spec/**/*_spec.rb"].sort
127 end
128
129 desc "Run a specific spec with TASK=xxxx"
130 Spec::Rake::SpecTask.new("spec") do |t|
131   t.spec_opts = ["--format", "specdoc", "--colour"]
132   t.libs = ["lib", "server/lib" ]
133   t.spec_files = (ENV["TASK"] || '').split(',').map do |task|
134     "spec/merb/#{task}_spec.rb"
135   end
136 end
137
138 desc "Run all specs output html"
139 Spec::Rake::SpecTask.new("specs_html") do |t|
140   t.spec_opts = ["--format", "html"]
141   t.libs = ["lib", "server/lib" ]
142   t.spec_files = Dir["spec/**/*_spec.rb"].sort
143 end
144
145 desc "RCov"
146 Spec::Rake::SpecTask.new("rcov") do |t|
147   t.rcov_opts = ["--exclude", "gems", "--exclude", "spec"]
148   t.spec_opts = ["--format", "specdoc", "--colour"]
149   t.rcov_opts = ["--exclude","gems"]
150   t.spec_files = Dir["spec/**/*_spec.rb"].sort
151   t.libs = ["lib", "server/lib" ]
152   t.rcov = true
153 end
154
155 STATS_DIRECTORIES = [
156   ['Code', 'lib/'],
157   ['Unit tests', 'specs']
158 ].collect { |name, dir| [ name, "./#{dir}" ] }.
159   select  { |name, dir| File.directory?(dir) }
160
161 desc "Report code statistics (KLOCs, etc) from the application"
162 task :stats do
163   require __DIR__ + "/tools/code_statistics"
164   # require "extra/stats"
165   verbose = true
166   CodeStatistics.new(*STATS_DIRECTORIES).to_s
167 end
168
169 task :release => :package do
170   if ENV["RELEASE"]
171     sh %{rubyforge add_release merb merb "#{ENV["RELEASE"]}" pkg/#{NAME}-#{Merb::VERSION}.gem}
172   else
173     puts "Usage: rake release RELEASE='Clever tag line goes here'"
174   end
175 end
176
177 ##############################################################################
178 # SVN
179 ##############################################################################
180 namespace :repo do
181
182   desc "Add new files to repository"
183   task :add do
184     if File.directory?(".git")
185       system "git add *"
186     elsif File.directory?(".svn")
187       system "svn status | grep '^\?' | sed -e 's/? *//' | sed -e 's/ /\ /g' | xargs svn add"
188     end
189   end
190
191   desc "Fetch changes from master repository"
192   task :rebase do
193     if File.directory?(".git")
194       system "git stash ; git svn rebase ; git stash apply"
195     elsif File.directory?(".svn")
196       system "svn update"
197     end
198   end
199  
200   desc "commit modified changes to the repository"
201   task :commit do
202     if File.directory?(".git")
203       system "git commit"
204     elsif File.directory?(".svn")
205       system "svn commit"
206     end
207   end
208  
209 end
210
211 # Run specific tests or test files. Searches nested spec directories as well.
212 #
213 # Based on a technique popularized by Geoffrey Grosenbach
214 rule "" do |t|
215   spec_cmd = (RUBY_PLATFORM =~ /java/) ? "jruby -S spec" : "spec"
216   # spec:spec_file:spec_name
217   if /spec:(.*)$/.match(t.name)
218     arguments = t.name.split(':')
219    
220     file_name = arguments[1]
221     spec_name = arguments[2..-1]
222
223     spec_filename = "#{file_name}_spec.rb"
224     specs = Dir["spec/merb/**/#{spec_filename}"]
225    
226     if path = specs.detect { |f| spec_filename == File.basename(f) }
227       run_file_name = path
228     else
229       puts "No specs found for #{t.name.inspect}"
230       exit
231     end
232
233     example = " -e '#{spec_name}'" unless spec_name.empty?
234    
235     sh "#{spec_cmd} #{run_file_name} --format specdoc --colour #{example}"
236   end
237 end
Note: See TracBrowser for help on using the browser.