rails_csi 2.3.5.p6

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 (320) hide show
  1. data/CHANGELOG +2172 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README +243 -0
  4. data/Rakefile +368 -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/generate +3 -0
  10. data/bin/performance/benchmarker +3 -0
  11. data/bin/performance/profiler +3 -0
  12. data/bin/plugin +3 -0
  13. data/bin/rails +20 -0
  14. data/bin/runner +3 -0
  15. data/bin/server +3 -0
  16. data/builtin/rails_info/rails/info.rb +131 -0
  17. data/builtin/rails_info/rails/info_controller.rb +9 -0
  18. data/builtin/rails_info/rails/info_helper.rb +2 -0
  19. data/builtin/rails_info/rails_info_controller.rb +2 -0
  20. data/configs/databases/frontbase.yml +28 -0
  21. data/configs/databases/ibm_db.yml +62 -0
  22. data/configs/databases/mysql.yml +60 -0
  23. data/configs/databases/oracle.yml +39 -0
  24. data/configs/databases/postgresql.yml +51 -0
  25. data/configs/databases/sqlite2.yml +19 -0
  26. data/configs/databases/sqlite3.yml +22 -0
  27. data/configs/empty.log +0 -0
  28. data/configs/initializers/backtrace_silencers.rb +7 -0
  29. data/configs/initializers/inflections.rb +10 -0
  30. data/configs/initializers/mime_types.rb +5 -0
  31. data/configs/initializers/new_rails_defaults.rb +21 -0
  32. data/configs/initializers/session_store.rb +15 -0
  33. data/configs/locales/en.yml +5 -0
  34. data/configs/routes.rb +43 -0
  35. data/configs/seeds.rb +7 -0
  36. data/dispatches/config.ru +7 -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 +110 -0
  42. data/environments/development.rb +17 -0
  43. data/environments/environment.rb +41 -0
  44. data/environments/production.rb +28 -0
  45. data/environments/test.rb +28 -0
  46. data/fresh_rakefile +10 -0
  47. data/guides/files/javascripts/code_highlighter.js +188 -0
  48. data/guides/files/javascripts/guides.js +8 -0
  49. data/guides/files/javascripts/highlighters.js +90 -0
  50. data/guides/files/stylesheets/main.css +441 -0
  51. data/guides/files/stylesheets/print.css +52 -0
  52. data/guides/files/stylesheets/reset.css +43 -0
  53. data/guides/files/stylesheets/style.css +13 -0
  54. data/guides/files/stylesheets/syntax.css +31 -0
  55. data/guides/images/belongs_to.png +0 -0
  56. data/guides/images/book_icon.gif +0 -0
  57. data/guides/images/bullet.gif +0 -0
  58. data/guides/images/chapters_icon.gif +0 -0
  59. data/guides/images/check_bullet.gif +0 -0
  60. data/guides/images/credits_pic_blank.gif +0 -0
  61. data/guides/images/csrf.png +0 -0
  62. data/guides/images/customized_error_messages.png +0 -0
  63. data/guides/images/error_messages.png +0 -0
  64. data/guides/images/feature_tile.gif +0 -0
  65. data/guides/images/footer_tile.gif +0 -0
  66. data/guides/images/fxn.jpg +0 -0
  67. data/guides/images/grey_bullet.gif +0 -0
  68. data/guides/images/habtm.png +0 -0
  69. data/guides/images/has_many.png +0 -0
  70. data/guides/images/has_many_through.png +0 -0
  71. data/guides/images/has_one.png +0 -0
  72. data/guides/images/has_one_through.png +0 -0
  73. data/guides/images/header_backdrop.png +0 -0
  74. data/guides/images/header_tile.gif +0 -0
  75. data/guides/images/i18n/demo_localized_pirate.png +0 -0
  76. data/guides/images/i18n/demo_translated_en.png +0 -0
  77. data/guides/images/i18n/demo_translated_pirate.png +0 -0
  78. data/guides/images/i18n/demo_translation_missing.png +0 -0
  79. data/guides/images/i18n/demo_untranslated.png +0 -0
  80. data/guides/images/icons/README +5 -0
  81. data/guides/images/icons/callouts/1.png +0 -0
  82. data/guides/images/icons/callouts/10.png +0 -0
  83. data/guides/images/icons/callouts/11.png +0 -0
  84. data/guides/images/icons/callouts/12.png +0 -0
  85. data/guides/images/icons/callouts/13.png +0 -0
  86. data/guides/images/icons/callouts/14.png +0 -0
  87. data/guides/images/icons/callouts/15.png +0 -0
  88. data/guides/images/icons/callouts/2.png +0 -0
  89. data/guides/images/icons/callouts/3.png +0 -0
  90. data/guides/images/icons/callouts/4.png +0 -0
  91. data/guides/images/icons/callouts/5.png +0 -0
  92. data/guides/images/icons/callouts/6.png +0 -0
  93. data/guides/images/icons/callouts/7.png +0 -0
  94. data/guides/images/icons/callouts/8.png +0 -0
  95. data/guides/images/icons/callouts/9.png +0 -0
  96. data/guides/images/icons/caution.png +0 -0
  97. data/guides/images/icons/example.png +0 -0
  98. data/guides/images/icons/home.png +0 -0
  99. data/guides/images/icons/important.png +0 -0
  100. data/guides/images/icons/next.png +0 -0
  101. data/guides/images/icons/note.png +0 -0
  102. data/guides/images/icons/prev.png +0 -0
  103. data/guides/images/icons/tip.png +0 -0
  104. data/guides/images/icons/up.png +0 -0
  105. data/guides/images/icons/warning.png +0 -0
  106. data/guides/images/nav_arrow.gif +0 -0
  107. data/guides/images/polymorphic.png +0 -0
  108. data/guides/images/posts_index.png +0 -0
  109. data/guides/images/rails_guides_logo.gif +0 -0
  110. data/guides/images/rails_logo_remix.gif +0 -0
  111. data/guides/images/rails_welcome.png +0 -0
  112. data/guides/images/session_fixation.png +0 -0
  113. data/guides/images/tab_grey.gif +0 -0
  114. data/guides/images/tab_info.gif +0 -0
  115. data/guides/images/tab_note.gif +0 -0
  116. data/guides/images/tab_red.gif +0 -0
  117. data/guides/images/tab_yellow.gif +0 -0
  118. data/guides/images/tab_yellow.png +0 -0
  119. data/guides/images/validation_error_messages.png +0 -0
  120. data/guides/rails_guides.rb +42 -0
  121. data/guides/rails_guides/generator.rb +138 -0
  122. data/guides/rails_guides/helpers.rb +34 -0
  123. data/guides/rails_guides/indexer.rb +55 -0
  124. data/guides/rails_guides/textile_extensions.rb +41 -0
  125. data/guides/source/2_2_release_notes.textile +422 -0
  126. data/guides/source/2_3_release_notes.textile +610 -0
  127. data/guides/source/action_controller_overview.textile +776 -0
  128. data/guides/source/action_mailer_basics.textile +424 -0
  129. data/guides/source/active_record_basics.textile +135 -0
  130. data/guides/source/active_record_querying.textile +969 -0
  131. data/guides/source/activerecord_validations_callbacks.textile +1086 -0
  132. data/guides/source/association_basics.textile +1781 -0
  133. data/guides/source/caching_with_rails.textile +524 -0
  134. data/guides/source/command_line.textile +589 -0
  135. data/guides/source/configuring.textile +234 -0
  136. data/guides/source/contribute.textile +71 -0
  137. data/guides/source/contributing_to_rails.textile +239 -0
  138. data/guides/source/credits.erb.textile +52 -0
  139. data/guides/source/debugging_rails_applications.textile +709 -0
  140. data/guides/source/form_helpers.textile +766 -0
  141. data/guides/source/getting_started.textile +1297 -0
  142. data/guides/source/i18n.textile +912 -0
  143. data/guides/source/index.erb.textile +124 -0
  144. data/guides/source/layout.html.erb +103 -0
  145. data/guides/source/layouts_and_rendering.textile +979 -0
  146. data/guides/source/migrations.textile +591 -0
  147. data/guides/source/nested_model_forms.textile +222 -0
  148. data/guides/source/performance_testing.textile +531 -0
  149. data/guides/source/plugins.textile +1512 -0
  150. data/guides/source/rails_on_rack.textile +309 -0
  151. data/guides/source/routing.textile +903 -0
  152. data/guides/source/security.textile +986 -0
  153. data/guides/source/testing.textile +951 -0
  154. data/helpers/application_controller.rb +10 -0
  155. data/helpers/application_helper.rb +3 -0
  156. data/helpers/performance_test.rb +9 -0
  157. data/helpers/test_helper.rb +38 -0
  158. data/html/404.html +30 -0
  159. data/html/422.html +30 -0
  160. data/html/500.html +30 -0
  161. data/html/favicon.ico +0 -0
  162. data/html/images/rails.png +0 -0
  163. data/html/index.html +275 -0
  164. data/html/javascripts/application.js +2 -0
  165. data/html/javascripts/controls.js +963 -0
  166. data/html/javascripts/dragdrop.js +973 -0
  167. data/html/javascripts/effects.js +1128 -0
  168. data/html/javascripts/prototype.js +4320 -0
  169. data/html/robots.txt +5 -0
  170. data/lib/code_statistics.rb +107 -0
  171. data/lib/commands.rb +17 -0
  172. data/lib/commands/about.rb +3 -0
  173. data/lib/commands/console.rb +45 -0
  174. data/lib/commands/dbconsole.rb +87 -0
  175. data/lib/commands/destroy.rb +6 -0
  176. data/lib/commands/generate.rb +6 -0
  177. data/lib/commands/ncgi/listener +86 -0
  178. data/lib/commands/ncgi/tracker +69 -0
  179. data/lib/commands/performance/benchmarker.rb +24 -0
  180. data/lib/commands/performance/profiler.rb +50 -0
  181. data/lib/commands/plugin.rb +968 -0
  182. data/lib/commands/runner.rb +54 -0
  183. data/lib/commands/server.rb +114 -0
  184. data/lib/commands/update.rb +4 -0
  185. data/lib/console_app.rb +30 -0
  186. data/lib/console_sandbox.rb +6 -0
  187. data/lib/console_with_helpers.rb +5 -0
  188. data/lib/dispatcher.rb +24 -0
  189. data/lib/fcgi_handler.rb +239 -0
  190. data/lib/initializer.rb +1128 -0
  191. data/lib/performance_test_help.rb +5 -0
  192. data/lib/rails/backtrace_cleaner.rb +54 -0
  193. data/lib/rails/gem_builder.rb +21 -0
  194. data/lib/rails/gem_dependency.rb +311 -0
  195. data/lib/rails/plugin.rb +179 -0
  196. data/lib/rails/plugin/loader.rb +198 -0
  197. data/lib/rails/plugin/locator.rb +100 -0
  198. data/lib/rails/rack.rb +8 -0
  199. data/lib/rails/rack/debugger.rb +23 -0
  200. data/lib/rails/rack/log_tailer.rb +35 -0
  201. data/lib/rails/rack/metal.rb +51 -0
  202. data/lib/rails/rack/static.rb +46 -0
  203. data/lib/rails/vendor_gem_source_index.rb +140 -0
  204. data/lib/rails/version.rb +9 -0
  205. data/lib/rails_generator.rb +43 -0
  206. data/lib/rails_generator/base.rb +266 -0
  207. data/lib/rails_generator/commands.rb +621 -0
  208. data/lib/rails_generator/generated_attribute.rb +46 -0
  209. data/lib/rails_generator/generators/applications/app/USAGE +9 -0
  210. data/lib/rails_generator/generators/applications/app/app_generator.rb +263 -0
  211. data/lib/rails_generator/generators/applications/app/scm/git.rb +18 -0
  212. data/lib/rails_generator/generators/applications/app/scm/scm.rb +8 -0
  213. data/lib/rails_generator/generators/applications/app/scm/svn.rb +7 -0
  214. data/lib/rails_generator/generators/applications/app/template_runner.rb +401 -0
  215. data/lib/rails_generator/generators/components/controller/USAGE +30 -0
  216. data/lib/rails_generator/generators/components/controller/controller_generator.rb +43 -0
  217. data/lib/rails_generator/generators/components/controller/templates/controller.rb +7 -0
  218. data/lib/rails_generator/generators/components/controller/templates/functional_test.rb +8 -0
  219. data/lib/rails_generator/generators/components/controller/templates/helper.rb +2 -0
  220. data/lib/rails_generator/generators/components/controller/templates/helper_test.rb +4 -0
  221. data/lib/rails_generator/generators/components/controller/templates/view.html.erb +2 -0
  222. data/lib/rails_generator/generators/components/helper/USAGE +24 -0
  223. data/lib/rails_generator/generators/components/helper/helper_generator.rb +25 -0
  224. data/lib/rails_generator/generators/components/helper/templates/helper.rb +2 -0
  225. data/lib/rails_generator/generators/components/helper/templates/helper_test.rb +4 -0
  226. data/lib/rails_generator/generators/components/integration_test/USAGE +8 -0
  227. data/lib/rails_generator/generators/components/integration_test/integration_test_generator.rb +16 -0
  228. data/lib/rails_generator/generators/components/integration_test/templates/integration_test.rb +10 -0
  229. data/lib/rails_generator/generators/components/mailer/USAGE +16 -0
  230. data/lib/rails_generator/generators/components/mailer/mailer_generator.rb +30 -0
  231. data/lib/rails_generator/generators/components/mailer/templates/fixture.erb +3 -0
  232. data/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml +0 -0
  233. data/lib/rails_generator/generators/components/mailer/templates/mailer.rb +15 -0
  234. data/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +20 -0
  235. data/lib/rails_generator/generators/components/mailer/templates/view.erb +3 -0
  236. data/lib/rails_generator/generators/components/mailer/templates/view.rhtml +0 -0
  237. data/lib/rails_generator/generators/components/metal/USAGE +8 -0
  238. data/lib/rails_generator/generators/components/metal/metal_generator.rb +8 -0
  239. data/lib/rails_generator/generators/components/metal/templates/metal.rb +12 -0
  240. data/lib/rails_generator/generators/components/migration/USAGE +29 -0
  241. data/lib/rails_generator/generators/components/migration/migration_generator.rb +20 -0
  242. data/lib/rails_generator/generators/components/migration/templates/migration.rb +11 -0
  243. data/lib/rails_generator/generators/components/model/USAGE +27 -0
  244. data/lib/rails_generator/generators/components/model/model_generator.rb +52 -0
  245. data/lib/rails_generator/generators/components/model/templates/fixtures.yml +19 -0
  246. data/lib/rails_generator/generators/components/model/templates/migration.rb +16 -0
  247. data/lib/rails_generator/generators/components/model/templates/model.rb +5 -0
  248. data/lib/rails_generator/generators/components/model/templates/unit_test.rb +8 -0
  249. data/lib/rails_generator/generators/components/observer/USAGE +13 -0
  250. data/lib/rails_generator/generators/components/observer/observer_generator.rb +16 -0
  251. data/lib/rails_generator/generators/components/observer/templates/observer.rb +2 -0
  252. data/lib/rails_generator/generators/components/observer/templates/unit_test.rb +8 -0
  253. data/lib/rails_generator/generators/components/performance_test/USAGE +8 -0
  254. data/lib/rails_generator/generators/components/performance_test/performance_test_generator.rb +16 -0
  255. data/lib/rails_generator/generators/components/performance_test/templates/performance_test.rb +9 -0
  256. data/lib/rails_generator/generators/components/plugin/USAGE +25 -0
  257. data/lib/rails_generator/generators/components/plugin/plugin_generator.rb +39 -0
  258. data/lib/rails_generator/generators/components/plugin/templates/MIT-LICENSE +20 -0
  259. data/lib/rails_generator/generators/components/plugin/templates/README +13 -0
  260. data/lib/rails_generator/generators/components/plugin/templates/Rakefile +23 -0
  261. data/lib/rails_generator/generators/components/plugin/templates/USAGE +8 -0
  262. data/lib/rails_generator/generators/components/plugin/templates/generator.rb +8 -0
  263. data/lib/rails_generator/generators/components/plugin/templates/init.rb +1 -0
  264. data/lib/rails_generator/generators/components/plugin/templates/install.rb +1 -0
  265. data/lib/rails_generator/generators/components/plugin/templates/plugin.rb +1 -0
  266. data/lib/rails_generator/generators/components/plugin/templates/tasks.rake +4 -0
  267. data/lib/rails_generator/generators/components/plugin/templates/test_helper.rb +3 -0
  268. data/lib/rails_generator/generators/components/plugin/templates/uninstall.rb +1 -0
  269. data/lib/rails_generator/generators/components/plugin/templates/unit_test.rb +8 -0
  270. data/lib/rails_generator/generators/components/resource/USAGE +23 -0
  271. data/lib/rails_generator/generators/components/resource/resource_generator.rb +76 -0
  272. data/lib/rails_generator/generators/components/resource/templates/controller.rb +2 -0
  273. data/lib/rails_generator/generators/components/resource/templates/functional_test.rb +8 -0
  274. data/lib/rails_generator/generators/components/resource/templates/helper.rb +2 -0
  275. data/lib/rails_generator/generators/components/resource/templates/helper_test.rb +4 -0
  276. data/lib/rails_generator/generators/components/scaffold/USAGE +29 -0
  277. data/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +103 -0
  278. data/lib/rails_generator/generators/components/scaffold/templates/controller.rb +85 -0
  279. data/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +45 -0
  280. data/lib/rails_generator/generators/components/scaffold/templates/helper.rb +2 -0
  281. data/lib/rails_generator/generators/components/scaffold/templates/helper_test.rb +4 -0
  282. data/lib/rails_generator/generators/components/scaffold/templates/layout.html.erb +17 -0
  283. data/lib/rails_generator/generators/components/scaffold/templates/style.css +54 -0
  284. data/lib/rails_generator/generators/components/scaffold/templates/view_edit.html.erb +18 -0
  285. data/lib/rails_generator/generators/components/scaffold/templates/view_index.html.erb +24 -0
  286. data/lib/rails_generator/generators/components/scaffold/templates/view_new.html.erb +17 -0
  287. data/lib/rails_generator/generators/components/scaffold/templates/view_show.html.erb +10 -0
  288. data/lib/rails_generator/generators/components/session_migration/USAGE +10 -0
  289. data/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb +18 -0
  290. data/lib/rails_generator/generators/components/session_migration/templates/migration.rb +16 -0
  291. data/lib/rails_generator/lookup.rb +249 -0
  292. data/lib/rails_generator/manifest.rb +53 -0
  293. data/lib/rails_generator/options.rb +150 -0
  294. data/lib/rails_generator/scripts.rb +89 -0
  295. data/lib/rails_generator/scripts/destroy.rb +29 -0
  296. data/lib/rails_generator/scripts/generate.rb +7 -0
  297. data/lib/rails_generator/scripts/update.rb +12 -0
  298. data/lib/rails_generator/secret_key_generator.rb +24 -0
  299. data/lib/rails_generator/simple_logger.rb +46 -0
  300. data/lib/rails_generator/spec.rb +44 -0
  301. data/lib/railties_path.rb +1 -0
  302. data/lib/ruby_version_check.rb +17 -0
  303. data/lib/rubyprof_ext.rb +35 -0
  304. data/lib/source_annotation_extractor.rb +102 -0
  305. data/lib/tasks/annotations.rake +20 -0
  306. data/lib/tasks/databases.rake +436 -0
  307. data/lib/tasks/documentation.rake +88 -0
  308. data/lib/tasks/framework.rake +143 -0
  309. data/lib/tasks/gems.rake +78 -0
  310. data/lib/tasks/log.rake +9 -0
  311. data/lib/tasks/middleware.rake +7 -0
  312. data/lib/tasks/misc.rake +63 -0
  313. data/lib/tasks/rails.rb +9 -0
  314. data/lib/tasks/routes.rake +18 -0
  315. data/lib/tasks/statistics.rake +17 -0
  316. data/lib/tasks/testing.rake +139 -0
  317. data/lib/tasks/tmp.rake +37 -0
  318. data/lib/test_help.rb +38 -0
  319. data/lib/webrick_server.rb +156 -0
  320. metadata +495 -0
