erails 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. data/CHANGELOG +3 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README +309 -0
  4. data/Rakefile +339 -0
  5. data/bin/about +4 -0
  6. data/bin/console +3 -0
  7. data/bin/dbconsole +3 -0
  8. data/bin/destroy +3 -0
  9. data/bin/erails +19 -0
  10. data/bin/generate +3 -0
  11. data/bin/performance/benchmarker +3 -0
  12. data/bin/performance/profiler +3 -0
  13. data/bin/performance/request +3 -0
  14. data/bin/plugin +3 -0
  15. data/bin/process/inspector +3 -0
  16. data/bin/process/reaper +3 -0
  17. data/bin/process/spawner +3 -0
  18. data/bin/runner +3 -0
  19. data/bin/server +3 -0
  20. data/builtin/rails_info/rails/info.rb +125 -0
  21. data/builtin/rails_info/rails/info_controller.rb +9 -0
  22. data/builtin/rails_info/rails/info_helper.rb +2 -0
  23. data/builtin/rails_info/rails_info_controller.rb +2 -0
  24. data/configs/apache.conf +40 -0
  25. data/configs/databases/frontbase.yml +28 -0
  26. data/configs/databases/mysql.yml +54 -0
  27. data/configs/databases/oracle.yml +39 -0
  28. data/configs/databases/postgresql.yml +48 -0
  29. data/configs/databases/sqlite2.yml +16 -0
  30. data/configs/databases/sqlite3.yml +19 -0
  31. data/configs/empty.log +0 -0
  32. data/configs/initializers/inflections.rb +10 -0
  33. data/configs/initializers/mime_types.rb +5 -0
  34. data/configs/initializers/new_rails_defaults.rb +17 -0
  35. data/configs/lighttpd.conf +54 -0
  36. data/configs/routes.rb +43 -0
  37. data/dispatches/dispatch.fcgi +24 -0
  38. data/dispatches/dispatch.rb +10 -0
  39. data/dispatches/gateway.cgi +97 -0
  40. data/doc/README_FOR_APP +2 -0
  41. data/environments/boot.rb +109 -0
  42. data/environments/development.rb +16 -0
  43. data/environments/environment.rb +71 -0
  44. data/environments/production.rb +22 -0
  45. data/environments/test.rb +22 -0
  46. data/fresh_rakefile +10 -0
  47. data/helpers/application.rb +15 -0
  48. data/helpers/application_helper.rb +3 -0
  49. data/helpers/test_helper.rb +38 -0
  50. data/html/404.html +30 -0
  51. data/html/422.html +30 -0
  52. data/html/500.html +30 -0
  53. data/html/favicon.ico +0 -0
  54. data/html/images/rails.png +0 -0
  55. data/html/index.html +274 -0
  56. data/html/javascripts/application.js +2 -0
  57. data/html/robots.txt +5 -0
  58. data/lib/code_statistics.rb +107 -0
  59. data/lib/commands/about.rb +3 -0
  60. data/lib/commands/console.rb +32 -0
  61. data/lib/commands/dbconsole.rb +67 -0
  62. data/lib/commands/destroy.rb +6 -0
  63. data/lib/commands/generate.rb +6 -0
  64. data/lib/commands/ncgi/listener +86 -0
  65. data/lib/commands/ncgi/tracker +69 -0
  66. data/lib/commands/performance/benchmarker.rb +24 -0
  67. data/lib/commands/performance/profiler.rb +50 -0
  68. data/lib/commands/performance/request.rb +6 -0
  69. data/lib/commands/plugin.rb +950 -0
  70. data/lib/commands/process/inspector.rb +68 -0
  71. data/lib/commands/process/reaper.rb +149 -0
  72. data/lib/commands/process/spawner.rb +219 -0
  73. data/lib/commands/process/spinner.rb +57 -0
  74. data/lib/commands/runner.rb +48 -0
  75. data/lib/commands/server.rb +39 -0
  76. data/lib/commands/servers/base.rb +31 -0
  77. data/lib/commands/servers/lighttpd.rb +94 -0
  78. data/lib/commands/servers/mongrel.rb +69 -0
  79. data/lib/commands/servers/new_mongrel.rb +16 -0
  80. data/lib/commands/servers/webrick.rb +66 -0
  81. data/lib/commands/update.rb +4 -0
  82. data/lib/commands.rb +17 -0
  83. data/lib/console_app.rb +30 -0
  84. data/lib/console_sandbox.rb +6 -0
  85. data/lib/console_with_helpers.rb +26 -0
  86. data/lib/dispatcher.rb +24 -0
  87. data/lib/fcgi_handler.rb +239 -0
  88. data/lib/initializer.rb +926 -0
  89. data/lib/rails/gem_builder.rb +21 -0
  90. data/lib/rails/gem_dependency.rb +129 -0
  91. data/lib/rails/mongrel_server/commands.rb +342 -0
  92. data/lib/rails/mongrel_server/handler.rb +55 -0
  93. data/lib/rails/plugin/loader.rb +152 -0
  94. data/lib/rails/plugin/locator.rb +100 -0
  95. data/lib/rails/plugin.rb +116 -0
  96. data/lib/rails/version.rb +9 -0
  97. data/lib/rails_generator/base.rb +263 -0
  98. data/lib/rails_generator/commands.rb +622 -0
  99. data/lib/rails_generator/generated_attribute.rb +42 -0
  100. data/lib/rails_generator/generators/applications/app/USAGE +9 -0
  101. data/lib/rails_generator/generators/applications/app/app_generator.rb +174 -0
  102. data/lib/rails_generator/generators/components/controller/USAGE +29 -0
  103. data/lib/rails_generator/generators/components/controller/controller_generator.rb +37 -0
  104. data/lib/rails_generator/generators/components/controller/templates/controller.rb +7 -0
  105. data/lib/rails_generator/generators/components/controller/templates/functional_test.rb +8 -0
  106. data/lib/rails_generator/generators/components/controller/templates/helper.rb +2 -0
  107. data/lib/rails_generator/generators/components/controller/templates/view.html.erb +2 -0
  108. data/lib/rails_generator/generators/components/integration_test/USAGE +8 -0
  109. data/lib/rails_generator/generators/components/integration_test/integration_test_generator.rb +16 -0
  110. data/lib/rails_generator/generators/components/integration_test/templates/integration_test.rb +10 -0
  111. data/lib/rails_generator/generators/components/mailer/USAGE +16 -0
  112. data/lib/rails_generator/generators/components/mailer/mailer_generator.rb +30 -0
  113. data/lib/rails_generator/generators/components/mailer/templates/fixture.erb +3 -0
  114. data/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml +0 -0
  115. data/lib/rails_generator/generators/components/mailer/templates/mailer.rb +15 -0
  116. data/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +21 -0
  117. data/lib/rails_generator/generators/components/mailer/templates/view.erb +3 -0
  118. data/lib/rails_generator/generators/components/mailer/templates/view.rhtml +0 -0
  119. data/lib/rails_generator/generators/components/migration/USAGE +29 -0
  120. data/lib/rails_generator/generators/components/migration/migration_generator.rb +20 -0
  121. data/lib/rails_generator/generators/components/migration/templates/migration.rb +11 -0
  122. data/lib/rails_generator/generators/components/model/USAGE +27 -0
  123. data/lib/rails_generator/generators/components/model/model_generator.rb +45 -0
  124. data/lib/rails_generator/generators/components/model/templates/fixtures.yml +19 -0
  125. data/lib/rails_generator/generators/components/model/templates/migration.rb +16 -0
  126. data/lib/rails_generator/generators/components/model/templates/model.rb +2 -0
  127. data/lib/rails_generator/generators/components/model/templates/unit_test.rb +8 -0
  128. data/lib/rails_generator/generators/components/observer/USAGE +13 -0
  129. data/lib/rails_generator/generators/components/observer/observer_generator.rb +16 -0
  130. data/lib/rails_generator/generators/components/observer/templates/observer.rb +2 -0
  131. data/lib/rails_generator/generators/components/observer/templates/unit_test.rb +8 -0
  132. data/lib/rails_generator/generators/components/plugin/USAGE +25 -0
  133. data/lib/rails_generator/generators/components/plugin/plugin_generator.rb +39 -0
  134. data/lib/rails_generator/generators/components/plugin/templates/MIT-LICENSE +20 -0
  135. data/lib/rails_generator/generators/components/plugin/templates/README +13 -0
  136. data/lib/rails_generator/generators/components/plugin/templates/Rakefile +22 -0
  137. data/lib/rails_generator/generators/components/plugin/templates/USAGE +8 -0
  138. data/lib/rails_generator/generators/components/plugin/templates/generator.rb +8 -0
  139. data/lib/rails_generator/generators/components/plugin/templates/init.rb +1 -0
  140. data/lib/rails_generator/generators/components/plugin/templates/install.rb +1 -0
  141. data/lib/rails_generator/generators/components/plugin/templates/plugin.rb +1 -0
  142. data/lib/rails_generator/generators/components/plugin/templates/tasks.rake +4 -0
  143. data/lib/rails_generator/generators/components/plugin/templates/uninstall.rb +1 -0
  144. data/lib/rails_generator/generators/components/plugin/templates/unit_test.rb +8 -0
  145. data/lib/rails_generator/generators/components/resource/USAGE +23 -0
  146. data/lib/rails_generator/generators/components/resource/resource_generator.rb +74 -0
  147. data/lib/rails_generator/generators/components/resource/templates/controller.rb +2 -0
  148. data/lib/rails_generator/generators/components/resource/templates/functional_test.rb +8 -0
  149. data/lib/rails_generator/generators/components/resource/templates/helper.rb +2 -0
  150. data/lib/rails_generator/generators/components/scaffold/USAGE +25 -0
  151. data/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +93 -0
  152. data/lib/rails_generator/generators/components/scaffold/templates/controller.rb +85 -0
  153. data/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +45 -0
  154. data/lib/rails_generator/generators/components/scaffold/templates/helper.rb +2 -0
  155. data/lib/rails_generator/generators/components/scaffold/templates/layout.html.erb +17 -0
  156. data/lib/rails_generator/generators/components/scaffold/templates/style.css +54 -0
  157. data/lib/rails_generator/generators/components/scaffold/templates/view_edit.html.erb +18 -0
  158. data/lib/rails_generator/generators/components/scaffold/templates/view_index.html.erb +24 -0
  159. data/lib/rails_generator/generators/components/scaffold/templates/view_new.html.erb +17 -0
  160. data/lib/rails_generator/generators/components/scaffold/templates/view_show.html.erb +10 -0
  161. data/lib/rails_generator/generators/components/session_migration/USAGE +10 -0
  162. data/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb +18 -0
  163. data/lib/rails_generator/generators/components/session_migration/templates/migration.rb +16 -0
  164. data/lib/rails_generator/lookup.rb +249 -0
  165. data/lib/rails_generator/manifest.rb +53 -0
  166. data/lib/rails_generator/options.rb +150 -0
  167. data/lib/rails_generator/scripts/destroy.rb +30 -0
  168. data/lib/rails_generator/scripts/generate.rb +7 -0
  169. data/lib/rails_generator/scripts/update.rb +12 -0
  170. data/lib/rails_generator/scripts.rb +89 -0
  171. data/lib/rails_generator/secret_key_generator.rb +164 -0
  172. data/lib/rails_generator/simple_logger.rb +46 -0
  173. data/lib/rails_generator/spec.rb +44 -0
  174. data/lib/rails_generator.rb +43 -0
  175. data/lib/railties_path.rb +1 -0
  176. data/lib/ruby_version_check.rb +17 -0
  177. data/lib/rubyprof_ext.rb +35 -0
  178. data/lib/source_annotation_extractor.rb +102 -0
  179. data/lib/tasks/annotations.rake +23 -0
  180. data/lib/tasks/databases.rake +389 -0
  181. data/lib/tasks/documentation.rake +80 -0
  182. data/lib/tasks/framework.rake +105 -0
  183. data/lib/tasks/gems.rake +64 -0
  184. data/lib/tasks/log.rake +9 -0
  185. data/lib/tasks/misc.rake +57 -0
  186. data/lib/tasks/rails.rb +8 -0
  187. data/lib/tasks/routes.rake +17 -0
  188. data/lib/tasks/statistics.rake +18 -0
  189. data/lib/tasks/testing.rake +118 -0
  190. data/lib/tasks/tmp.rake +37 -0
  191. data/lib/test_help.rb +28 -0
  192. data/lib/webrick_server.rb +165 -0
  193. metadata +356 -0
