Froze rails gems
[depot.git] / vendor / rails / activerecord / Rakefile
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/sshpublisher'
8
9 require File.join(File.dirname(__FILE__), 'lib', 'active_record', 'version')
10 require File.expand_path(File.dirname(__FILE__)) + "/test/config"
11
12 PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
13 PKG_NAME = 'activerecord'
14 PKG_VERSION = ActiveRecord::VERSION::STRING + PKG_BUILD
15 PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
16
17 RELEASE_NAME = "REL #{PKG_VERSION}"
18
19 RUBY_FORGE_PROJECT = "activerecord"
20 RUBY_FORGE_USER = "webster132"
21
22 MYSQL_DB_USER = 'rails'
23
24 PKG_FILES = FileList[
25 "lib/**/*", "test/**/*", "examples/**/*", "doc/**/*", "[A-Z]*", "install.rb", "Rakefile"
26 ].exclude(/\bCVS\b|~$/)
27
28
29 desc 'Run mysql, sqlite, and postgresql tests by default'
30 task :default => :test
31
32 desc 'Run mysql, sqlite, and postgresql tests'
33 task :test => %w(test_mysql test_sqlite3 test_postgresql)
34
35 for adapter in %w( mysql postgresql sqlite sqlite3 firebird db2 oracle sybase openbase frontbase )
36 Rake::TestTask.new("test_#{adapter}") { |t|
37 t.libs << "test" << "test/connections/native_#{adapter}"
38 adapter_short = adapter == 'db2' ? adapter : adapter[/^[a-z]+/]
39 t.test_files=Dir.glob( "test/cases/**/*_test{,_#{adapter_short}}.rb" ).sort
40 t.verbose = true
41 }
42
43 namespace adapter do
44 task :test => "test_#{adapter}"
45 end
46 end
47
48 namespace :mysql do
49 desc 'Build the MySQL test databases'
50 task :build_databases do
51 %x( mysqladmin --user=#{MYSQL_DB_USER} create activerecord_unittest )
52 %x( mysqladmin --user=#{MYSQL_DB_USER} create activerecord_unittest2 )
53 end
54
55 desc 'Drop the MySQL test databases'
56 task :drop_databases do
57 %x( mysqladmin --user=#{MYSQL_DB_USER} -f drop activerecord_unittest )
58 %x( mysqladmin --user=#{MYSQL_DB_USER} -f drop activerecord_unittest2 )
59 end
60
61 desc 'Rebuild the MySQL test databases'
62 task :rebuild_databases => [:drop_databases, :build_databases]
63 end
64
65 task :build_mysql_databases => 'mysql:build_databases'
66 task :drop_mysql_databases => 'mysql:drop_databases'
67 task :rebuild_mysql_databases => 'mysql:rebuild_databases'
68
69
70 namespace :postgresql do
71 desc 'Build the PostgreSQL test databases'
72 task :build_databases do
73 %x( createdb activerecord_unittest )
74 %x( createdb activerecord_unittest2 )
75 end
76
77 desc 'Drop the PostgreSQL test databases'
78 task :drop_databases do
79 %x( dropdb activerecord_unittest )
80 %x( dropdb activerecord_unittest2 )
81 end
82
83 desc 'Rebuild the PostgreSQL test databases'
84 task :rebuild_databases => [:drop_databases, :build_databases]
85 end
86
87 task :build_postgresql_databases => 'postgresql:build_databases'
88 task :drop_postgresql_databases => 'postgresql:drop_databases'
89 task :rebuild_postgresql_databases => 'postgresql:rebuild_databases'
90
91
92 namespace :frontbase do
93 desc 'Build the FrontBase test databases'
94 task :build_databases => :rebuild_frontbase_databases
95
96 desc 'Rebuild the FrontBase test databases'
97 task :rebuild_databases do
98 build_frontbase_database = Proc.new do |db_name, sql_definition_file|
99 %(
100 STOP DATABASE #{db_name};
101 DELETE DATABASE #{db_name};
102 CREATE DATABASE #{db_name};
103
104 CONNECT TO #{db_name} AS SESSION_NAME USER _SYSTEM;
105 SET COMMIT FALSE;
106
107 CREATE USER RAILS;
108 CREATE SCHEMA RAILS AUTHORIZATION RAILS;
109 COMMIT;
110
111 SET SESSION AUTHORIZATION RAILS;
112 SCRIPT '#{sql_definition_file}';
113
114 COMMIT;
115
116 DISCONNECT ALL;
117 )
118 end
119 create_activerecord_unittest = build_frontbase_database['activerecord_unittest', File.join(SCHEMA_ROOT, 'frontbase.sql')]
120 create_activerecord_unittest2 = build_frontbase_database['activerecord_unittest2', File.join(SCHEMA_ROOT, 'frontbase2.sql')]
121 execute_frontbase_sql = Proc.new do |sql|
122 system(<<-SHELL)
123 /Library/FrontBase/bin/sql92 <<-SQL
124 #{sql}
125 SQL
126 SHELL
127 end
128 execute_frontbase_sql[create_activerecord_unittest]
129 execute_frontbase_sql[create_activerecord_unittest2]
130 end
131 end
132
133 task :build_frontbase_databases => 'frontbase:build_databases'
134 task :rebuild_frontbase_databases => 'frontbase:rebuild_databases'
135
136
137 # Generate the RDoc documentation
138
139 Rake::RDocTask.new { |rdoc|
140 rdoc.rdoc_dir = 'doc'
141 rdoc.title = "Active Record -- Object-relation mapping put on rails"
142 rdoc.options << '--line-numbers' << '--inline-source' << '-A cattr_accessor=object'
143 rdoc.options << '--charset' << 'utf-8'
144 rdoc.template = ENV['template'] ? "#{ENV['template']}.rb" : '../doc/template/horo'
145 rdoc.rdoc_files.include('README', 'RUNNING_UNIT_TESTS', 'CHANGELOG')
146 rdoc.rdoc_files.include('lib/**/*.rb')
147 rdoc.rdoc_files.exclude('lib/active_record/vendor/*')
148 rdoc.rdoc_files.include('dev-utils/*.rb')
149 }
150
151 # Enhance rdoc task to copy referenced images also
152 task :rdoc do
153 FileUtils.mkdir_p "doc/files/examples/"
154 FileUtils.copy "examples/associations.png", "doc/files/examples/associations.png"
155 end
156
157
158 # Create compressed packages
159
160 dist_dirs = [ "lib", "test", "examples" ]
161
162 spec = Gem::Specification.new do |s|
163 s.platform = Gem::Platform::RUBY
164 s.name = PKG_NAME
165 s.version = PKG_VERSION
166 s.summary = "Implements the ActiveRecord pattern for ORM."
167 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.}
168
169 s.files = [ "Rakefile", "install.rb", "README", "RUNNING_UNIT_TESTS", "CHANGELOG" ]
170 dist_dirs.each do |dir|
171 s.files = s.files + Dir.glob( "#{dir}/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
172 end
173
174 s.add_dependency('activesupport', '= 2.2.2' + PKG_BUILD)
175
176 s.files.delete FIXTURES_ROOT + "/fixture_database.sqlite"
177 s.files.delete FIXTURES_ROOT + "/fixture_database_2.sqlite"
178 s.files.delete FIXTURES_ROOT + "/fixture_database.sqlite3"
179 s.files.delete FIXTURES_ROOT + "/fixture_database_2.sqlite3"
180 s.require_path = 'lib'
181 s.autorequire = 'active_record'
182
183 s.has_rdoc = true
184 s.extra_rdoc_files = %w( README )
185 s.rdoc_options.concat ['--main', 'README']
186
187 s.author = "David Heinemeier Hansson"
188 s.email = "david@loudthinking.com"
189 s.homepage = "http://www.rubyonrails.org"
190 s.rubyforge_project = "activerecord"
191 end
192
193 Rake::GemPackageTask.new(spec) do |p|
194 p.gem_spec = spec
195 p.need_tar = true
196 p.need_zip = true
197 end
198
199 task :lines do
200 lines, codelines, total_lines, total_codelines = 0, 0, 0, 0
201
202 for file_name in FileList["lib/active_record/**/*.rb"]
203 next if file_name =~ /vendor/
204 f = File.open(file_name)
205
206 while line = f.gets
207 lines += 1
208 next if line =~ /^\s*$/
209 next if line =~ /^\s*#/
210 codelines += 1
211 end
212 puts "L: #{sprintf("%4d", lines)}, LOC #{sprintf("%4d", codelines)} | #{file_name}"
213
214 total_lines += lines
215 total_codelines += codelines
216
217 lines, codelines = 0, 0
218 end
219
220 puts "Total: Lines #{total_lines}, LOC #{total_codelines}"
221 end
222
223
224 # Publishing ------------------------------------------------------
225
226 desc "Publish the beta gem"
227 task :pgem => [:package] do
228 Rake::SshFilePublisher.new("gems.rubyonrails.org", "/u/sites/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
229 `ssh gems.rubyonrails.org '/u/sites/gems/gemupdate.sh'`
230 end
231
232 desc "Publish the API documentation"
233 task :pdoc => [:rdoc] do
234 Rake::SshDirPublisher.new("wrath.rubyonrails.org", "public_html/ar", "doc").upload
235 end
236
237 desc "Publish the release files to RubyForge."
238 task :release => [ :package ] do
239 require 'rubyforge'
240 require 'rake/contrib/rubyforgepublisher'
241
242 packages = %w( gem tgz zip ).collect{ |ext| "pkg/#{PKG_NAME}-#{PKG_VERSION}.#{ext}" }
243
244 rubyforge = RubyForge.new
245 rubyforge.login
246 rubyforge.add_release(PKG_NAME, PKG_NAME, "REL #{PKG_VERSION}", *packages)
247 end