Lots going on
[lyrix.git] / vendor / rails / activerecord / Rakefile
blob9a9e00747aa310d8350da29eb3f06cfb672aa5ce
1 require 'rubygems'
2 require 'rake'
3 require 'rake/testtask'
4 require 'rake/rdoctask'
5 require 'rake/packagetask'
6 require 'rake/gempackagetask'
7 require 'rake/contrib/rubyforgepublisher'
8 require File.join(File.dirname(__FILE__), 'lib', 'active_record', 'version')
10 PKG_BUILD     = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
11 PKG_NAME      = 'activerecord'
12 PKG_VERSION   = ActiveRecord::VERSION::STRING + PKG_BUILD
13 PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
15 RELEASE_NAME  = "REL #{PKG_VERSION}"
17 RUBY_FORGE_PROJECT = "activerecord"
18 RUBY_FORGE_USER    = "webster132"
20 PKG_FILES = FileList[
21     "lib/**/*", "test/**/*", "examples/**/*", "doc/**/*", "[A-Z]*", "install.rb", "Rakefile"
22 ].exclude(/\bCVS\b|~$/)
25 desc "Default Task"
26 task :default => [ :test_mysql, :test_sqlite, :test_sqlite3, :test_postgresql ]
28 # Run the unit tests
30 for adapter in %w( mysql postgresql sqlite sqlite3 firebird sqlserver sqlserver_odbc db2 oracle sybase openbase frontbase )
31   Rake::TestTask.new("test_#{adapter}") { |t|
32     t.libs << "test" << "test/connections/native_#{adapter}"
33     adapter_short = adapter == 'db2' ? adapter : adapter[/^[a-z]+/]
34     t.pattern = "test/**/*_test{,_#{adapter_short}}.rb"
35     t.verbose = true
36   }
37 end
39 SCHEMA_PATH = File.join(File.dirname(__FILE__), *%w(test fixtures db_definitions))
41 desc 'Build the MySQL test databases'
42 task :build_mysql_databases do 
43   %x( mysqladmin  create activerecord_unittest )
44   %x( mysqladmin  create activerecord_unittest2 )
45   %x( mysql -e "grant all on activerecord_unittest.* to rails@localhost" )
46   %x( mysql -e "grant all on activerecord_unittest2.* to rails@localhost" )
47   %x( mysql  activerecord_unittest < #{File.join(SCHEMA_PATH, 'mysql.sql')} )
48   %x( mysql  activerecord_unittest < #{File.join(SCHEMA_PATH, 'mysql2.sql')} )
49 end
51 desc 'Drop the MySQL test databases'
52 task :drop_mysql_databases do 
53   %x( mysqladmin -f drop activerecord_unittest )
54   %x( mysqladmin -f drop activerecord_unittest2 )
55 end
57 desc 'Rebuild the MySQL test databases'
58 task :rebuild_mysql_databases => [:drop_mysql_databases, :build_mysql_databases]
60 desc 'Build the PostgreSQL test databases'
61 task :build_postgresql_databases do 
62   %x( createdb -U postgres activerecord_unittest )
63   %x( createdb -U postgres activerecord_unittest2 )
64   %x( psql activerecord_unittest -f #{File.join(SCHEMA_PATH, 'postgresql.sql')} postgres )
65   %x( psql activerecord_unittest2 -f #{File.join(SCHEMA_PATH, 'postgresql2.sql')}  postgres )
66 end
68 desc 'Drop the PostgreSQL test databases'
69 task :drop_postgresql_databases do 
70   %x( dropdb -U postgres activerecord_unittest )
71   %x( dropdb -U postgres activerecord_unittest2 )
72 end
74 desc 'Rebuild the PostgreSQL test databases'
75 task :rebuild_postgresql_databases => [:drop_postgresql_databases, :build_postgresql_databases]
77 desc 'Build the FrontBase test databases'
78 task :build_frontbase_databases => :rebuild_frontbase_databases 
80 desc 'Rebuild the FrontBase test databases'
81 task :rebuild_frontbase_databases do
82   build_frontbase_database = Proc.new do |db_name, sql_definition_file|
83     %(
84       STOP DATABASE #{db_name};
85       DELETE DATABASE #{db_name};
86       CREATE DATABASE #{db_name};
88       CONNECT TO #{db_name} AS SESSION_NAME USER _SYSTEM;
89       SET COMMIT FALSE;
91       CREATE USER RAILS;
92       CREATE SCHEMA RAILS AUTHORIZATION RAILS;
93       COMMIT;
95       SET SESSION AUTHORIZATION RAILS;
96       SCRIPT '#{sql_definition_file}';
98       COMMIT;
100       DISCONNECT ALL; 
101     )
102   end
103   create_activerecord_unittest  = build_frontbase_database['activerecord_unittest',  File.join(SCHEMA_PATH, 'frontbase.sql')]
104   create_activerecord_unittest2 = build_frontbase_database['activerecord_unittest2', File.join(SCHEMA_PATH, 'frontbase2.sql')]
105   execute_frontbase_sql = Proc.new do |sql| 
106     system(<<-SHELL)
107     /Library/FrontBase/bin/sql92 <<-SQL
108     #{sql}
109     SQL
110     SHELL
111   end
112   execute_frontbase_sql[create_activerecord_unittest]
113   execute_frontbase_sql[create_activerecord_unittest2]
116 # Generate the RDoc documentation
118 Rake::RDocTask.new { |rdoc|
119   rdoc.rdoc_dir = 'doc'
120   rdoc.title    = "Active Record -- Object-relation mapping put on rails"
121   rdoc.options << '--line-numbers' << '--inline-source' << '-A cattr_accessor=object'
122   rdoc.options << '--charset' << 'utf-8'
123   rdoc.template = "#{ENV['template']}.rb" if ENV['template']
124   rdoc.rdoc_files.include('README', 'RUNNING_UNIT_TESTS', 'CHANGELOG')
125   rdoc.rdoc_files.include('lib/**/*.rb')
126   rdoc.rdoc_files.exclude('lib/active_record/vendor/*')
127   rdoc.rdoc_files.include('dev-utils/*.rb')
130 # Enhance rdoc task to copy referenced images also
131 task :rdoc do
132   FileUtils.mkdir_p "doc/files/examples/"
133   FileUtils.copy "examples/associations.png", "doc/files/examples/associations.png"
137 # Create compressed packages
139 dist_dirs = [ "lib", "test", "examples", "dev-utils" ]
141 spec = Gem::Specification.new do |s|
142   s.name = PKG_NAME
143   s.version = PKG_VERSION
144   s.summary = "Implements the ActiveRecord pattern for ORM."
145   s.description = %q{Implements the ActiveRecord pattern (Fowler, PoEAA) for ORM. It ties database tables and classes together for business objects, like Customer or Subscription, that can find, save, and destroy themselves without resorting to manual SQL.}
147   s.files = [ "Rakefile", "install.rb", "README", "RUNNING_UNIT_TESTS", "CHANGELOG" ]
148   dist_dirs.each do |dir|
149     s.files = s.files + Dir.glob( "#{dir}/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
150   end
151   
152   s.add_dependency('activesupport', '= 1.4.2' + PKG_BUILD)
154   s.files.delete "test/fixtures/fixture_database.sqlite"
155   s.files.delete "test/fixtures/fixture_database_2.sqlite"
156   s.files.delete "test/fixtures/fixture_database.sqlite3"
157   s.files.delete "test/fixtures/fixture_database_2.sqlite3"
158   s.require_path = 'lib'
159   s.autorequire = 'active_record'
161   s.has_rdoc = true
162   s.extra_rdoc_files = %w( README )
163   s.rdoc_options.concat ['--main',  'README']
164   
165   s.author = "David Heinemeier Hansson"
166   s.email = "david@loudthinking.com"
167   s.homepage = "http://www.rubyonrails.org"
168   s.rubyforge_project = "activerecord"
170   
171 Rake::GemPackageTask.new(spec) do |p|
172   p.gem_spec = spec
173   p.need_tar = true
174   p.need_zip = true
177 task :lines do
178   lines, codelines, total_lines, total_codelines = 0, 0, 0, 0
180   for file_name in FileList["lib/active_record/**/*.rb"]
181     next if file_name =~ /vendor/
182     f = File.open(file_name)
184     while line = f.gets
185       lines += 1
186       next if line =~ /^\s*$/
187       next if line =~ /^\s*#/
188       codelines += 1
189     end
190     puts "L: #{sprintf("%4d", lines)}, LOC #{sprintf("%4d", codelines)} | #{file_name}"
191     
192     total_lines     += lines
193     total_codelines += codelines
194     
195     lines, codelines = 0, 0
196   end
198   puts "Total: Lines #{total_lines}, LOC #{total_codelines}"
202 # Publishing ------------------------------------------------------
204 desc "Publish the beta gem"
205 task :pgem => [:package] do 
206   Rake::SshFilePublisher.new("davidhh@wrath.rubyonrails.org", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
207   `ssh davidhh@wrath.rubyonrails.org './gemupdate.sh'`
210 desc "Publish the API documentation"
211 task :pdoc => [:rdoc] do 
212   Rake::SshDirPublisher.new("davidhh@wrath.rubyonrails.org", "public_html/ar", "doc").upload
215 desc "Publish the release files to RubyForge."
216 task :release => [ :package ] do
217   require 'rubyforge'
219   packages = %w( gem tgz zip ).collect{ |ext| "pkg/#{PKG_NAME}-#{PKG_VERSION}.#{ext}" }
221   rubyforge = RubyForge.new
222   rubyforge.login
223   rubyforge.add_release(PKG_NAME, PKG_NAME, "REL #{PKG_VERSION}", *packages)