Rakefile in thorero-0.9.4.4 vs Rakefile in thorero-0.9.4.5
- old
+ new
@@ -1,185 +1,352 @@
-#!/usr/bin/env ruby
-require 'pathname'
-require 'rubygems'
-require 'rake'
+require "rake"
require "rake/clean"
require "rake/gempackagetask"
+require "rake/rdoctask"
+require "rake/testtask"
+require "spec/rake/spectask"
require "fileutils"
-require Pathname('spec/rake/spectask')
-require Pathname('lib/extlib/version')
+require "extlib"
-ROOT = Pathname(__FILE__).dirname.expand_path
+def __DIR__
+ File.dirname(__FILE__)
+end
+require __DIR__ + "/tools/rakehelp"
+require __DIR__ + "/tools/annotation_extract"
+
+include FileUtils
+
+require "lib/merb-core/version"
+require "lib/merb-core/test/run_specs"
+require 'lib/merb-core/tasks/merb_rake_helper'
+
##############################################################################
# Package && release
##############################################################################
RUBY_FORGE_PROJECT = "thorero"
-PROJECT_URL = "http://thorero.rubyforge.org"
-PROJECT_SUMMARY = "DataMapper and Merb support library."
+PROJECT_URL = "http://merbivore.com"
+PROJECT_SUMMARY = "Merb. Pocket rocket web framework."
PROJECT_DESCRIPTION = PROJECT_SUMMARY
AUTHOR = "test"
-EMAIL = "test@gmail.com"
+EMAIL = "test@test.test"
GEM_NAME = "thorero"
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
-GEM_VERSION = Extlib::VERSION + PKG_BUILD
+GEM_VERSION = Merb::VERSION + PKG_BUILD
RELEASE_NAME = "REL #{GEM_VERSION}"
-require "lib/extlib/tasks/release"
+require "extlib/tasks/release"
spec = Gem::Specification.new do |s|
s.name = GEM_NAME
s.version = GEM_VERSION
s.platform = Gem::Platform::RUBY
s.author = AUTHOR
s.email = EMAIL
s.homepage = PROJECT_URL
s.summary = PROJECT_SUMMARY
+ s.bindir = "bin"
s.description = PROJECT_DESCRIPTION
+ s.executables = %w( merb )
s.require_path = "lib"
- s.files = ["LICENSE", "README.txt", "Rakefile"] + Dir["lib/**/*"]
+ s.files = %w( LICENSE README Rakefile TODO ) + Dir["{docs,bin,spec,lib,examples,app_generators,merb_generators,merb_default_generators,rspec_generators,test_unit_generators,script}/**/*"]
# rdoc
- s.has_rdoc = false
- s.extra_rdoc_files = ["LICENSE", "README.txt"]
+ s.has_rdoc = true
+ s.extra_rdoc_files = %w( README LICENSE TODO )
+ #s.rdoc_options += RDOC_OPTS + ["--exclude", "^(app|uploads)"]
# Dependencies
- s.add_dependency "english", ">=0.2.0"
+ s.add_dependency "extlib", ">=0.9.3"
+ s.add_dependency "erubis"
+ s.add_dependency "rake"
+ s.add_dependency "json_pure"
+ s.add_dependency "rspec"
+ s.add_dependency "rack"
+ s.add_dependency "mime-types"
+ # Requirements
+ s.requirements << "install the json gem to get faster json parsing"
+ s.required_ruby_version = ">= 1.8.4"
end
Rake::GemPackageTask.new(spec) do |package|
package.gem_spec = spec
end
-desc 'Remove all package, docs and spec products'
-task :clobber_all => %w[ clobber_package clobber_doc extlib:clobber_spec ]
+desc "Run :package and install the resulting .gem"
+task :install => :package do
+ sh %{#{sudo} gem install #{install_home} --local pkg/#{GEM_NAME}-#{GEM_VERSION}.gem --no-rdoc --no-ri}
+end
+desc "Run :package and install the resulting .gem with jruby"
+task :jinstall => :package do
+ sh %{#{sudo} jruby -S gem install #{install_home} pkg/#{NAME}-#{Merb::VERSION}.gem --no-rdoc --no-ri}
+end
+
+desc "Run :clean and uninstall the .gem"
+task :uninstall => :clean do
+ sh %{#{sudo} gem uninstall #{NAME}}
+end
+
+CLEAN.include ["**/.*.sw?", "pkg", "lib/*.bundle", "*.gem", "doc/rdoc", ".config", "coverage", "cache"]
+
+desc "Run the specs."
+task :default => :specs
+
+task :merb => [:clean, :rdoc, :package]
+
##############################################################################
-# Specs and continous integration
+# Github
##############################################################################
-task :default => 'extlib:spec'
-task :spec => 'extlib:spec'
+namespace :github do
+ desc "Update Github Gemspec"
+ task :update_gemspec do
+ skip_fields = %w(new_platform original_platform)
+ integer_fields = %w(specification_version)
-namespace :extlib do
- Spec::Rake::SpecTask.new(:spec) do |t|
- t.spec_opts << '--format' << 'specdoc' << '--colour'
- t.spec_opts << '--loadby' << 'random'
- t.spec_files = Pathname.glob(ENV['FILES'] || 'spec/**/*_spec.rb')
-
- begin
- t.rcov = ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true
- t.rcov_opts << '--exclude' << 'spec'
- t.rcov_opts << '--text-summary'
- t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
- rescue Exception
- # rcov not installed
+ result = "Gem::Specification.new do |s|\n"
+ spec.instance_variables.each do |ivar|
+ value = spec.instance_variable_get(ivar)
+ name = ivar.split("@").last
+ next if skip_fields.include?(name) || value.nil? || value == "" || (value.respond_to?(:empty?) && value.empty?)
+ if name == "dependencies"
+ value.each do |d|
+ dep, *ver = d.to_s.split(" ")
+ result << " s.add_dependency #{dep.inspect}, #{ver.join(" ").inspect.gsub(/[()]/, "")}\n"
+ end
+ else
+ case value
+ when Array
+ value = name != "files" ? value.inspect : value.inspect.split(",").join(",\n")
+ when String
+ value = value.to_i if integer_fields.include?(name)
+ value = value.inspect
+ else
+ value = value.to_s.inspect
+ end
+ result << " s.#{name} = #{value}\n"
+ end
end
+ result << "end"
+ File.open(File.join(File.dirname(__FILE__), "#{spec.name}.gemspec"), "w"){|f| f << result}
end
end
-
##############################################################################
# Documentation
##############################################################################
-desc "Generate documentation"
-task :doc do
- begin
- require 'yard'
- exec 'yardoc'
- rescue LoadError
- puts 'You will need to install the latest version of Yard to generate the
- documentation for extlib.'
+task :doc => [:rdoc]
+namespace :doc do
+
+ Rake::RDocTask.new do |rdoc|
+ files = ["README", "LICENSE", "CHANGELOG", "lib/**/*.rb"]
+ rdoc.rdoc_files.add(files)
+ rdoc.main = "README"
+ rdoc.title = "Merb Docs"
+ rdoc.template = __DIR__ + "/tools/allison-2.0.2/lib/allison.rb"
+ rdoc.rdoc_dir = "doc/rdoc"
+ rdoc.options << "--line-numbers" << "--inline-source"
end
-end
-WINDOWS = (RUBY_PLATFORM =~ /win32|mingw|bccwin|cygwin/) rescue nil
-SUDO = WINDOWS ? '' : ('sudo' unless ENV['SUDOLESS'])
+ desc "run webgen"
+ task :webgen do
+ sh %{cd doc/site; webgen}
+ end
+ desc "rdoc to rubyforge"
+ task :rubyforge do
+ # sh %{rake doc}
+ sh %{#{sudo} chmod -R 755 doc} unless windows?
+ sh %{/usr/bin/scp -r -p doc/rdoc/* ezmobius@rubyforge.org:/var/www/gforge-projects/merb}
+ end
-desc "Install #{GEM_NAME}"
-task :install => :package do
- sh %{#{SUDO} gem install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources}
end
-if WINDOWS
- namespace :dev do
- desc 'Install for development (for windows)'
- task :winstall => :gem do
- system %{gem install --no-rdoc --no-ri -l pkg/#{GEM_NAME}-#{GEM_VERSION}.gem}
- end
+##############################################################################
+# rSpec & rcov
+##############################################################################
+desc "Run :specs, :rcov"
+task :aok => [:specs, :rcov]
+
+# desc "Run all specs"
+# Spec::Rake::SpecTask.new("specs") do |t|
+# t.spec_opts = ["--format", "specdoc", "--colour"]
+# t.spec_files = Dir["spec/**/*_spec.rb"].sort
+# end
+
+def setup_specs(name, spec_cmd='spec', run_opts = "-c -f s")
+ desc "Run all specs (#{name})"
+ task "specs:#{name}" do
+ run_specs("spec/**/*_spec.rb", spec_cmd, ENV['RSPEC_OPTS'] || run_opts)
end
-end
-namespace :ci do
+ desc "Run private specs (#{name})"
+ task "specs:#{name}:private" do
+ run_specs("spec/private/**/*_spec.rb", spec_cmd, ENV['RSPEC_OPTS'] || run_opts)
+ end
- task :prepare do
- rm_rf ROOT + "ci"
- mkdir_p ROOT + "ci"
- mkdir_p ROOT + "ci/doc"
- mkdir_p ROOT + "ci/cyclomatic"
- mkdir_p ROOT + "ci/token"
+ desc "Run public specs (#{name})"
+ task "specs:#{name}:public" do
+ run_specs("spec/public/**/*_spec.rb", spec_cmd, ENV['RSPEC_OPTS'] || run_opts)
end
- task :publish do
- out = ENV['CC_BUILD_ARTIFACTS'] || "out"
- mkdir_p out unless File.directory? out
+ # With profiling formatter
+ desc "Run all specs (#{name}) with profiling formatter"
+ task "specs:#{name}_profiled" do
+ run_specs("spec/**/*_spec.rb", spec_cmd, "-c -f o")
+ end
- mv "ci/unit_rspec_report.html", "#{out}/unit_rspec_report.html"
- mv "ci/unit_coverage", "#{out}/unit_coverage"
- mv "ci/integration_rspec_report.html", "#{out}/integration_rspec_report.html"
- mv "ci/integration_coverage", "#{out}/integration_coverage"
- mv "ci/doc", "#{out}/doc"
- mv "ci/cyclomatic", "#{out}/cyclomatic_complexity"
- mv "ci/token", "#{out}/token_complexity"
+ desc "Run private specs (#{name}) with profiling formatter"
+ task "specs:#{name}_profiled:private" do
+ run_specs("spec/private/**/*_spec.rb", spec_cmd, "-c -f o")
end
+ desc "Run public specs (#{name}) with profiling formatter"
+ task "specs:#{name}_profiled:public" do
+ run_specs("spec/public/**/*_spec.rb", spec_cmd, "-c -f o")
+ end
+end
- Spec::Rake::SpecTask.new("spec:unit" => :prepare) do |t|
- t.spec_opts = ["--format", "specdoc", "--format", "html:#{ROOT}/ci/unit_rspec_report.html", "--diff"]
- t.spec_files = Pathname.glob(ROOT + "spec/unit/**/*_spec.rb")
- unless ENV['NO_RCOV']
- t.rcov = true
- t.rcov_opts << '--exclude' << "spec,gems"
- t.rcov_opts << '--text-summary'
- t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
- t.rcov_opts << '--only-uncovered'
- end
+setup_specs("mri", "spec")
+setup_specs("jruby", "jruby -S spec")
+
+task "specs" => ["specs:mri"]
+task "specs:private" => ["specs:mri:private"]
+task "specs:public" => ["specs:mri:public"]
+
+desc "Run coverage suite"
+task :rcov do
+ require 'fileutils'
+ FileUtils.rm_rf("coverage") if File.directory?("coverage")
+ FileUtils.mkdir("coverage")
+ path = File.expand_path(Dir.pwd)
+ files = Dir["spec/**/*_spec.rb"]
+ files.each do |spec|
+ puts "Getting coverage for #{File.expand_path(spec)}"
+ command = %{rcov #{File.expand_path(spec)} --aggregate #{path}/coverage/data.data --exclude ".*" --include-file "lib/merb-core(?!\/vendor)"}
+ command += " --no-html" unless spec == files.last
+ `#{command} 2>&1`
end
+end
- Spec::Rake::SpecTask.new("spec:integration" => :prepare) do |t|
- t.spec_opts = ["--format", "specdoc", "--format", "html:#{ROOT}/ci/integration_rspec_report.html", "--diff"]
- t.spec_files = Pathname.glob(ROOT + "spec/integration/**/*_spec.rb")
- unless ENV['NO_RCOV']
- t.rcov = true
- t.rcov_opts << '--exclude' << "spec,gems"
- t.rcov_opts << '--text-summary'
- t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
- t.rcov_opts << '--only-uncovered'
- end
+desc "Run a specific spec with TASK=xxxx"
+Spec::Rake::SpecTask.new("spec") do |t|
+ t.spec_opts = ["--format", "specdoc", "--colour"]
+ t.libs = ["lib", "server/lib" ]
+ t.spec_files = (ENV["TASK"] || '').split(',').map do |task|
+ "spec/**/#{task}_spec.rb"
end
+end
- task :spec do
- Rake::Task["ci:spec:unit"].invoke
- mv ROOT + "coverage", ROOT + "ci/unit_coverage"
+desc "Run all specs output html"
+Spec::Rake::SpecTask.new("specs_html") do |t|
+ t.spec_opts = ["--format", "html"]
+ t.libs = ["lib", "server/lib" ]
+ t.spec_files = Dir["spec/**/*_spec.rb"].sort
+end
- Rake::Task["ci:spec:integration"].invoke
- mv ROOT + "coverage", ROOT + "ci/integration_coverage"
+# desc "RCov"
+# Spec::Rake::SpecTask.new("rcov") do |t|
+# t.rcov_opts = ["--exclude", "gems", "--exclude", "spec"]
+# t.spec_opts = ["--format", "specdoc", "--colour"]
+# t.spec_files = Dir["spec/**/*_spec.rb"].sort
+# t.libs = ["lib", "server/lib"]
+# t.rcov = true
+# end
+
+STATS_DIRECTORIES = [
+ ['Code', 'lib/'],
+ ['Unit tests', 'spec']
+].collect { |name, dir| [ name, "./#{dir}" ] }.
+ select { |name, dir| File.directory?(dir) }
+
+desc "Report code statistics (KLOCs, etc) from the application"
+task :stats do
+ require __DIR__ + "/tools/code_statistics"
+ # require "extra/stats"
+ verbose = true
+ CodeStatistics.new(*STATS_DIRECTORIES).to_s
+end
+
+##############################################################################
+# SYNTAX CHECKING
+##############################################################################
+
+task :check_syntax do
+ `find . -name "*.rb" |xargs -n1 ruby -c |grep -v "Syntax OK"`
+ puts "* Done"
+end
+
+##############################################################################
+# SVN
+##############################################################################
+namespace :repo do
+
+ desc "Add new files to repository"
+ task :add do
+ if File.directory?(".git")
+ system "git add *"
+ elsif File.directory?(".svn")
+ system "svn status | grep '^\?' | sed -e 's/? *//' | sed -e 's/ /\ /g' | xargs svn add"
+ end
end
- task :doc do
- require 'yardoc'
- sh 'yardoc'
+ desc "Fetch changes from master repository"
+ task :rebase do
+ if File.directory?(".git")
+ system "git stash ; git svn rebase ; git stash apply"
+ elsif File.directory?(".svn")
+ system "svn update"
+ end
end
- task :saikuro => :prepare do
- system "saikuro -c -i lib -y 0 -w 10 -e 15 -o ci/cyclomatic"
- mv 'ci/cyclomatic/index_cyclo.html', 'ci/cyclomatic/index.html'
+ desc "commit modified changes to the repository"
+ task :commit do
+ if File.directory?(".git")
+ system "git commit"
+ elsif File.directory?(".svn")
+ system "svn commit"
+ end
+ end
- system "saikuro -t -i lib -y 0 -w 20 -e 30 -o ci/token"
- mv 'ci/token/index_token.html', 'ci/token/index.html'
+end
+
+# Run specific tests or test files. Searches nested spec directories as well.
+#
+# Based on a technique popularized by Geoffrey Grosenbach
+rule "" do |t|
+ spec_cmd = (RUBY_PLATFORM =~ /java/) ? "jruby -S spec" : "spec"
+ # spec:spec_file:spec_name
+ if /spec:(.*)$/.match(t.name)
+ arguments = t.name.split(':')
+
+ file_name = arguments[1]
+ spec_name = arguments[2..-1]
+
+ spec_filename = "#{file_name}_spec.rb"
+ specs = Dir["spec/**/#{spec_filename}"]
+
+ if path = specs.detect { |f| spec_filename == File.basename(f) }
+ run_file_name = path
+ else
+ puts "No specs found for #{t.name.inspect}"
+ exit
+ end
+
+ example = " -e '#{spec_name}'" unless spec_name.empty?
+
+ sh "#{spec_cmd} #{run_file_name} --format specdoc --colour #{example}"
end
end
-task :ci => ["ci:spec", "ci:doc", "ci:saikuro", :install, :publish]
+
+namespace :tools do
+ namespace :tags do
+ desc "Generates Emacs tags using Exuberant Ctags."
+ task :emacs do
+ sh "ctags -e --Ruby-kinds=-f -o TAGS -R lib"
+ end
+ end
+end