2004-11-24 01:04:44 +00:00
require 'rubygems'
require 'rake'
require 'rake/testtask'
require 'rake/rdoctask'
require 'rake/packagetask'
require 'rake/gempackagetask'
require 'rake/contrib/rubyforgepublisher'
2005-10-10 14:33:44 +00:00
require File . join ( File . dirname ( __FILE__ ) , 'lib' , 'action_pack' , 'version' )
2004-11-24 01:04:44 +00:00
PKG_BUILD = ENV [ 'PKG_BUILD' ] ? '.' + ENV [ 'PKG_BUILD' ] : ''
PKG_NAME = 'actionpack'
2005-11-17 00:32:16 +00:00
PKG_VERSION = ActionPack :: VERSION :: STRING + PKG_BUILD
2004-11-24 01:04:44 +00:00
PKG_FILE_NAME = " #{ PKG_NAME } - #{ PKG_VERSION } "
2005-03-27 13:33:54 +00:00
RELEASE_NAME = " REL #{ PKG_VERSION } "
RUBY_FORGE_PROJECT = " actionpack "
RUBY_FORGE_USER = " webster132 "
2004-11-24 01:04:44 +00:00
desc " Default Task "
task :default = > [ :test ]
# Run the unit tests
Rake :: TestTask . new { | t |
t . libs << " test "
2005-01-10 22:58:06 +00:00
# make sure we include the controller tests (c*) first as on some systems
# this will not happen automatically and the tests (as a whole) will error
t . test_files = Dir . glob ( " test/c*/*_test.rb " ) + Dir . glob ( " test/[ft]*/*_test.rb " )
# t.pattern = 'test/*/*_test.rb'
2004-11-24 01:04:44 +00:00
t . verbose = true
}
2006-02-09 09:17:40 +00:00
desc 'ActiveRecord Integration Tests'
Rake :: TestTask . new ( :test_active_record_integration ) do | t |
t . libs << " test "
t . test_files = Dir . glob ( " test/activerecord/*_test.rb " )
t . verbose = true
end
2004-11-24 01:04:44 +00:00
# Genereate the RDoc documentation
Rake :: RDocTask . new { | rdoc |
rdoc . rdoc_dir = 'doc'
rdoc . title = " Action Pack -- On rails from request to response "
2006-02-26 00:04:04 +00:00
rdoc . options << '--line-numbers' << '--inline-source' << '--main README'
2005-03-27 14:10:42 +00:00
rdoc . template = " #{ ENV [ 'template' ] } .rb " if ENV [ 'template' ]
2004-11-24 01:04:44 +00:00
rdoc . rdoc_files . include ( 'README' , 'RUNNING_UNIT_TESTS' , 'CHANGELOG' )
rdoc . rdoc_files . include ( 'lib/**/*.rb' )
}
# Create compressed packages
dist_dirs = [ " lib " , " test " , " examples " ]
spec = Gem :: Specification . new do | s |
s . platform = Gem :: Platform :: RUBY
s . name = PKG_NAME
s . version = PKG_VERSION
s . summary = " Web-flow and rendering framework putting the VC in MVC. "
2005-02-15 15:57:44 +00:00
s . description = %q{ Eases web-request routing, handling, and response as a half-way front, half-way page controller. Implemented with specific emphasis on enabling easy unit/integration testing that doesn't require a browser. } #'
2004-11-24 01:04:44 +00:00
s . author = " David Heinemeier Hansson "
s . email = " david@loudthinking.com "
s . rubyforge_project = " actionpack "
2005-01-04 12:35:10 +00:00
s . homepage = " http://www.rubyonrails.org "
2004-11-24 01:04:44 +00:00
s . has_rdoc = true
s . requirements << 'none'
2005-02-15 15:57:44 +00:00
2006-02-05 00:59:57 +00:00
s . add_dependency ( 'activesupport' , '= 1.2.5' + PKG_BUILD )
2005-02-15 15:57:44 +00:00
2004-11-24 01:04:44 +00:00
s . require_path = 'lib'
s . autorequire = 'action_controller'
s . files = [ " rakefile " , " install.rb " , " README " , " RUNNING_UNIT_TESTS " , " CHANGELOG " , " MIT-LICENSE " , " examples/.htaccess " ]
dist_dirs . each do | dir |
2004-11-25 16:31:27 +00:00
s . files = s . files + Dir . glob ( " #{ dir } /**/* " ) . delete_if { | item | item . include? ( " \ .svn " ) }
2004-11-24 01:04:44 +00:00
end
s . files . delete " examples/benchmark.rb "
s . files . delete " examples/benchmark_with_ar.fcgi "
end
Rake :: GemPackageTask . new ( spec ) do | p |
p . gem_spec = spec
p . need_tar = true
p . need_zip = true
end
2005-04-13 05:06:40 +00:00
task :lines do
lines , codelines , total_lines , total_codelines = 0 , 0 , 0 , 0
for file_name in FileList [ " lib/**/*.rb " ]
next if file_name =~ / vendor /
f = File . open ( file_name )
while line = f . gets
lines += 1
next if line =~ / ^ \ s*$ /
next if line =~ / ^ \ s* # /
codelines += 1
end
puts " L: #{ sprintf ( " %4d " , lines ) } , LOC #{ sprintf ( " %4d " , codelines ) } | #{ file_name } "
total_lines += lines
total_codelines += codelines
lines , codelines = 0 , 0
end
puts " Total: Lines #{ total_lines } , LOC #{ total_codelines } "
end
2005-07-02 06:23:35 +00:00
# Publishing ------------------------------------------------------
task :update_scriptaculous do
2006-03-04 17:12:03 +00:00
for js in %w( controls dragdrop effects )
2006-03-06 19:45:02 +00:00
system ( " svn export --force http://dev.rubyonrails.org/svn/rails/spinoffs/scriptaculous/src/ #{ js } .js #{ File . dirname ( __FILE__ ) } /lib/action_view/helpers/javascripts/ #{ js } .js " )
2006-03-04 17:12:03 +00:00
end
2005-07-02 06:23:35 +00:00
end
desc " Updates actionpack to the latest version of the javascript spinoffs "
2006-03-04 17:12:03 +00:00
task :update_js = > [ :update_scriptaculous ]
2004-11-24 01:04:44 +00:00
2005-03-27 13:33:54 +00:00
# Publishing ------------------------------------------------------
2004-11-24 01:04:44 +00:00
desc " Publish the API documentation "
task :pgem = > [ :package ] do
2005-05-19 16:42:47 +00:00
Rake :: SshFilePublisher . new ( " davidhh@wrath.rubyonrails.org " , " public_html/gems/gems " , " pkg " , " #{ PKG_FILE_NAME } .gem " ) . upload
` ssh davidhh@wrath.rubyonrails.org './gemupdate.sh' `
2004-11-24 01:04:44 +00:00
end
desc " Publish the API documentation "
task :pdoc = > [ :rdoc ] do
2005-05-19 16:42:47 +00:00
Rake :: SshDirPublisher . new ( " davidhh@wrath.rubyonrails.org " , " public_html/ap " , " doc " ) . upload
2004-11-24 01:04:44 +00:00
end
2005-03-27 13:33:54 +00:00
desc " Publish the release files to RubyForge. "
task :release = > [ :package ] do
files = [ " gem " , " tgz " , " zip " ] . map { | ext | " pkg/ #{ PKG_FILE_NAME } . #{ ext } " }
if RUBY_FORGE_PROJECT then
require 'net/http'
require 'open-uri'
project_uri = " http://rubyforge.org/projects/ #{ RUBY_FORGE_PROJECT } / "
project_data = open ( project_uri ) { | data | data . read }
group_id = project_data [ / [?&]group_id=( \ d+) / , 1 ]
raise " Couldn't get group id " unless group_id
# This echos password to shell which is a bit sucky
if ENV [ " RUBY_FORGE_PASSWORD " ]
password = ENV [ " RUBY_FORGE_PASSWORD " ]
else
print " #{ RUBY_FORGE_USER } @rubyforge.org's password: "
password = STDIN . gets . chomp
end
2004-11-24 01:04:44 +00:00
2005-03-27 13:33:54 +00:00
login_response = Net :: HTTP . start ( " rubyforge.org " , 80 ) do | http |
data = [
" login=1 " ,
" form_loginname= #{ RUBY_FORGE_USER } " ,
" form_pw= #{ password } "
] . join ( " & " )
http . post ( " /account/login.php " , data )
2004-11-24 01:04:44 +00:00
end
2005-03-27 13:33:54 +00:00
cookie = login_response [ " set-cookie " ]
raise " Login failed " unless cookie
headers = { " Cookie " = > cookie }
release_uri = " http://rubyforge.org/frs/admin/?group_id= #{ group_id } "
release_data = open ( release_uri , headers ) { | data | data . read }
package_id = release_data [ / [?&]package_id=( \ d+) / , 1 ]
raise " Couldn't get package id " unless package_id
first_file = true
release_id = " "
files . each do | filename |
basename = File . basename ( filename )
file_ext = File . extname ( filename )
file_data = File . open ( filename , " rb " ) { | file | file . read }
puts " Releasing #{ basename } ... "
release_response = Net :: HTTP . start ( " rubyforge.org " , 80 ) do | http |
release_date = Time . now . strftime ( " %Y-%m-%d %H:%M " )
type_map = {
" .zip " = > " 3000 " ,
" .tgz " = > " 3110 " ,
" .gz " = > " 3110 " ,
" .gem " = > " 1400 "
} ; type_map . default = " 9999 "
type = type_map [ file_ext ]
boundary = " rubyqMY6QN9bp6e4kS21H4y0zxcvoor "
query_hash = if first_file then
{
" group_id " = > group_id ,
" package_id " = > package_id ,
" release_name " = > RELEASE_NAME ,
" release_date " = > release_date ,
" type_id " = > type ,
" processor_id " = > " 8000 " , # Any
" release_notes " = > " " ,
" release_changes " = > " " ,
" preformatted " = > " 1 " ,
" submit " = > " 1 "
}
else
{
" group_id " = > group_id ,
" release_id " = > release_id ,
" package_id " = > package_id ,
" step2 " = > " 1 " ,
" type_id " = > type ,
" processor_id " = > " 8000 " , # Any
" submit " = > " Add This File "
}
end
query = " ? " + query_hash . map do | ( name , value ) |
[ name , URI . encode ( value ) ] . join ( " = " )
end . join ( " & " )
data = [
" -- " + boundary ,
" Content-Disposition: form-data; name= \" userfile \" ; filename= \" #{ basename } \" " ,
" Content-Type: application/octet-stream " ,
" Content-Transfer-Encoding: binary " ,
" " , file_data , " "
] . join ( " \x0D \x0A " )
release_headers = headers . merge (
" Content-Type " = > " multipart/form-data; boundary= #{ boundary } "
)
target = first_file ? " /frs/admin/qrs.php " : " /frs/admin/editrelease.php "
http . post ( target + query , data , release_headers )
end
if first_file then
release_id = release_response . body [ / release_id=( \ d+) / , 1 ]
raise ( " Couldn't get release id " ) unless release_id
end
first_file = false
end
end
2005-10-09 21:15:45 +00:00
end