1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
|
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# the default task is to run both the unit and functional tests
# functional tests require that a solr test server is running
# but this Rakefil should take care of starting and stopping it
# for you
#
# if you just want to run unit tests:
#
# rake test_units
#
# and if you just want to run functional tests
#
# rake test_functionals
#
# if you would like to see solr startup messages on STDERR
# when starting solr test server during functional tests use:
#
# rake SOLR_CONSOLE=true
SOLR_RUBY_VERSION = '0.0.8'
require 'rubygems'
require 'rake'
require 'rake/testtask'
require 'rake/rdoctask'
require 'rake/packagetask'
require 'rake/gempackagetask'
require 'test/functional/test_solr_server'
task :default => [:test_units]
SOLR_PARAMS = {
:quiet => ENV['SOLR_CONSOLE'] ? false : true,
:jetty_home => ENV['SOLR_JETTY_HOME'] || File.expand_path('../../../example'),
:jetty_port => ENV['SOLR_JETTY_PORT'] || 8888,
:solr_home => ENV['SOLR_HOME'] || File.expand_path('test')
}
spec = Gem::Specification.new do |s|
s.name = 'solr-ruby'
s.version = SOLR_RUBY_VERSION
s.author = 'Apache Solr'
s.email = 'ruby-dev@lucene.apache.org'
s.homepage = 'http://wiki.apache.org/solr/solr-ruby'
s.platform = Gem::Platform::RUBY
s.summary = 'Ruby library for working with Apache Solr'
# Omit functional tests from gem for now, as that requires a Solr instance
s.files = Dir.glob("lib/**/*").concat(Dir.glob("test/unit/**/*"))
s.require_path = 'lib'
s.autorequire = 'solr'
s.has_rdoc = true
end
namespace :gem do
Rake::GemPackageTask.new(spec) do |pkg|
pkg.need_zip = true
pkg.need_tar = true
pkg.package_dir = "pkg/gem"
end
end
namespace :rails do
desc "Creates rails plugin structure and distributable packages. init.rb is created and removed on the fly."
task :package => "init.rb" do
File.rm_f("init.rb")
end
Rake::PackageTask.new("solr-ruby-rails", SOLR_RUBY_VERSION) do |pkg|
pkg.need_zip = true
pkg.need_tar = true
pkg.package_dir = "pkg/rails"
pkg.package_files.include("lib/**/*.rb", "test/unit/**/*.rb", "init.rb", "LICENSE.txt", "README")
end
file "init.rb" do
open("init.rb", "w") do |file|
file.puts LICENSE
file.puts "require 'solr.rb'"
end
end
desc "Install the Rails plugin version into the vendor/plugins dir. Need to set PLUGINS_DIR environment variable."
task :install_solr_ruby => :package do
plugins_dir = ENV["PLUGINS_DIR"] or raise "You must set PLUGINS_DIR"
mkdir File.join(plugins_dir, "solr-ruby-rails-#{SOLR_RUBY_VERSION}/") rescue nil
File.cp_r(File.join("pkg","rails", "solr-ruby-rails-#{SOLR_RUBY_VERSION}/"), plugins_dir)
end
end
task :package => ["rails:package", "gem:package"]
task :repackage => [:clobber_package, :package]
task :clobber_package => ["rails:clobber_package", "gem:clobber_package"] do rm_r "pkg" rescue nil end
task :clobber => [:clobber_package]
desc "Generate rdoc documentation"
Rake::RDocTask.new('doc') do |rd|
rd.rdoc_files.include("lib/**/*.rb")
rd.rdoc_files.include('README', 'CHANGES.yml', 'LICENSE.txt')
rd.main = 'README'
rd.rdoc_dir = 'doc'
end
desc "Run unit tests"
Rake::TestTask.new(:test_units) do |t|
t.pattern = 'test/unit/*_test.rb'
t.verbose = true
t.ruby_opts = ['-r solr', '-r test/unit', '-Itest/unit']
end
# NOTE: test_functionals does not work standalone currently. It needs the TestSolrServer wrapper in the :test task
Rake::TestTask.new(:test_functionals) do |t|
t.pattern = 'test/functional/*_test.rb'
t.verbose = true
t.ruby_opts = ['-r solr', '-r test/unit', '-Itest/functional']
end
desc "Run unit and functional tests"
task :test => [:test_units] do
rm_rf "test/data" # remove functional test temp data directory
# wrap functional tests with a test-specific Solr server
got_error = TestSolrServer.wrap(SOLR_PARAMS) do
Rake::Task[:test_functionals].invoke
end
raise "test failures" if got_error
end
# TODO: consider replacing system() to rcov with the included
# Rake task: http://eigenclass.org/hiki.rb?cmd=view&p=rcov+FAQ&key=rake
namespace :test do
desc 'Measures test coverage'
# borrowed from here: http://clarkware.com/cgi/blosxom/2007/01/05#RcovRakeTask
task :coverage do
rm_rf "coverage"
rm_rf "coverage.data"
TestSolrServer.wrap(SOLR_PARAMS) do
system("rcov --aggregate coverage.data --text-summary -Ilib:test/functional test/functional/*_test.rb")
end
system("rcov --aggregate coverage.data --text-summary -Ilib:test/unit test/unit/*_test.rb")
system("open coverage/index.html") if PLATFORM['darwin']
end
end
def egrep(pattern)
Dir['**/*.rb'].each do |fn|
count = 0
open(fn) do |f|
while line = f.gets
count += 1
if line =~ pattern
puts "#{fn}:#{count}:#{line}"
end
end
end
end
end
desc "Report TODO/FIXME/TBD tags in the code"
task :todo do
egrep /#.*(FIXME|TODO|TBD)/
end
LICENSE = <<STR
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
STR
|