Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

root/branches/1-2-stable/activerecord/Rakefile

Revision 7841, 7.3 kB (checked in by david, 1 year ago)

Update versions for release

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