1 # rakefile for acts_as_ferret.
2 # use to create a gem or generate rdoc api documentation.
5 # rake release REL=x.y.z
8 require 'rake/rdoctask'
9 require 'rake/packagetask'
10 require 'rake/gempackagetask'
11 require 'rake/testtask'
12 require 'rake/contrib/rubyforgepublisher'
19 PKG_NAME = 'acts_as_ferret'
20 PKG_VERSION = ENV['REL']
21 PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
22 RUBYFORGE_PROJECT = 'actsasferret'
23 RUBYFORGE_USER = 'jkraemer'
25 desc 'Default: run unit tests.'
26 task :default => :test
28 desc 'Test the acts_as_ferret plugin.'
29 Rake::TestTask.new(:test) do |t|
31 t.pattern = 'test/**/*_test.rb'
35 desc 'Generate documentation for the acts_as_ferret plugin.'
36 Rake::RDocTask.new(:rdoc) do |rdoc|
37 rdoc.rdoc_dir = 'html'
38 rdoc.title = "acts_as_ferret - Ferret based full text search for any ActiveRecord model"
39 rdoc.options << '--line-numbers' << '--inline-source'
40 rdoc.options << '--main' << 'README'
41 rdoc.rdoc_files.include('README', 'LICENSE')
42 rdoc.template = "#{ENV['template']}.rb" if ENV['template']
43 rdoc.rdoc_files.include('lib/**/*.rb')
46 desc "Publish the API documentation"
47 task :pdoc => [:rdoc] do
48 Rake::RubyForgePublisher.new(RUBYFORGE_PROJECT, RUBYFORGE_USER).upload
52 spec = Gem::Specification.new do |s|
54 s.version = PKG_VERSION
55 s.platform = Gem::Platform::RUBY
56 s.summary = "acts_as_ferret - Ferret based full text search for any ActiveRecord model"
57 s.files = Dir.glob('**/*', File::FNM_DOTMATCH).reject do |f|
58 [ /\.$/, /sqlite$/, /\.log$/, /^pkg/, /\.svn/, /\.\w+\.sw.$/,
59 /^html/, /\~$/, /\/\._/, /\/#/ ].any? {|regex| f =~ regex }
61 #s.files = FileList["{lib,test}/**/*"].to_a + %w(README MIT-LICENSE CHANGELOG)
63 s.require_path = 'lib'
64 s.autorequire = 'acts_as_ferret'
66 # s.test_files = Dir['test/**/*_test.rb']
67 s.author = "Jens Kraemer"
68 s.email = "jk@jkraemer.net"
69 s.homepage = "http://projects.jkraemer.net/acts_as_ferret"
72 package_task = Rake::GemPackageTask.new(spec) do |pkg|
76 # Validate that everything is ready to go for a release.
79 announce "**************************************************************"
80 announce "* Making RubyGem Release #{PKG_VERSION}"
81 announce "**************************************************************"
83 # Are all source files checked in?
85 announce "Release Task Testing, skipping checked-in file test"
87 announce "Pulling in svn..."
89 announce "Checking for unchecked-in files..."
92 fail "SVK status is not clean ... do you have unchecked-in files?"
94 announce "No outstanding checkins found ... OK"
95 # announce "Pushing to svn..."
101 desc "tag the new release"
102 task :tag => [ :prerelease ] do
103 reltag = "REL_#{PKG_VERSION.gsub(/\./, '_')}"
104 reltag << ENV['REUSE'].gsub(/\./, '_') if ENV['REUSE']
105 announce "Tagging with [#{PKG_VERSION}]"
107 announce "Release Task Testing, skipping tagging"
109 `svn copy -m 'tagging version #{PKG_VERSION}' svn://projects.jkraemer.net/acts_as_ferret/trunk/plugin svn://projects.jkraemer.net/acts_as_ferret/tags/#{PKG_VERSION}`
110 `svn del -m 'remove old stable' svn://projects.jkraemer.net/acts_as_ferret/tags/stable`
111 `svn copy -m 'tagging version #{PKG_VERSION} as stable' svn://projects.jkraemer.net/acts_as_ferret/tags/#{PKG_VERSION} svn://projects.jkraemer.net/acts_as_ferret/tags/stable`
115 # Upload release to rubyforge
116 desc "Upload release to rubyforge"
117 task :prel => [ :tag, :prerelease, :package ] do
119 release_command = "rubyforge add_release #{RUBYFORGE_PROJECT} #{PKG_NAME} '#{PKG_VERSION}' pkg/#{PKG_NAME}-#{PKG_VERSION}.gem"
121 system(release_command)
122 `rubyforge config #{RUBYFORGE_PROJECT}`
123 release_command = "rubyforge add_file #{RUBYFORGE_PROJECT} #{PKG_NAME} '#{PKG_VERSION}' pkg/#{PKG_NAME}-#{PKG_VERSION}.tgz"
125 system(release_command)
128 desc 'Publish the gem and API docs'
129 task :release => [:pdoc, :prel ]