@@ -0,0 +1,436 @@
1
+ namespace :db do
2
+ task :load_config => :rails_env do
3
+ require 'active_record'
4
+ ActiveRecord::Base.configurations = Rails::Configuration.new.database_configuration
5
+ end
6
+
7
+ namespace :create do
8
+ desc 'Create all the local databases defined in config/database.yml'
9
+ task :all => :load_config do
10
+ ActiveRecord::Base.configurations.each_value do |config|
11
+ # Skip entries that don't have a database key, such as the first entry here:
12
+ #
13
+ # defaults: &defaults
14
+ # adapter: mysql
15
+ # username: root
16
+ # password:
17
+ # host: localhost
18
+ #
19
+ # development:
20
+ # database: blog_development
21
+ # <<: *defaults
22
+ next unless config['database']
23
+ # Only connect to local databases
24
+ local_database?(config) { create_database(config) }
25
+ end
26
+ end
27
+ end
28
+
29
+ desc 'Create the database defined in config/database.yml for the current RAILS_ENV'
30
+ task :create => :load_config do
31
+ create_database(ActiveRecord::Base.configurations[RAILS_ENV])
32
+ end
33
+
34
+ def create_database(config)
35
+ begin
36
+ if config['adapter'] =~ /sqlite/
37
+ if File.exist?(config['database'])
38
+ $stderr.puts "#{config['database']} already exists"
39
+ else
40
+ begin
41
+ # Create the SQLite database
42
+ ActiveRecord::Base.establish_connection(config)
43
+ ActiveRecord::Base.connection
44
+ rescue
45
+ $stderr.puts $!, *($!.backtrace)
46
+ $stderr.puts "Couldn't create database for #{config.inspect}"
47
+ end
48
+ end
49
+ return # Skip the else clause of begin/rescue
50
+ else
51
+ ActiveRecord::Base.establish_connection(config)
52
+ ActiveRecord::Base.connection
53
+ end
54
+ rescue
55
+ case config['adapter']
56
+ when 'mysql'
57
+ @charset = ENV['CHARSET'] || 'utf8'
58
+ @collation = ENV['COLLATION'] || 'utf8_unicode_ci'
59
+ begin
60
+ ActiveRecord::Base.establish_connection(config.merge('database' => nil))
61
+ ActiveRecord::Base.connection.create_database(config['database'], :charset => (config['charset'] || @charset), :collation => (config['collation'] || @collation))
62
+ ActiveRecord::Base.establish_connection(config)
63
+ rescue
64
+ $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)"
65
+ end
66
+ when 'postgresql'
67
+ @encoding = config[:encoding] || ENV['CHARSET'] || 'utf8'
68
+ begin
69
+ ActiveRecord::Base.establish_connection(config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
70
+ ActiveRecord::Base.connection.create_database(config['database'], config.merge('encoding' => @encoding))
71
+ ActiveRecord::Base.establish_connection(config)
72
+ rescue
73
+ $stderr.puts $!, *($!.backtrace)
74
+ $stderr.puts "Couldn't create database for #{config.inspect}"
75
+ end
76
+ end
77
+ else
78
+ $stderr.puts "#{config['database']} already exists"
79
+ end
80
+ end
81
+
82
+ namespace :drop do
83
+ desc 'Drops all the local databases defined in config/database.yml'
84
+ task :all => :load_config do
85
+ ActiveRecord::Base.configurations.each_value do |config|
86
+ # Skip entries that don't have a database key
87
+ next unless config['database']
88
+ # Only connect to local databases
89
+ local_database?(config) { drop_database(config) }
90
+ end
91
+ end
92
+ end
93
+
94
+ desc 'Drops the database for the current RAILS_ENV'
95
+ task :drop => :load_config do
96
+ config = ActiveRecord::Base.configurations[RAILS_ENV || 'development']
97
+ begin
98
+ drop_database(config)
99
+ rescue Exception => e
100
+ puts "Couldn't drop #{config['database']} : #{e.inspect}"
101
+ end
102
+ end
103
+
104
+ def local_database?(config, &block)
105
+ if %w( 127.0.0.1 localhost ).include?(config['host']) || config['host'].blank?
106
+ yield
107
+ else
108
+ puts "This task only modifies local databases. #{config['database']} is on a remote host."
109
+ end
110
+ end
111
+
112
+
113
+ desc "Migrate the database through scripts in db/migrate and update db/schema.rb by invoking db:schema:dump. Target specific version with VERSION=x. Turn off output with VERBOSE=false."
114
+ task :migrate => :environment do
115
+ ActiveRecord::Migration.verbose = ENV["VERBOSE"] ? ENV["VERBOSE"] == "true" : true
116
+ ActiveRecord::Migrator.migrate("db/migrate/", ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
117
+ Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
118
+ end
119
+
120
+ namespace :migrate do
121
+ desc 'Rollbacks the database one migration and re migrate up. If you want to rollback more than one step, define STEP=x. Target specific version with VERSION=x.'
122
+ task :redo => :environment do
123
+ if ENV["VERSION"]
124
+ Rake::Task["db:migrate:down"].invoke
125
+ Rake::Task["db:migrate:up"].invoke
126
+ else
127
+ Rake::Task["db:rollback"].invoke
128
+ Rake::Task["db:migrate"].invoke
129
+ end
130
+ end
131
+
132
+ desc 'Resets your database using your migrations for the current environment'
133
+ task :reset => ["db:drop", "db:create", "db:migrate"]
134
+
135
+ desc 'Runs the "up" for a given migration VERSION.'
136
+ task :up => :environment do
137
+ version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
138
+ raise "VERSION is required" unless version
139
+ ActiveRecord::Migrator.run(:up, "db/migrate/", version)
140
+ Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
141
+ end
142
+
143
+ desc 'Runs the "down" for a given migration VERSION.'
144
+ task :down => :environment do
145
+ version = ENV["VERSION"] ? ENV["VERSION"].to_i : nil
146
+ raise "VERSION is required" unless version
147
+ ActiveRecord::Migrator.run(:down, "db/migrate/", version)
148
+ Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
149
+ end
150
+ end
151
+
152
+ desc 'Rolls the schema back to the previous version. Specify the number of steps with STEP=n'
153
+ task :rollback => :environment do
154
+ step = ENV['STEP'] ? ENV['STEP'].to_i : 1
155
+ ActiveRecord::Migrator.rollback('db/migrate/', step)
156
+ Rake::Task["db:schema:dump"].invoke if ActiveRecord::Base.schema_format == :ruby
157
+ end
158
+
159
+ desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.'
160
+ task :reset => [ 'db:drop', 'db:setup' ]
161
+
162
+ desc "Retrieves the charset for the current environment's database"
163
+ task :charset => :environment do
164
+ config = ActiveRecord::Base.configurations[RAILS_ENV || 'development']
165
+ case config['adapter']
166
+ when 'mysql'
167
+ ActiveRecord::Base.establish_connection(config)
168
+ puts ActiveRecord::Base.connection.charset
169
+ when 'postgresql'
170
+ ActiveRecord::Base.establish_connection(config)
171
+ puts ActiveRecord::Base.connection.encoding
172
+ else
173
+ puts 'sorry, your database adapter is not supported yet, feel free to submit a patch'
174
+ end
175
+ end
176
+
177
+ desc "Retrieves the collation for the current environment's database"
178
+ task :collation => :environment do
179
+ config = ActiveRecord::Base.configurations[RAILS_ENV || 'development']
180
+ case config['adapter']
181
+ when 'mysql'
182
+ ActiveRecord::Base.establish_connection(config)
183
+ puts ActiveRecord::Base.connection.collation
184
+ else
185
+ puts 'sorry, your database adapter is not supported yet, feel free to submit a patch'
186
+ end
187
+ end
188
+
189
+ desc "Retrieves the current schema version number"
190
+ task :version => :environment do
191
+ puts "Current version: #{ActiveRecord::Migrator.current_version}"
192
+ end
193
+
194
+ desc "Raises an error if there are pending migrations"
195
+ task :abort_if_pending_migrations => :environment do
196
+ if defined? ActiveRecord
197
+ pending_migrations = ActiveRecord::Migrator.new(:up, 'db/migrate').pending_migrations
198
+
199
+ if pending_migrations.any?
200
+ puts "You have #{pending_migrations.size} pending migrations:"
201
+ pending_migrations.each do |pending_migration|
202
+ puts ' %4d %s' % [pending_migration.version, pending_migration.name]
203
+ end
204
+ abort %{Run "rake db:migrate" to update your database then try again.}
205
+ end
206
+ end
207
+ end
208
+
209
+ desc 'Create the database, load the schema, and initialize with the seed data'
210
+ task :setup => [ 'db:create', 'db:schema:load', 'db:seed' ]
211
+
212
+ desc 'Load the seed data from db/seeds.rb'
213
+ task :seed => :environment do
214
+ seed_file = File.join(Rails.root, 'db', 'seeds.rb')
215
+ load(seed_file) if File.exist?(seed_file)
216
+ end
217
+
218
+ namespace :fixtures do
219
+ desc "Load fixtures into the current environment's database. Load specific fixtures using FIXTURES=x,y. Load from subdirectory in test/fixtures using FIXTURES_DIR=z. Specify an alternative path (eg. spec/fixtures) using FIXTURES_PATH=spec/fixtures."
220
+ task :load => :environment do
221
+ require 'active_record/fixtures'
222
+ ActiveRecord::Base.establish_connection(Rails.env)
223
+ base_dir = ENV['FIXTURES_PATH'] ? File.join(Rails.root, ENV['FIXTURES_PATH']) : File.join(Rails.root, 'test', 'fixtures')
224
+ fixtures_dir = ENV['FIXTURES_DIR'] ? File.join(base_dir, ENV['FIXTURES_DIR']) : base_dir
225
+
226
+ (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/).map {|f| File.join(fixtures_dir, f) } : Dir.glob(File.join(fixtures_dir, '*.{yml,csv}'))).each do |fixture_file|
227
+ Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*'))
228
+ end
229
+ end
230
+
231
+ desc "Search for a fixture given a LABEL or ID. Specify an alternative path (eg. spec/fixtures) using FIXTURES_PATH=spec/fixtures."
232
+ task :identify => :environment do
233
+ require "active_record/fixtures"
234
+
235
+ label, id = ENV["LABEL"], ENV["ID"]
236
+ raise "LABEL or ID required" if label.blank? && id.blank?
237
+
238
+ puts %Q(The fixture ID for "#{label}" is #{Fixtures.identify(label)}.) if label
239
+
240
+ base_dir = ENV['FIXTURES_PATH'] ? File.join(Rails.root, ENV['FIXTURES_PATH']) : File.join(Rails.root, 'test', 'fixtures')
241
+ Dir["#{base_dir}/**/*.yml"].each do |file|
242
+ if data = YAML::load(ERB.new(IO.read(file)).result)
243
+ data.keys.each do |key|
244
+ key_id = Fixtures.identify(key)
245
+
246
+ if key == label || key_id == id.to_i
247
+ puts "#{file}: #{key} (#{key_id})"
248
+ end
249
+ end
250
+ end
251
+ end
252
+ end
253
+ end
254
+
255
+ namespace :schema do
256
+ desc "Create a db/schema.rb file that can be portably used against any DB supported by AR"
257
+ task :dump => :environment do
258
+ require 'active_record/schema_dumper'
259
+ File.open(ENV['SCHEMA'] || "#{RAILS_ROOT}/db/schema.rb", "w") do |file|
260
+ ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, file)
261
+ end
262
+ Rake::Task["db:schema:dump"].reenable
263
+ end
264
+
265
+ desc "Load a schema.rb file into the database"
266
+ task :load => :environment do
267
+ file = ENV['SCHEMA'] || "#{RAILS_ROOT}/db/schema.rb"
268
+ if File.exists?(file)
269
+ load(file)
270
+ else
271
+ abort %{#{file} doesn't exist yet. Run "rake db:migrate" to create it then try again. If you do not intend to use a database, you should instead alter #{RAILS_ROOT}/config/environment.rb to prevent active_record from loading: config.frameworks -= [ :active_record ]}
272
+ end
273
+ end
274
+ end
275
+
276
+ namespace :structure do
277
+ desc "Dump the database structure to a SQL file"
278
+ task :dump => :environment do
279
+ abcs = ActiveRecord::Base.configurations
280
+ case abcs[RAILS_ENV]["adapter"]
281
+ when "mysql", "oci", "oracle"
282
+ ActiveRecord::Base.establish_connection(abcs[RAILS_ENV])
283
+ File.open("#{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql", "w+") { |f| f << ActiveRecord::Base.connection.structure_dump }
284
+ when "postgresql"
285
+ ENV['PGHOST'] = abcs[RAILS_ENV]["host"] if abcs[RAILS_ENV]["host"]
286
+ ENV['PGPORT'] = abcs[RAILS_ENV]["port"].to_s if abcs[RAILS_ENV]["port"]
287
+ ENV['PGPASSWORD'] = abcs[RAILS_ENV]["password"].to_s if abcs[RAILS_ENV]["password"]
288
+ search_path = abcs[RAILS_ENV]["schema_search_path"]
289
+ search_path = "--schema=#{search_path}" if search_path
290
+ `pg_dump -i -U "#{abcs[RAILS_ENV]["username"]}" -s -x -O -f db/#{RAILS_ENV}_structure.sql #{search_path} #{abcs[RAILS_ENV]["database"]}`
291
+ raise "Error dumping database" if $?.exitstatus == 1
292
+ when "sqlite", "sqlite3"
293
+ dbfile = abcs[RAILS_ENV]["database"] || abcs[RAILS_ENV]["dbfile"]
294
+ `#{abcs[RAILS_ENV]["adapter"]} #{dbfile} .schema > db/#{RAILS_ENV}_structure.sql`
295
+ when "sqlserver"
296
+ `scptxfr /s #{abcs[RAILS_ENV]["host"]} /d #{abcs[RAILS_ENV]["database"]} /I /f db\\#{RAILS_ENV}_structure.sql /q /A /r`
297
+ `scptxfr /s #{abcs[RAILS_ENV]["host"]} /d #{abcs[RAILS_ENV]["database"]} /I /F db\ /q /A /r`
298
+ when "firebird"
299
+ set_firebird_env(abcs[RAILS_ENV])
300
+ db_string = firebird_db_string(abcs[RAILS_ENV])
301
+ sh "isql -a #{db_string} > #{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql"
302
+ else
303
+ raise "Task not supported by '#{abcs["test"]["adapter"]}'"
304
+ end
305
+
306
+ if ActiveRecord::Base.connection.supports_migrations?
307
+ File.open("#{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql", "a") { |f| f << ActiveRecord::Base.connection.dump_schema_information }
308
+ end
309
+ end
310
+ end
311
+
312
+ namespace :test do
313
+ desc "Recreate the test database from the current schema.rb"
314
+ task :load => 'db:test:purge' do
315
+ ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['test'])
316
+ ActiveRecord::Schema.verbose = false
317
+ Rake::Task["db:schema:load"].invoke
318
+ end
319
+
320
+ desc "Recreate the test database from the current environment's database schema"
321
+ task :clone => %w(db:schema:dump db:test:load)
322
+
323
+ desc "Recreate the test databases from the development structure"
324
+ task :clone_structure => [ "db:structure:dump", "db:test:purge" ] do
325
+ abcs = ActiveRecord::Base.configurations
326
+ case abcs["test"]["adapter"]
327
+ when "mysql"
328
+ ActiveRecord::Base.establish_connection(:test)
329
+ ActiveRecord::Base.connection.execute('SET foreign_key_checks = 0')
330
+ IO.readlines("#{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql").join.split("\n\n").each do |table|
331
+ ActiveRecord::Base.connection.execute(table)
332
+ end
333
+ when "postgresql"
334
+ ENV['PGHOST'] = abcs["test"]["host"] if abcs["test"]["host"]
335
+ ENV['PGPORT'] = abcs["test"]["port"].to_s if abcs["test"]["port"]
336
+ ENV['PGPASSWORD'] = abcs["test"]["password"].to_s if abcs["test"]["password"]
337
+ `psql -U "#{abcs["test"]["username"]}" -f #{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql #{abcs["test"]["database"]}`
338
+ when "sqlite", "sqlite3"
339
+ dbfile = abcs["test"]["database"] || abcs["test"]["dbfile"]
340
+ `#{abcs["test"]["adapter"]} #{dbfile} < #{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql`
341
+ when "sqlserver"
342
+ `osql -E -S #{abcs["test"]["host"]} -d #{abcs["test"]["database"]} -i db\\#{RAILS_ENV}_structure.sql`
343
+ when "oci", "oracle"
344
+ ActiveRecord::Base.establish_connection(:test)
345
+ IO.readlines("#{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql").join.split(";\n\n").each do |ddl|
346
+ ActiveRecord::Base.connection.execute(ddl)
347
+ end
348
+ when "firebird"
349
+ set_firebird_env(abcs["test"])
350
+ db_string = firebird_db_string(abcs["test"])
351
+ sh "isql -i #{RAILS_ROOT}/db/#{RAILS_ENV}_structure.sql #{db_string}"
352
+ else
353
+ raise "Task not supported by '#{abcs["test"]["adapter"]}'"
354
+ end
355
+ end
356
+
357
+ desc "Empty the test database"
358
+ task :purge => :environment do
359
+ abcs = ActiveRecord::Base.configurations
360
+ case abcs["test"]["adapter"]
361
+ when "mysql"
362
+ ActiveRecord::Base.establish_connection(:test)
363
+ ActiveRecord::Base.connection.recreate_database(abcs["test"]["database"], abcs["test"])
364
+ when "postgresql"
365
+ ActiveRecord::Base.clear_active_connections!
366
+ drop_database(abcs['test'])
367
+ create_database(abcs['test'])
368
+ when "sqlite","sqlite3"
369
+ dbfile = abcs["test"]["database"] || abcs["test"]["dbfile"]
370
+ File.delete(dbfile) if File.exist?(dbfile)
371
+ when "sqlserver"
372
+ dropfkscript = "#{abcs["test"]["host"]}.#{abcs["test"]["database"]}.DP1".gsub(/\\/,'-')
373
+ `osql -E -S #{abcs["test"]["host"]} -d #{abcs["test"]["database"]} -i db\\#{dropfkscript}`
374
+ `osql -E -S #{abcs["test"]["host"]} -d #{abcs["test"]["database"]} -i db\\#{RAILS_ENV}_structure.sql`
375
+ when "oci", "oracle"
376
+ ActiveRecord::Base.establish_connection(:test)
377
+ ActiveRecord::Base.connection.structure_drop.split(";\n\n").each do |ddl|
378
+ ActiveRecord::Base.connection.execute(ddl)
379
+ end
380
+ when "firebird"
381
+ ActiveRecord::Base.establish_connection(:test)
382
+ ActiveRecord::Base.connection.recreate_database!
383
+ else
384
+ raise "Task not supported by '#{abcs["test"]["adapter"]}'"
385
+ end
386
+ end
387
+
388
+ desc 'Check for pending migrations and load the test schema'
389
+ task :prepare => 'db:abort_if_pending_migrations' do
390
+ if defined?(ActiveRecord) && !ActiveRecord::Base.configurations.blank?
391
+ Rake::Task[{ :sql => "db:test:clone_structure", :ruby => "db:test:load" }[ActiveRecord::Base.schema_format]].invoke
392
+ end
393
+ end
394
+ end
395
+
396
+ namespace :sessions do
397
+ desc "Creates a sessions migration for use with ActiveRecord::SessionStore"
398
+ task :create => :environment do
399
+ raise "Task unavailable to this database (no migration support)" unless ActiveRecord::Base.connection.supports_migrations?
400
+ require 'rails_generator'
401
+ require 'rails_generator/scripts/generate'
402
+ Rails::Generator::Scripts::Generate.new.run(["session_migration", ENV["MIGRATION"] || "CreateSessions"])
403
+ end
404
+
405
+ desc "Clear the sessions table"
406
+ task :clear => :environment do
407
+ ActiveRecord::Base.connection.execute "DELETE FROM #{session_table_name}"
408
+ end
409
+ end
410
+ end
411
+
412
+ def drop_database(config)
413
+ case config['adapter']
414
+ when 'mysql'
415
+ ActiveRecord::Base.establish_connection(config)
416
+ ActiveRecord::Base.connection.drop_database config['database']
417
+ when /^sqlite/
418
+ FileUtils.rm(File.join(RAILS_ROOT, config['database']))
419
+ when 'postgresql'
420
+ ActiveRecord::Base.establish_connection(config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
421
+ ActiveRecord::Base.connection.drop_database config['database']
422
+ end
423
+ end
424
+
425
+ def session_table_name
426
+ ActiveRecord::Base.pluralize_table_names ? :sessions : :session
427
+ end
428
+
429
+ def set_firebird_env(config)
430
+ ENV["ISC_USER"] = config["username"].to_s if config["username"]
431
+ ENV["ISC_PASSWORD"] = config["password"].to_s if config["password"]
432
+ end
433
+
434
+ def firebird_db_string(config)
435
+ FireRuby::Database.db_string_for(config.symbolize_keys)
436
+ end
@@ -0,0 +1,88 @@
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'] || "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 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 = "Rails Framework Documentation"
19
+ rdoc.options << '--line-numbers' << '--inline-source'
20
+ rdoc.rdoc_files.include('README')
21
+ rdoc.rdoc_files.include('vendor/rails/railties/CHANGELOG')
22
+ rdoc.rdoc_files.include('vendor/rails/railties/MIT-LICENSE')
23
+ rdoc.rdoc_files.include('vendor/rails/railties/README')
24
+ rdoc.rdoc_files.include('vendor/rails/railties/lib/{*.rb,commands/*.rb,rails_generator/*.rb}')
25
+ rdoc.rdoc_files.include('vendor/rails/activerecord/README')
26
+ rdoc.rdoc_files.include('vendor/rails/activerecord/CHANGELOG')
27
+ rdoc.rdoc_files.include('vendor/rails/activerecord/lib/active_record/**/*.rb')
28
+ rdoc.rdoc_files.exclude('vendor/rails/activerecord/lib/active_record/vendor/*')
29
+ rdoc.rdoc_files.include('vendor/rails/activeresource/README')
30
+ rdoc.rdoc_files.include('vendor/rails/activeresource/CHANGELOG')
31
+ rdoc.rdoc_files.include('vendor/rails/activeresource/lib/active_resource.rb')
32
+ rdoc.rdoc_files.include('vendor/rails/activeresource/lib/active_resource/*')
33
+ rdoc.rdoc_files.include('vendor/rails/actionpack/README')
34
+ rdoc.rdoc_files.include('vendor/rails/actionpack/CHANGELOG')
35
+ rdoc.rdoc_files.include('vendor/rails/actionpack/lib/action_controller/**/*.rb')
36
+ rdoc.rdoc_files.include('vendor/rails/actionpack/lib/action_view/**/*.rb')
37
+ rdoc.rdoc_files.include('vendor/rails/actionmailer/README')
38
+ rdoc.rdoc_files.include('vendor/rails/actionmailer/CHANGELOG')
39
+ rdoc.rdoc_files.include('vendor/rails/actionmailer/lib/action_mailer/base.rb')
40
+ rdoc.rdoc_files.include('vendor/rails/activesupport/README')
41
+ rdoc.rdoc_files.include('vendor/rails/activesupport/CHANGELOG')
42
+ rdoc.rdoc_files.include('vendor/rails/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
+ desc "Generate Rails guides"
56
+ task :guides do
57
+ require File.join(RAILTIES_PATH, "guides/rails_guides")
58
+ RailsGuides::Generator.new(File.join(RAILS_ROOT, "doc/guides")).generate
59
+ end
60
+
61
+ namespace :plugins do
62
+ # Define doc tasks for each plugin
63
+ plugins.each do |plugin|
64
+ desc "Generate documentation for the #{plugin} plugin"
65
+ task(plugin => :environment) do
66
+ plugin_base = "vendor/plugins/#{plugin}"
67
+ options = []
68
+ files = Rake::FileList.new
69
+ options << "-o doc/plugins/#{plugin}"
70
+ options << "--title '#{plugin.titlecase} Plugin Documentation'"
71
+ options << '--line-numbers' << '--inline-source'
72
+ options << '--charset' << 'utf-8'
73
+ options << '-T html'
74
+
75
+ files.include("#{plugin_base}/lib/**/*.rb")
76
+ if File.exist?("#{plugin_base}/README")
77
+ files.include("#{plugin_base}/README")
78
+ options << "--main '#{plugin_base}/README'"
79
+ end
80
+ files.include("#{plugin_base}/CHANGELOG") if File.exist?("#{plugin_base}/CHANGELOG")
81
+
82
+ options << files.to_s
83
+
84
+ sh %(rdoc #{options * ' '})
85
+ end
86
+ end
87
+ end
88
+ end