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