@@ -0,0 +1,389 @@
1
+ namespace :db do
2
+ namespace :create do
3
+ desc 'Create all the local databases defined in config/database.yml'
4
+ task :all => :environment do
5
+ ActiveRecord::Base.configurations.each_value do |config|
6
+ # Skip entries that don't have a database key, such as the first entry here:
7
+ #
8
+ # defaults: &defaults
9
+ # adapter: mysql
10
+ # username: root
11
+ # password:
12
+ # host: localhost
13
+ #
14
+ # development:
15
+ # database: blog_development
16
+ # <<: *defaults
17
+ next unless config['database']
18
+ # Only connect to local databases
19
+ local_database?(config) { create_database(config) }
20
+ end
21
+ end
22
+ end
23
+
24
+ desc 'Create the database defined in config/database.yml for the current RAILS_ENV'
25
+ task :create => :environment do
26
+ create_database(ActiveRecord::Base.configurations[RAILS_ENV])
27
+ end
28
+
29
+ def create_database(config)
30
+ begin
31
+ ActiveRecord::Base.establish_connection(config)
32
+ ActiveRecord::Base.connection
33
+ rescue
34
+ case config['adapter']
35
+ when 'mysql'
36
+ @charset = ENV['CHARSET'] || 'utf8'
37
+ @collation = ENV['COLLATION'] || 'utf8_general_ci'
38
+ begin
39
+ ActiveRecord::Base.establish_connection(config.merge('database' => nil))
40
+ ActiveRecord::Base.connection.create_database(config['database'], :charset => (config['charset'] || @charset), :collation => (config['collation'] || @collation))
41
+ ActiveRecord::Base.establish_connection(config)
42
+ rescue
43
+ $stderr.puts "Couldn't create database for #{config.inspect}, charset: #{config['charset'] || @charset}, collation: #{config['collation'] || @collation} (if you set the charset manually, make sure you have a matching collation)"
44
+ end
45
+ when 'postgresql'
46
+ @encoding = config[:encoding] || ENV['CHARSET'] || 'utf8'
47
+ begin
48
+ ActiveRecord::Base.establish_connection(config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
49
+ ActiveRecord::Base.connection.create_database(config['database'], config.merge('encoding' => @encoding))
50
+ ActiveRecord::Base.establish_connection(config)
51
+ rescue
52
+ $stderr.puts $!, *($!.backtrace)
53
+ $stderr.puts "Couldn't create database for #{config.inspect}"
54
+ end
55
+ when 'sqlite'
56
+ `sqlite "#{config['database']}"`
57
+ when 'sqlite3'
58
+ `sqlite3 "#{config['database']}"`
59
+ end
60
+ else
61
+ $stderr.puts "#{config['database']} already exists"
62
+ end
63
+ end
64
+
65
+ namespace :drop do
66
+ desc 'Drops all the local databases defined in config/database.yml'
67
+ task :all => :environment do
68
+ ActiveRecord::Base.configurations.each_value do |config|
69
+ # Skip entries that don't have a database key
70
+ next unless config['database']
71
+ # Only connect to local databases
72
+ local_database?(config) { drop_database(config) }
73
+ end
74
+ end
75
+ end
76
+
77
+ desc 'Drops the database for the current RAILS_ENV'
78
+ task :drop => :environment do
79
+ config = ActiveRecord::Base.configurations[RAILS_ENV || 'development']
80
+ begin
81
+ drop_database(config)
82
+ rescue Exception => e
83
+ puts "Couldn't drop #{config['database']} : #{e.inspect}"
84
+ end
85
+ end
86
+
87
+ def local_database?(config, &block)
88
+ if %w( 127.0.0.1 localhost ).include?(config['host']) || config['host'].blank?
89
+ yield
90
+ else
91
+ puts "This task only modifies local databases. #{config['database']} is on a remote host."
92
+ end
93
+ end
94
+
95
+
96
+ desc "Migrate the database through scripts in db/migrate. Target specific version with VERSION=x. Turn off output with VERBOSE=false."
97
+ task :migrate => :environment do
98
+ ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
99
+ ActiveRecord::Migrator.migrate("db/migrate/", ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
100
+ Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
101
+ end
102
+
103
+ namespace :migrate do
104
+ desc 'Rollbacks the database one migration and re migrate up. If you want to rollback more than one step, define STEP=x'
105
+ task :redo => [ 'db:rollback', 'db:migrate' ]
106
+
107
+ desc 'Resets your database using your migrations for the current environment'
108
+ task :reset => ["db:drop", "db:create", "db:migrate"]
109
+
110
+ desc 'Runs the "up" for a given migration VERSION.'
111
+ task :up => :environment do
112
+ version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
113
+ raise "VERSION is required" unless version
114
+ ActiveRecord::Migrator.run(:up, "db/migrate/", version)
115
+ Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
116
+ end
117
+
118
+ desc 'Runs the "down" for a given migration VERSION.'
119
+ task :down => :environment do
120
+ version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
121
+ raise "VERSION is required" unless version
122
+ ActiveRecord::Migrator.run(:down, "db/migrate/", version)
123
+ Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
124
+ end
125
+ end
126
+
127
+ desc 'Rolls the schema back to the previous version. Specify the number of steps with STEP=n'
128
+ task :rollback => :environment do
129
+ step = ENV['STEP'] ? ENV['STEP'].to_i : 1
130
+ ActiveRecord::Migrator.rollback('db/migrate/', step)
131
+ Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
132
+ end
133
+
134
+ desc 'Drops and recreates the database from db/schema.rb for the current environment.'
135
+ task :reset => ['db:drop', 'db:create', 'db:schema:load']
136
+
137
+ desc "Retrieves the charset for the current environment's database"
138
+ task :charset => :environment do
139
+ config = ActiveRecord::Base.configurations[RAILS_ENV || 'development']
140
+ case config['adapter']
141
+ when 'mysql'
142
+ ActiveRecord::Base.establish_connection(config)
143
+ puts ActiveRecord::Base.connection.charset
144
+ else
145
+ puts 'sorry, your database adapter is not supported yet, feel free to submit a patch'
146
+ end
147
+ end
148
+
149
+ desc "Retrieves the collation for the current environment's database"
150
+ task :collation => :environment do
151
+ config = ActiveRecord::Base.configurations[RAILS_ENV || 'development']
152
+ case config['adapter']
153
+ when 'mysql'
154
+ ActiveRecord::Base.establish_connection(config)
155
+ puts ActiveRecord::Base.connection.collation
156
+ else
157
+ puts 'sorry, your database adapter is not supported yet, feel free to submit a patch'
158
+ end
159
+ end
160
+
161
+ desc "Retrieves the current schema version number"
162
+ task :version => :environment do
163
+ puts "Current version: #{ActiveRecord::Migrator.current_version}"
164
+ end
165
+
166
+ desc "Raises an error if there are pending migrations"
167
+ task :abort_if_pending_migrations => :environment do
168
+ if defined? ActiveRecord
169
+ pending_migrations = ActiveRecord::Migrator.new(:up, 'db/migrate').pending_migrations
170
+
171
+ if pending_migrations.any?
172
+ puts "You have #{pending_migrations.size} pending migrations:"
173
+ pending_migrations.each do |pending_migration|
174
+ puts ' %4d %s' % [pending_migration.version, pending_migration.name]
175
+ end
176
+ abort %{Run "rake db:migrate" to update your database then try again.}
177
+ end
178
+ end
179
+ end
180
+
181
+ namespace :fixtures do
182
+ desc "Load fixtures into the current environment's database. Load specific fixtures using FIXTURES=x,y"
183
+ task :load => :environment do
184
+ require 'active_record/fixtures'
185
+ ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
186
+ (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/) : Dir.glob(File.join(RAILS_ROOT, 'test', 'fixtures', '*.{yml,csv}'))).each do |fixture_file|
187
+ Fixtures.create_fixtures('test/fixtures', File.basename(fixture_file, '.*'))
188
+ end
189
+ end
190
+
191
+ desc "Search for a fixture given a LABEL or ID."
192
+ task :identify => :environment do
193
+ require "active_record/fixtures"
194
+
195
+ label, id = ENV["LABEL"], ENV["ID"]
196
+ raise "LABEL or ID required" if label.blank? && id.blank?
197
+
198
+ puts %Q(The fixture ID for "#{label}" is #{Fixtures.identify(label)}.) if label
199
+
200
+ Dir["#{RAILS_ROOT}/test/fixtures/**/*.yml"].each do |file|
201
+ if data = YAML::load(ERB.new(IO.read(file)).result)
202
+ data.keys.each do |key|
203
+ key_id = Fixtures.identify(key)
204
+
205
+ if key == label || key_id == id.to_i
206
+ puts "#{file}: #{key} (#{key_id})"
207
+ end
208
+ end
209
+ end
210
+ end
211
+ end
212
+ end
213
+
214
+ namespace :schema do
215
+ desc "Create a db/schema.rb file that can be portably used against any DB supported by AR"
216
+ task :dump => :environment do
217
+ require 'active_record/schema_dumper'
218
+ File.open(ENV['SCHEMA'] || "#{RAILS_ROOT}/db/schema.rb", "w") do |file|
219
+ ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
220
+ end
221
+ end
222
+
223
+ desc "Load a schema.rb file into the database"
224
+ task :load => :environment do
225
+ file = ENV['SCHEMA'] || "#{RAILS_ROOT}/db/schema.rb"
226
+ load(file)
227
+ end
228
+ end
229
+
230
+ namespace :structure do
231
+ desc "Dump the database structure to a SQL file"
232
+ task :dump => :environment do
233
+ abcs = ActiveRecord::Base.configurations
234
+ case abcs[RAILS_ENV]["adapter"]
235
+ when "mysql", "oci", "oracle"
236
+ ActiveRecord::Base.establish_connection(abcs[RAILS_ENV])
237
+ File.open("#{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql", "w+") { |f| f << ActiveRecord::Base.connection.structure_dump }
238
+ when "postgresql"
239
+ ENV['PGHOST'] = abcs[RAILS_ENV]["host"] if abcs[RAILS_ENV]["host"]
240
+ ENV['PGPORT'] = abcs[RAILS_ENV]["port"].to_s if abcs[RAILS_ENV]["port"]
241
+ ENV['PGPASSWORD'] = abcs[RAILS_ENV]["password"].to_s if abcs[RAILS_ENV]["password"]
242
+ search_path = abcs[RAILS_ENV]["schema_search_path"]
243
+ search_path = "--schema=#{search_path}" if search_path
244
+ `pg_dump -i -U "#{abcs[RAILS_ENV]["username"]}" -s -x -O -f db/#{RAILS_ENV}_structure.sql #{search_path} #{abcs[RAILS_ENV]["database"]}`
245
+ raise "Error dumping database" if $?.exitstatus == 1
246
+ when "sqlite", "sqlite3"
247
+ dbfile = abcs[RAILS_ENV]["database"] || abcs[RAILS_ENV]["dbfile"]
248
+ `#{abcs[RAILS_ENV]["adapter"]} #{dbfile} .schema > db/#{RAILS_ENV}_structure.sql`
249
+ when "sqlserver"
250
+ `scptxfr /s #{abcs[RAILS_ENV]["host"]} /d #{abcs[RAILS_ENV]["database"]} /I /f db\\#{RAILS_ENV}_structure.sql /q /A /r`
251
+ `scptxfr /s #{abcs[RAILS_ENV]["host"]} /d #{abcs[RAILS_ENV]["database"]} /I /F db\ /q /A /r`
252
+ when "firebird"
253
+ set_firebird_env(abcs[RAILS_ENV])
254
+ db_string = firebird_db_string(abcs[RAILS_ENV])
255
+ sh "isql -a #{db_string} > #{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql"
256
+ else
257
+ raise "Task not supported by '#{abcs["test"]["adapter"]}'"
258
+ end
259
+
260
+ if ActiveRecord::Base.connection.supports_migrations?
261
+ File.open("#{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql", "a") { |f| f << ActiveRecord::Base.connection.dump_schema_information }
262
+ end
263
+ end
264
+ end
265
+
266
+ namespace :test do
267
+ desc "Recreate the test database from the current schema.rb"
268
+ task :load => 'db:test:purge' do
269
+ ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['test'])
270
+ ActiveRecord::Schema.verbose = false
271
+ Rake::Task["db:schema:load"].invoke
272
+ end
273
+
274
+ desc "Recreate the test database from the current environment's database schema"
275
+ task :clone => %w(db:schema:dump db:test:load)
276
+
277
+ desc "Recreate the test databases from the development structure"
278
+ task :clone_structure => [ "db:structure:dump", "db:test:purge" ] do
279
+ abcs = ActiveRecord::Base.configurations
280
+ case abcs["test"]["adapter"]
281
+ when "mysql"
282
+ ActiveRecord::Base.establish_connection(:test)
283
+ ActiveRecord::Base.connection.execute('SET foreign_key_checks = 0')
284
+ IO.readlines("#{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql").join.split("\n\n").each do |table|
285
+ ActiveRecord::Base.connection.execute(table)
286
+ end
287
+ when "postgresql"
288
+ ENV['PGHOST'] = abcs["test"]["host"] if abcs["test"]["host"]
289
+ ENV['PGPORT'] = abcs["test"]["port"].to_s if abcs["test"]["port"]
290
+ ENV['PGPASSWORD'] = abcs["test"]["password"].to_s if abcs["test"]["password"]
291
+ `psql -U "#{abcs["test"]["username"]}" -f #{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql #{abcs["test"]["database"]}`
292
+ when "sqlite", "sqlite3"
293
+ dbfile = abcs["test"]["database"] || abcs["test"]["dbfile"]
294
+ `#{abcs["test"]["adapter"]} #{dbfile} < #{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql`
295
+ when "sqlserver"
296
+ `osql -E -S #{abcs["test"]["host"]} -d #{abcs["test"]["database"]} -i db\\#{RAILS_ENV}_structure.sql`
297
+ when "oci", "oracle"
298
+ ActiveRecord::Base.establish_connection(:test)
299
+ IO.readlines("#{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql").join.split(";\n\n").each do |ddl|
300
+ ActiveRecord::Base.connection.execute(ddl)
301
+ end
302
+ when "firebird"
303
+ set_firebird_env(abcs["test"])
304
+ db_string = firebird_db_string(abcs["test"])
305
+ sh "isql -i #{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql #{db_string}"
306
+ else
307
+ raise "Task not supported by '#{abcs["test"]["adapter"]}'"
308
+ end
309
+ end
310
+
311
+ desc "Empty the test database"
312
+ task :purge => :environment do
313
+ abcs = ActiveRecord::Base.configurations
314
+ case abcs["test"]["adapter"]
315
+ when "mysql"
316
+ ActiveRecord::Base.establish_connection(:test)
317
+ ActiveRecord::Base.connection.recreate_database(abcs["test"]["database"])
318
+ when "postgresql"
319
+ ActiveRecord::Base.clear_active_connections!
320
+ drop_database(abcs['test'])
321
+ create_database(abcs['test'])
322
+ when "sqlite","sqlite3"
323
+ dbfile = abcs["test"]["database"] || abcs["test"]["dbfile"]
324
+ File.delete(dbfile) if File.exist?(dbfile)
325
+ when "sqlserver"
326
+ dropfkscript = "#{abcs["test"]["host"]}.#{abcs["test"]["database"]}.DP1".gsub(/\\/,'-')
327
+ `osql -E -S #{abcs["test"]["host"]} -d #{abcs["test"]["database"]} -i db\\#{dropfkscript}`
328
+ `osql -E -S #{abcs["test"]["host"]} -d #{abcs["test"]["database"]} -i db\\#{RAILS_ENV}_structure.sql`
329
+ when "oci", "oracle"
330
+ ActiveRecord::Base.establish_connection(:test)
331
+ ActiveRecord::Base.connection.structure_drop.split(";\n\n").each do |ddl|
332
+ ActiveRecord::Base.connection.execute(ddl)
333
+ end
334
+ when "firebird"
335
+ ActiveRecord::Base.establish_connection(:test)
336
+ ActiveRecord::Base.connection.recreate_database!
337
+ else
338
+ raise "Task not supported by '#{abcs["test"]["adapter"]}'"
339
+ end
340
+ end
341
+
342
+ desc 'Check for pending migrations and load the test schema'
343
+ task :prepare => 'db:abort_if_pending_migrations' do
344
+ if defined?(ActiveRecord) && !ActiveRecord::Base.configurations.blank?
345
+ Rake::Task[{ :sql => "db:test:clone_structure", :ruby => "db:test:load" }[ActiveRecord::Base.schema_format]].invoke
346
+ end
347
+ end
348
+ end
349
+
350
+ namespace :sessions do
351
+ desc "Creates a sessions migration for use with CGI::Session::ActiveRecordStore"
352
+ task :create => :environment do
353
+ raise "Task unavailable to this database (no migration support)" unless ActiveRecord::Base.connection.supports_migrations?
354
+ require 'rails_generator'
355
+ require 'rails_generator/scripts/generate'
356
+ Rails::Generator::Scripts::Generate.new.run(["session_migration", ENV["MIGRATION"] || "CreateSessions"])
357
+ end
358
+
359
+ desc "Clear the sessions table"
360
+ task :clear => :environment do
361
+ ActiveRecord::Base.connection.execute "DELETE FROM #{session_table_name}"
362
+ end
363
+ end
364
+ end
365
+
366
+ def drop_database(config)
367
+ case config['adapter']
368
+ when 'mysql'
369
+ ActiveRecord::Base.connection.drop_database config['database']
370
+ when /^sqlite/
371
+ FileUtils.rm(File.join(RAILS_ROOT, config['database']))
372
+ when 'postgresql'
373
+ ActiveRecord::Base.establish_connection(config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
374
+ ActiveRecord::Base.connection.drop_database config['database']
375
+ end
376
+ end
377
+
378
+ def session_table_name
379
+ ActiveRecord::Base.pluralize_table_names ? :sessions : :session
380
+ end
381
+
382
+ def set_firebird_env(config)
383
+ ENV["ISC_USER"] = config["username"].to_s if config["username"]
384
+ ENV["ISC_PASSWORD"] = config["password"].to_s if config["password"]
385
+ end
386
+
387
+ def firebird_db_string(config)
388
+ FireRuby::Database.db_string_for(config.symbolize_keys)
389
+ end
@@ -0,0 +1,80 @@
1
+ namespace :doc do
2
+ desc "Generate documentation for the application. Set custom template with TEMPLATE=/path/to/rdoc/template.rb or title with TITLE=\"Custom Title\""
3
+ Rake::RDocTask.new("app") { |rdoc|
4
+ rdoc.rdoc_dir = 'doc/app'
5
+ rdoc.template = ENV['template'] if ENV['template']
6
+ rdoc.title = ENV['title'] || "Enhanced Rails Application Documentation"
7
+ rdoc.options << '--line-numbers' << '--inline-source'
8
+ rdoc.options << '--charset' << 'utf-8'
9
+ rdoc.rdoc_files.include('doc/README_FOR_APP')
10
+ rdoc.rdoc_files.include('app/**/*.rb')
11
+ rdoc.rdoc_files.include('lib/**/*.rb')
12
+ }
13
+
14
+ desc "Generate documentation for the Enhanced Rails framework"
15
+ Rake::RDocTask.new("rails") { |rdoc|
16
+ rdoc.rdoc_dir = 'doc/api'
17
+ rdoc.template = "#{ENV['template']}.rb" if ENV['template']
18
+ rdoc.title = "Enhanced Rails Framework Documentation"
19
+ rdoc.options << '--line-numbers' << '--inline-source'
20
+ rdoc.rdoc_files.include('README')
21
+ rdoc.rdoc_files.include('vendor/erails/erailties/CHANGELOG')
22
+ rdoc.rdoc_files.include('vendor/erails/erailties/MIT-LICENSE')
23
+ rdoc.rdoc_files.include('vendor/erails/erailties/README')
24
+ rdoc.rdoc_files.include('vendor/erails/erailties/lib/{*.rb,commands/*.rb,rails_generator/*.rb}')
25
+ rdoc.rdoc_files.include('vendor/erails/activerecord/README')
26
+ rdoc.rdoc_files.include('vendor/erails/activerecord/CHANGELOG')
27
+ rdoc.rdoc_files.include('vendor/erails/activerecord/lib/active_record/**/*.rb')
28
+ rdoc.rdoc_files.exclude('vendor/erails/activerecord/lib/active_record/vendor/*')
29
+ rdoc.rdoc_files.include('vendor/erails/activeresource/README')
30
+ rdoc.rdoc_files.include('vendor/erails/activeresource/CHANGELOG')
31
+ rdoc.rdoc_files.include('vendor/erails/activeresource/lib/active_resource.rb')
32
+ rdoc.rdoc_files.include('vendor/erails/activeresource/lib/active_resource/*')
33
+ rdoc.rdoc_files.include('vendor/erails/eactionpack/README')
34
+ rdoc.rdoc_files.include('vendor/erails/eactionpack/CHANGELOG')
35
+ rdoc.rdoc_files.include('vendor/erails/eactionpack/lib/action_controller/**/*.rb')
36
+ rdoc.rdoc_files.include('vendor/erails/eactionpack/lib/action_view/**/*.rb')
37
+ rdoc.rdoc_files.include('vendor/erails/actionmailer/README')
38
+ rdoc.rdoc_files.include('vendor/erails/actionmailer/CHANGELOG')
39
+ rdoc.rdoc_files.include('vendor/erails/actionmailer/lib/action_mailer/base.rb')
40
+ rdoc.rdoc_files.include('vendor/erails/activesupport/README')
41
+ rdoc.rdoc_files.include('vendor/erails/activesupport/CHANGELOG')
42
+ rdoc.rdoc_files.include('vendor/erails/activesupport/lib/active_support/**/*.rb')
43
+ }
44
+
45
+ plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) }
46
+
47
+ desc "Generate documentation for all installed plugins"
48
+ task :plugins => plugins.collect { |plugin| "doc:plugins:#{plugin}" }
49
+
50
+ desc "Remove plugin documentation"
51
+ task :clobber_plugins do
52
+ rm_rf 'doc/plugins' rescue nil
53
+ end
54
+
55
+ namespace :plugins do
56
+ # Define doc tasks for each plugin
57
+ plugins.each do |plugin|
58
+ task(plugin => :environment) do
59
+ plugin_base = "vendor/plugins/#{plugin}"
60
+ options = []
61
+ files = Rake::FileList.new
62
+ options << "-o doc/plugins/#{plugin}"
63
+ options << "--title '#{plugin.titlecase} Plugin Documentation'"
64
+ options << '--line-numbers' << '--inline-source'
65
+ options << '-T html'
66
+
67
+ files.include("#{plugin_base}/lib/**/*.rb")
68
+ if File.exist?("#{plugin_base}/README")
69
+ files.include("#{plugin_base}/README")
70
+ options << "--main '#{plugin_base}/README'"
71
+ end
72
+ files.include("#{plugin_base}/CHANGELOG") if File.exist?("#{plugin_base}/CHANGELOG")
73
+
74
+ options << files.to_s
75
+
76
+ sh %(rdoc #{options * ' '})
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,105 @@
1
+ namespace :rails do
2
+ namespace :freeze do
3
+ desc "Lock this application to the current gems (by unpacking them into vendor/erails)"
4
+ task :gems do
5
+ deps = %w(eactionpack activerecord actionmailer activesupport activeresource)
6
+ require 'rubygems'
7
+ require 'rubygems/gem_runner'
8
+ Gem.manage_gems
9
+
10
+ rails = (version = ENV['VERSION']) ?
11
+ Gem.cache.find_name('erails', "= #{version}").first :
12
+ Gem.cache.find_name('erails').sort_by { |g| g.version }.last
13
+
14
+ version ||= rails.version
15
+
16
+ unless rails
17
+ puts "No enhanced rails gem #{version} is installed. Do 'gem list erails' to see what you have available."
18
+ exit
19
+ end
20
+
21
+ puts "Freezing to the gems for Enhanced Rails #{rails.version}"
22
+ rm_rf "vendor/erails"
23
+ mkdir_p "vendor/erails"
24
+
25
+ begin
26
+ chdir("vendor/erails") do
27
+ rails.dependencies.select { |g| deps.include? g.name }.each do |g|
28
+ Gem::GemRunner.new.run(["unpack", g.name, "--version", g.version_requirements.to_s])
29
+ mv(Dir.glob("#{g.name}*").first, g.name)
30
+ end
31
+
32
+ Gem::GemRunner.new.run(["unpack", "erails", "--version", "=#{version}"])
33
+ FileUtils.mv(Dir.glob("erails*").first, "erailties")
34
+ end
35
+ rescue Exception
36
+ rm_rf "vendor/erails"
37
+ raise
38
+ end
39
+ end
40
+
41
+ desc 'Lock to latest Edge Enhanced Rails, for a specific release use RELEASE=1.2.0'
42
+ task :edge do
43
+ require 'open-uri'
44
+ version = ENV["RELEASE"] || "edge"
45
+ target = "erails_#{version}.zip"
46
+ url = "http://erails.lipsiahosting.com/archives/#{target}"
47
+
48
+ chdir 'vendor' do
49
+ puts "Downloading Enhanced Rails from #{url}"
50
+ File.open('erails.zip', 'wb') do |dst|
51
+ open url do |src|
52
+ while chunk = src.read(4096)
53
+ dst << chunk
54
+ end
55
+ end
56
+ end
57
+
58
+ puts 'Unpacking Enhanced Rails'
59
+ rm_rf 'erails'
60
+ `unzip erails.zip`
61
+ %w(erails.zip erails/Rakefile erails/cleanlogs.sh erails/pushgems.rb erails/release.rb).each do |goner|
62
+ rm_f goner
63
+ end
64
+ end
65
+
66
+ puts 'Updating current scripts, and configuration settings'
67
+ Rake::Task['rails:update'].invoke
68
+ end
69
+ end
70
+
71
+ desc "Unlock this application from freeze of gems or edge and return to a fluid use of system gems"
72
+ task :unfreeze do
73
+ rm_rf "vendor/erails"
74
+ end
75
+
76
+ desc "Update both configs, scripts and from Enhanced Rails"
77
+ task :update => [ "update:scripts", "update:configs" ]
78
+
79
+ namespace :update do
80
+ desc "Add new scripts to the application script/ directory"
81
+ task :scripts do
82
+ local_base = "script"
83
+ edge_base = "#{File.dirname(__FILE__)}/../../bin"
84
+
85
+ local = Dir["#{local_base}/**/*"].reject { |path| File.directory?(path) }
86
+ edge = Dir["#{edge_base}/**/*"].reject { |path| File.directory?(path) }
87
+
88
+ edge.each do |script|
89
+ base_name = script[(edge_base.length+1)..-1]
90
+ next if base_name == "erails"
91
+ next if local.detect { |path| base_name == path[(local_base.length+1)..-1] }
92
+ if !File.directory?("#{local_base}/#{File.dirname(base_name)}")
93
+ mkdir_p "#{local_base}/#{File.dirname(base_name)}"
94
+ end
95
+ install script, "#{local_base}/#{base_name}", :mode => 0755
96
+ end
97
+ end
98
+
99
+ desc "Update config/boot.rb from your current enhanced rails install"
100
+ task :configs do
101
+ require 'railties_path'
102
+ FileUtils.cp(RAILTIES_PATH + '/environments/boot.rb', RAILS_ROOT + '/config/boot.rb')
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,64 @@
1
+ desc "List the gems that this rails application depends on"
2
+ task :gems => 'gems:base' do
3
+ Rails.configuration.gems.each do |gem|
4
+ code = gem.loaded? ? (gem.frozen? ? "F" : "I") : " "
5
+ puts "[#{code}] #{gem.name} #{gem.requirement.to_s}"
6
+ end
7
+ puts
8
+ puts "I = Installed"
9
+ puts "F = Frozen"
10
+ end
11
+
12
+ namespace :gems do
13
+ task :base do
14
+ $rails_gem_installer = true
15
+ Rake::Task[:environment].invoke
16
+ end
17
+
18
+ desc "Build any native extensions for unpacked gems"
19
+ task :build do
20
+ $rails_gem_installer = true
21
+ require 'rails/gem_builder'
22
+ Dir[File.join(RAILS_ROOT, 'vendor', 'gems', '*')].each do |gem_dir|
23
+ spec_file = File.join(gem_dir, '.specification')
24
+ next unless File.exists?(spec_file)
25
+ specification = YAML::load_file(spec_file)
26
+ next unless ENV['GEM'].blank? || ENV['GEM'] == specification.name
27
+ Rails::GemBuilder.new(specification, gem_dir).build_extensions
28
+ puts "Built gem: '#{gem_dir}'"
29
+ end
30
+ end
31
+
32
+ desc "Installs all required gems for this application."
33
+ task :install => :base do
34
+ require 'rubygems'
35
+ require 'rubygems/gem_runner'
36
+ Rails.configuration.gems.each { |gem| gem.install unless gem.loaded? }
37
+ end
38
+
39
+ desc "Unpacks the specified gem into vendor/gems."
40
+ task :unpack => :base do
41
+ require 'rubygems'
42
+ require 'rubygems/gem_runner'
43
+ Rails.configuration.gems.each do |gem|
44
+ next unless !gem.frozen? && (ENV['GEM'].blank? || ENV['GEM'] == gem.name)
45
+ gem.unpack_to(File.join(RAILS_ROOT, 'vendor', 'gems')) if gem.loaded?
46
+ end
47
+ end
48
+
49
+ namespace :unpack do
50
+ desc "Unpacks the specified gems and its dependencies into vendor/gems"
51
+ task :dependencies => :unpack do
52
+ require 'rubygems'
53
+ require 'rubygems/gem_runner'
54
+ Rails.configuration.gems.each do |gem|
55
+ next unless ENV['GEM'].blank? || ENV['GEM'] == gem.name
56
+ gem.dependencies.each do |dependency|
57
+ dependency.add_load_paths # double check that we have not already unpacked
58
+ next if dependency.frozen?
59
+ dependency.unpack_to(File.join(RAILS_ROOT, 'vendor', 'gems'))
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,9 @@
1
+ namespace :log do
2
+ desc "Truncates all *.log files in log/ to zero bytes"
3
+ task :clear do
4
+ FileList["log/*.log"].each do |log_file|
5
+ f = File.open(log_file, "w")
6
+ f.close
7
+ end
8
+ end
9
+ end