railties 3.0.0.beta

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 (334) hide show
  1. data/CHANGELOG +2201 -0
  2. data/README +286 -0
  3. data/bin/rails +11 -0
  4. data/builtin/rails_info/rails/info.rb +147 -0
  5. data/builtin/rails_info/rails/info_controller.rb +15 -0
  6. data/builtin/rails_info/rails/info_helper.rb +2 -0
  7. data/builtin/routes.rb +3 -0
  8. data/guides/files/javascripts/code_highlighter.js +188 -0
  9. data/guides/files/javascripts/guides.js +7 -0
  10. data/guides/files/javascripts/highlighters.js +90 -0
  11. data/guides/files/stylesheets/main.css +441 -0
  12. data/guides/files/stylesheets/print.css +52 -0
  13. data/guides/files/stylesheets/reset.css +43 -0
  14. data/guides/files/stylesheets/style.css +13 -0
  15. data/guides/files/stylesheets/syntax.css +31 -0
  16. data/guides/images/belongs_to.png +0 -0
  17. data/guides/images/book_icon.gif +0 -0
  18. data/guides/images/bullet.gif +0 -0
  19. data/guides/images/chapters_icon.gif +0 -0
  20. data/guides/images/check_bullet.gif +0 -0
  21. data/guides/images/credits_pic_blank.gif +0 -0
  22. data/guides/images/csrf.png +0 -0
  23. data/guides/images/customized_error_messages.png +0 -0
  24. data/guides/images/error_messages.png +0 -0
  25. data/guides/images/feature_tile.gif +0 -0
  26. data/guides/images/footer_tile.gif +0 -0
  27. data/guides/images/fxn.png +0 -0
  28. data/guides/images/grey_bullet.gif +0 -0
  29. data/guides/images/habtm.png +0 -0
  30. data/guides/images/has_many.png +0 -0
  31. data/guides/images/has_many_through.png +0 -0
  32. data/guides/images/has_one.png +0 -0
  33. data/guides/images/has_one_through.png +0 -0
  34. data/guides/images/header_backdrop.png +0 -0
  35. data/guides/images/header_tile.gif +0 -0
  36. data/guides/images/i18n/demo_localized_pirate.png +0 -0
  37. data/guides/images/i18n/demo_translated_en.png +0 -0
  38. data/guides/images/i18n/demo_translated_pirate.png +0 -0
  39. data/guides/images/i18n/demo_translation_missing.png +0 -0
  40. data/guides/images/i18n/demo_untranslated.png +0 -0
  41. data/guides/images/icons/README +5 -0
  42. data/guides/images/icons/callouts/1.png +0 -0
  43. data/guides/images/icons/callouts/10.png +0 -0
  44. data/guides/images/icons/callouts/11.png +0 -0
  45. data/guides/images/icons/callouts/12.png +0 -0
  46. data/guides/images/icons/callouts/13.png +0 -0
  47. data/guides/images/icons/callouts/14.png +0 -0
  48. data/guides/images/icons/callouts/15.png +0 -0
  49. data/guides/images/icons/callouts/2.png +0 -0
  50. data/guides/images/icons/callouts/3.png +0 -0
  51. data/guides/images/icons/callouts/4.png +0 -0
  52. data/guides/images/icons/callouts/5.png +0 -0
  53. data/guides/images/icons/callouts/6.png +0 -0
  54. data/guides/images/icons/callouts/7.png +0 -0
  55. data/guides/images/icons/callouts/8.png +0 -0
  56. data/guides/images/icons/callouts/9.png +0 -0
  57. data/guides/images/icons/caution.png +0 -0
  58. data/guides/images/icons/example.png +0 -0
  59. data/guides/images/icons/home.png +0 -0
  60. data/guides/images/icons/important.png +0 -0
  61. data/guides/images/icons/next.png +0 -0
  62. data/guides/images/icons/note.png +0 -0
  63. data/guides/images/icons/prev.png +0 -0
  64. data/guides/images/icons/tip.png +0 -0
  65. data/guides/images/icons/up.png +0 -0
  66. data/guides/images/icons/warning.png +0 -0
  67. data/guides/images/nav_arrow.gif +0 -0
  68. data/guides/images/polymorphic.png +0 -0
  69. data/guides/images/posts_index.png +0 -0
  70. data/guides/images/rails_guides_logo.gif +0 -0
  71. data/guides/images/rails_logo_remix.gif +0 -0
  72. data/guides/images/rails_welcome.png +0 -0
  73. data/guides/images/session_fixation.png +0 -0
  74. data/guides/images/tab_grey.gif +0 -0
  75. data/guides/images/tab_info.gif +0 -0
  76. data/guides/images/tab_note.gif +0 -0
  77. data/guides/images/tab_red.gif +0 -0
  78. data/guides/images/tab_yellow.gif +0 -0
  79. data/guides/images/tab_yellow.png +0 -0
  80. data/guides/images/validation_error_messages.png +0 -0
  81. data/guides/rails_guides.rb +44 -0
  82. data/guides/rails_guides/generator.rb +178 -0
  83. data/guides/rails_guides/helpers.rb +34 -0
  84. data/guides/rails_guides/indexer.rb +55 -0
  85. data/guides/rails_guides/levenshtein.rb +31 -0
  86. data/guides/rails_guides/textile_extensions.rb +41 -0
  87. data/guides/source/2_2_release_notes.textile +422 -0
  88. data/guides/source/2_3_release_notes.textile +610 -0
  89. data/guides/source/3_0_release_notes.textile +560 -0
  90. data/guides/source/action_controller_overview.textile +783 -0
  91. data/guides/source/action_mailer_basics.textile +437 -0
  92. data/guides/source/action_view_overview.textile +1481 -0
  93. data/guides/source/active_record_basics.textile +204 -0
  94. data/guides/source/active_record_querying.textile +961 -0
  95. data/guides/source/active_support_core_extensions.textile +1835 -0
  96. data/guides/source/activerecord_validations_callbacks.textile +1127 -0
  97. data/guides/source/ajax_on_rails.textile +342 -0
  98. data/guides/source/association_basics.textile +1816 -0
  99. data/guides/source/caching_with_rails.textile +390 -0
  100. data/guides/source/command_line.textile +589 -0
  101. data/guides/source/configuring.textile +290 -0
  102. data/guides/source/contribute.textile +71 -0
  103. data/guides/source/contributing_to_rails.textile +272 -0
  104. data/guides/source/credits.textile.erb +52 -0
  105. data/guides/source/debugging_rails_applications.textile +709 -0
  106. data/guides/source/form_helpers.textile +768 -0
  107. data/guides/source/generators.textile +378 -0
  108. data/guides/source/getting_started.textile +1310 -0
  109. data/guides/source/i18n.textile +879 -0
  110. data/guides/source/index.textile.erb +124 -0
  111. data/guides/source/layout.html.erb +103 -0
  112. data/guides/source/layouts_and_rendering.textile +979 -0
  113. data/guides/source/migrations.textile +591 -0
  114. data/guides/source/nested_model_forms.textile +222 -0
  115. data/guides/source/performance_testing.textile +531 -0
  116. data/guides/source/plugins.textile +1512 -0
  117. data/guides/source/rails_application_templates.textile +238 -0
  118. data/guides/source/rails_on_rack.textile +306 -0
  119. data/guides/source/routing.textile +903 -0
  120. data/guides/source/security.textile +984 -0
  121. data/guides/source/testing.textile +946 -0
  122. data/lib/generators/erb.rb +8 -0
  123. data/lib/generators/erb/controller/controller_generator.rb +21 -0
  124. data/lib/generators/erb/controller/templates/view.html.erb +2 -0
  125. data/lib/generators/erb/mailer/mailer_generator.rb +20 -0
  126. data/lib/generators/erb/mailer/templates/view.text.erb +3 -0
  127. data/lib/generators/erb/scaffold/scaffold_generator.rb +53 -0
  128. data/lib/generators/erb/scaffold/templates/_form.html.erb +13 -0
  129. data/lib/generators/erb/scaffold/templates/edit.html.erb +6 -0
  130. data/lib/generators/erb/scaffold/templates/index.html.erb +27 -0
  131. data/lib/generators/erb/scaffold/templates/layout.html.erb +16 -0
  132. data/lib/generators/erb/scaffold/templates/new.html.erb +5 -0
  133. data/lib/generators/erb/scaffold/templates/show.html.erb +10 -0
  134. data/lib/generators/rails/app/USAGE +9 -0
  135. data/lib/generators/rails/app/app_generator.rb +262 -0
  136. data/lib/generators/rails/app/templates/Gemfile +34 -0
  137. data/lib/generators/rails/app/templates/README +243 -0
  138. data/lib/generators/rails/app/templates/Rakefile +10 -0
  139. data/lib/generators/rails/app/templates/app/controllers/application_controller.rb +3 -0
  140. data/lib/generators/rails/app/templates/app/helpers/application_helper.rb +2 -0
  141. data/lib/generators/rails/app/templates/app/models/.empty_directory +0 -0
  142. data/lib/generators/rails/app/templates/app/views/layouts/.empty_directory +0 -0
  143. data/lib/generators/rails/app/templates/config.ru +4 -0
  144. data/lib/generators/rails/app/templates/config/application.rb +51 -0
  145. data/lib/generators/rails/app/templates/config/boot.rb +17 -0
  146. data/lib/generators/rails/app/templates/config/databases/frontbase.yml +28 -0
  147. data/lib/generators/rails/app/templates/config/databases/ibm_db.yml +71 -0
  148. data/lib/generators/rails/app/templates/config/databases/mysql.yml +60 -0
  149. data/lib/generators/rails/app/templates/config/databases/oracle.yml +39 -0
  150. data/lib/generators/rails/app/templates/config/databases/postgresql.yml +51 -0
  151. data/lib/generators/rails/app/templates/config/databases/sqlite3.yml +22 -0
  152. data/lib/generators/rails/app/templates/config/environment.rb +5 -0
  153. data/lib/generators/rails/app/templates/config/environments/development.rb.tt +19 -0
  154. data/lib/generators/rails/app/templates/config/environments/production.rb.tt +33 -0
  155. data/lib/generators/rails/app/templates/config/environments/test.rb.tt +29 -0
  156. data/lib/generators/rails/app/templates/config/initializers/backtrace_silencers.rb +7 -0
  157. data/lib/generators/rails/app/templates/config/initializers/cookie_verification_secret.rb.tt +7 -0
  158. data/lib/generators/rails/app/templates/config/initializers/inflections.rb +10 -0
  159. data/lib/generators/rails/app/templates/config/initializers/mime_types.rb +5 -0
  160. data/lib/generators/rails/app/templates/config/initializers/session_store.rb.tt +15 -0
  161. data/lib/generators/rails/app/templates/config/locales/en.yml +5 -0
  162. data/lib/generators/rails/app/templates/config/routes.rb +58 -0
  163. data/lib/generators/rails/app/templates/db/seeds.rb +7 -0
  164. data/lib/generators/rails/app/templates/doc/README_FOR_APP +2 -0
  165. data/lib/generators/rails/app/templates/gitignore +4 -0
  166. data/lib/generators/rails/app/templates/public/404.html +26 -0
  167. data/lib/generators/rails/app/templates/public/422.html +26 -0
  168. data/lib/generators/rails/app/templates/public/500.html +26 -0
  169. data/lib/generators/rails/app/templates/public/favicon.ico +0 -0
  170. data/lib/generators/rails/app/templates/public/images/rails.png +0 -0
  171. data/lib/generators/rails/app/templates/public/index.html +278 -0
  172. data/lib/generators/rails/app/templates/public/javascripts/application.js +2 -0
  173. data/lib/generators/rails/app/templates/public/javascripts/controls.js +963 -0
  174. data/lib/generators/rails/app/templates/public/javascripts/dragdrop.js +973 -0
  175. data/lib/generators/rails/app/templates/public/javascripts/effects.js +1128 -0
  176. data/lib/generators/rails/app/templates/public/javascripts/prototype.js +4320 -0
  177. data/lib/generators/rails/app/templates/public/javascripts/rails.js +110 -0
  178. data/lib/generators/rails/app/templates/public/robots.txt +5 -0
  179. data/lib/generators/rails/app/templates/public/stylesheets/.empty_directory +0 -0
  180. data/lib/generators/rails/app/templates/script/rails +9 -0
  181. data/lib/generators/rails/app/templates/test/fixtures/.empty_directory +0 -0
  182. data/lib/generators/rails/app/templates/test/functional/.empty_directory +0 -0
  183. data/lib/generators/rails/app/templates/test/integration/.empty_directory +0 -0
  184. data/lib/generators/rails/app/templates/test/performance/browsing_test.rb +9 -0
  185. data/lib/generators/rails/app/templates/test/test_helper.rb +13 -0
  186. data/lib/generators/rails/app/templates/test/unit/.empty_directory +0 -0
  187. data/lib/generators/rails/controller/USAGE +18 -0
  188. data/lib/generators/rails/controller/controller_generator.rb +14 -0
  189. data/lib/generators/rails/controller/templates/controller.rb +7 -0
  190. data/lib/generators/rails/generator/USAGE +11 -0
  191. data/lib/generators/rails/generator/generator_generator.rb +25 -0
  192. data/lib/generators/rails/generator/templates/%file_name%_generator.rb.tt +5 -0
  193. data/lib/generators/rails/generator/templates/USAGE.tt +8 -0
  194. data/lib/generators/rails/generator/templates/templates/.empty_directory +0 -0
  195. data/lib/generators/rails/helper/USAGE +17 -0
  196. data/lib/generators/rails/helper/helper_generator.rb +13 -0
  197. data/lib/generators/rails/helper/templates/helper.rb +2 -0
  198. data/lib/generators/rails/integration_test/USAGE +10 -0
  199. data/lib/generators/rails/integration_test/integration_test_generator.rb +7 -0
  200. data/lib/generators/rails/mailer/USAGE +15 -0
  201. data/lib/generators/rails/mailer/mailer_generator.rb +14 -0
  202. data/lib/generators/rails/mailer/templates/mailer.rb +16 -0
  203. data/lib/generators/rails/metal/USAGE +8 -0
  204. data/lib/generators/rails/metal/metal_generator.rb +11 -0
  205. data/lib/generators/rails/metal/templates/metal.rb +12 -0
  206. data/lib/generators/rails/migration/USAGE +29 -0
  207. data/lib/generators/rails/migration/migration_generator.rb +8 -0
  208. data/lib/generators/rails/model/USAGE +30 -0
  209. data/lib/generators/rails/model/model_generator.rb +8 -0
  210. data/lib/generators/rails/model_subclass/model_subclass_generator.rb +12 -0
  211. data/lib/generators/rails/observer/USAGE +12 -0
  212. data/lib/generators/rails/observer/observer_generator.rb +7 -0
  213. data/lib/generators/rails/performance_test/USAGE +10 -0
  214. data/lib/generators/rails/performance_test/performance_test_generator.rb +7 -0
  215. data/lib/generators/rails/plugin/USAGE +13 -0
  216. data/lib/generators/rails/plugin/plugin_generator.rb +47 -0
  217. data/lib/generators/rails/plugin/templates/MIT-LICENSE.tt +20 -0
  218. data/lib/generators/rails/plugin/templates/README.tt +13 -0
  219. data/lib/generators/rails/plugin/templates/Rakefile.tt +10 -0
  220. data/lib/generators/rails/plugin/templates/init.rb +1 -0
  221. data/lib/generators/rails/plugin/templates/install.rb +1 -0
  222. data/lib/generators/rails/plugin/templates/lib/%file_name%.rb.tt +1 -0
  223. data/lib/generators/rails/plugin/templates/lib/tasks/%file_name%_tasks.rake.tt +4 -0
  224. data/lib/generators/rails/plugin/templates/uninstall.rb +1 -0
  225. data/lib/generators/rails/resource/USAGE +23 -0
  226. data/lib/generators/rails/resource/resource_generator.rb +34 -0
  227. data/lib/generators/rails/scaffold/USAGE +29 -0
  228. data/lib/generators/rails/scaffold/scaffold_generator.rb +13 -0
  229. data/lib/generators/rails/scaffold_controller/USAGE +20 -0
  230. data/lib/generators/rails/scaffold_controller/scaffold_controller_generator.rb +27 -0
  231. data/lib/generators/rails/scaffold_controller/templates/controller.rb +85 -0
  232. data/lib/generators/rails/session_migration/USAGE +8 -0
  233. data/lib/generators/rails/session_migration/session_migration_generator.rb +8 -0
  234. data/lib/generators/rails/stylesheets/USAGE +5 -0
  235. data/lib/generators/rails/stylesheets/stylesheets_generator.rb +9 -0
  236. data/lib/generators/rails/stylesheets/templates/scaffold.css +61 -0
  237. data/lib/generators/test_unit.rb +8 -0
  238. data/lib/generators/test_unit/controller/controller_generator.rb +14 -0
  239. data/lib/generators/test_unit/controller/templates/functional_test.rb +8 -0
  240. data/lib/generators/test_unit/helper/helper_generator.rb +13 -0
  241. data/lib/generators/test_unit/helper/templates/helper_test.rb +4 -0
  242. data/lib/generators/test_unit/integration/integration_generator.rb +13 -0
  243. data/lib/generators/test_unit/integration/templates/integration_test.rb +10 -0
  244. data/lib/generators/test_unit/mailer/mailer_generator.rb +21 -0
  245. data/lib/generators/test_unit/mailer/templates/fixture +3 -0
  246. data/lib/generators/test_unit/mailer/templates/functional_test.rb +22 -0
  247. data/lib/generators/test_unit/model/model_generator.rb +24 -0
  248. data/lib/generators/test_unit/model/templates/fixtures.yml +23 -0
  249. data/lib/generators/test_unit/model/templates/unit_test.rb +8 -0
  250. data/lib/generators/test_unit/observer/observer_generator.rb +13 -0
  251. data/lib/generators/test_unit/observer/templates/unit_test.rb +8 -0
  252. data/lib/generators/test_unit/performance/performance_generator.rb +13 -0
  253. data/lib/generators/test_unit/performance/templates/performance_test.rb +9 -0
  254. data/lib/generators/test_unit/plugin/plugin_generator.rb +13 -0
  255. data/lib/generators/test_unit/plugin/templates/%file_name%_test.rb.tt +8 -0
  256. data/lib/generators/test_unit/plugin/templates/test_helper.rb +3 -0
  257. data/lib/generators/test_unit/scaffold/scaffold_generator.rb +18 -0
  258. data/lib/generators/test_unit/scaffold/templates/functional_test.rb +47 -0
  259. data/lib/rails.rb +95 -0
  260. data/lib/rails/all.rb +14 -0
  261. data/lib/rails/application.rb +125 -0
  262. data/lib/rails/application/bootstrap.rb +85 -0
  263. data/lib/rails/application/configurable.rb +19 -0
  264. data/lib/rails/application/configuration.rb +86 -0
  265. data/lib/rails/application/finisher.rb +49 -0
  266. data/lib/rails/application/metal_loader.rb +50 -0
  267. data/lib/rails/application/railties.rb +31 -0
  268. data/lib/rails/application/routes_reloader.rb +46 -0
  269. data/lib/rails/backtrace_cleaner.rb +54 -0
  270. data/lib/rails/code_statistics.rb +107 -0
  271. data/lib/rails/commands.rb +72 -0
  272. data/lib/rails/commands/application.rb +13 -0
  273. data/lib/rails/commands/console.rb +55 -0
  274. data/lib/rails/commands/dbconsole.rb +104 -0
  275. data/lib/rails/commands/destroy.rb +9 -0
  276. data/lib/rails/commands/generate.rb +9 -0
  277. data/lib/rails/commands/performance/benchmarker.rb +23 -0
  278. data/lib/rails/commands/performance/profiler.rb +46 -0
  279. data/lib/rails/commands/plugin.rb +542 -0
  280. data/lib/rails/commands/runner.rb +51 -0
  281. data/lib/rails/commands/server.rb +75 -0
  282. data/lib/rails/commands/update.rb +9 -0
  283. data/lib/rails/configuration.rb +191 -0
  284. data/lib/rails/console/app.rb +33 -0
  285. data/lib/rails/console/helpers.rb +5 -0
  286. data/lib/rails/console/sandbox.rb +6 -0
  287. data/lib/rails/deprecation.rb +62 -0
  288. data/lib/rails/dispatcher.rb +24 -0
  289. data/lib/rails/engine.rb +130 -0
  290. data/lib/rails/engine/configurable.rb +25 -0
  291. data/lib/rails/engine/configuration.rb +49 -0
  292. data/lib/rails/generators.rb +289 -0
  293. data/lib/rails/generators/actions.rb +309 -0
  294. data/lib/rails/generators/active_model.rb +78 -0
  295. data/lib/rails/generators/base.rb +362 -0
  296. data/lib/rails/generators/generated_attribute.rb +48 -0
  297. data/lib/rails/generators/migration.rb +64 -0
  298. data/lib/rails/generators/named_base.rb +95 -0
  299. data/lib/rails/generators/resource_helpers.rb +80 -0
  300. data/lib/rails/generators/test_case.rb +239 -0
  301. data/lib/rails/initializable.rb +97 -0
  302. data/lib/rails/paths.rb +144 -0
  303. data/lib/rails/performance_test_help.rb +3 -0
  304. data/lib/rails/plugin.rb +64 -0
  305. data/lib/rails/rack.rb +8 -0
  306. data/lib/rails/rack/debugger.rb +23 -0
  307. data/lib/rails/rack/log_tailer.rb +33 -0
  308. data/lib/rails/rack/logger.rb +34 -0
  309. data/lib/rails/rack/static.rb +5 -0
  310. data/lib/rails/railtie.rb +74 -0
  311. data/lib/rails/railtie/configurable.rb +23 -0
  312. data/lib/rails/railtie/configuration.rb +9 -0
  313. data/lib/rails/railties_path.rb +1 -0
  314. data/lib/rails/ruby_version_check.rb +10 -0
  315. data/lib/rails/rubyprof_ext.rb +35 -0
  316. data/lib/rails/source_annotation_extractor.rb +102 -0
  317. data/lib/rails/subscriber.rb +108 -0
  318. data/lib/rails/subscriber/test_helper.rb +98 -0
  319. data/lib/rails/tasks.rb +16 -0
  320. data/lib/rails/tasks/annotations.rake +20 -0
  321. data/lib/rails/tasks/documentation.rake +96 -0
  322. data/lib/rails/tasks/framework.rake +69 -0
  323. data/lib/rails/tasks/log.rake +9 -0
  324. data/lib/rails/tasks/middleware.rake +7 -0
  325. data/lib/rails/tasks/misc.rake +71 -0
  326. data/lib/rails/tasks/routes.rake +17 -0
  327. data/lib/rails/tasks/statistics.rake +16 -0
  328. data/lib/rails/tasks/tmp.rake +37 -0
  329. data/lib/rails/test_help.rb +30 -0
  330. data/lib/rails/test_unit/railtie.rb +17 -0
  331. data/lib/rails/test_unit/testing.rake +130 -0
  332. data/lib/rails/version.rb +9 -0
  333. data/lib/rails/webrick_server.rb +156 -0
  334. metadata +427 -0
@@ -0,0 +1,97 @@
1
+ require 'tsort'
2
+
3
+ module Rails
4
+ module Initializable
5
+ def self.included(base)
6
+ base.extend ClassMethods
7
+ end
8
+
9
+ class Initializer
10
+ attr_reader :name, :block
11
+
12
+ def initialize(name, context, options, &block)
13
+ @name, @context, @options, @block = name, context, options, block
14
+ end
15
+
16
+ def before
17
+ @options[:before]
18
+ end
19
+
20
+ def after
21
+ @options[:after]
22
+ end
23
+
24
+ def run(*args)
25
+ @context.instance_exec(*args, &block)
26
+ end
27
+
28
+ def bind(context)
29
+ return self if @context
30
+ Initializer.new(@name, context, @options, &block)
31
+ end
32
+ end
33
+
34
+ class Collection < Array
35
+ include TSort
36
+
37
+ alias :tsort_each_node :each
38
+ def tsort_each_child(initializer, &block)
39
+ select { |i| i.before == initializer.name || i.name == initializer.after }.each(&block)
40
+ end
41
+
42
+ def initialize(initializers = [])
43
+ super(initializers)
44
+ replace(tsort)
45
+ end
46
+
47
+ def +(other)
48
+ Collection.new(to_a + other.to_a)
49
+ end
50
+ end
51
+
52
+ def run_initializers(*args)
53
+ return if instance_variable_defined?(:@ran)
54
+ initializers.each do |initializer|
55
+ initializer.run(*args)
56
+ end
57
+ @ran = true
58
+ end
59
+
60
+ def initializers
61
+ @initializers ||= self.class.initializers_for(self)
62
+ end
63
+
64
+ module ClassMethods
65
+ def initializers
66
+ @initializers ||= []
67
+ end
68
+
69
+ def initializers_chain
70
+ initializers = Collection.new
71
+ ancestors.reverse_each do |klass|
72
+ next unless klass.respond_to?(:initializers)
73
+ initializers = initializers + klass.initializers
74
+ end
75
+ initializers
76
+ end
77
+
78
+ def initializers_for(binding)
79
+ Collection.new(initializers_chain.map { |i| i.bind(binding) })
80
+ end
81
+
82
+ def initializer(name, opts = {}, &blk)
83
+ raise ArgumentError, "A block must be passed when defining an initializer" unless blk
84
+ opts[:after] ||= initializers.last.name unless initializers.empty? || initializers.find { |i| i.name == opts[:before] }
85
+ initializers << Initializer.new(name, nil, opts, &blk)
86
+ end
87
+
88
+ def run_initializers(*args)
89
+ return if @ran
90
+ initializers_chain.each do |initializer|
91
+ instance_exec(*args, &initializer.block)
92
+ end
93
+ @ran = true
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,144 @@
1
+ require 'set'
2
+
3
+ module Rails
4
+ module Paths
5
+ module PathParent
6
+ def method_missing(id, *args)
7
+ name = id.to_s
8
+
9
+ if name =~ /^(.*)=$/ || args.any?
10
+ @children[$1 || name] = Path.new(@root, *args)
11
+ elsif path = @children[name]
12
+ path
13
+ else
14
+ super
15
+ end
16
+ end
17
+ end
18
+
19
+ class Root
20
+ include PathParent
21
+
22
+ attr_accessor :path
23
+
24
+ def initialize(path)
25
+ raise if path.is_a?(Array)
26
+
27
+ @children = {}
28
+
29
+ @path = path
30
+ @root = self
31
+ @all_paths = []
32
+ end
33
+
34
+ def all_paths
35
+ @all_paths.uniq!
36
+ @all_paths
37
+ end
38
+
39
+ def load_once
40
+ filter { |path| path.paths if path.load_once? }
41
+ end
42
+
43
+ def eager_load
44
+ filter { |path| path.paths if path.eager_load? }
45
+ end
46
+
47
+ def load_paths
48
+ filter { |path| path.paths if path.load_path? }
49
+ end
50
+
51
+ def push(*)
52
+ raise "Application root can only have one physical path"
53
+ end
54
+
55
+ alias unshift push
56
+ alias << push
57
+ alias concat push
58
+
59
+ protected
60
+
61
+ def filter(&block)
62
+ all_paths.map(&block).compact.flatten.uniq.select { |p| File.exists?(p) }
63
+ end
64
+ end
65
+
66
+ class Path
67
+ include PathParent, Enumerable
68
+
69
+ attr_reader :path
70
+ attr_accessor :glob
71
+
72
+ def initialize(root, *paths)
73
+ @options = paths.last.is_a?(::Hash) ? paths.pop : {}
74
+ @children = {}
75
+ @root = root
76
+ @paths = paths.flatten
77
+ @glob = @options.delete(:glob)
78
+
79
+ @load_once = @options[:load_once]
80
+ @eager_load = @options[:eager_load]
81
+ @load_path = @options[:load_path] || @eager_load || @load_once
82
+
83
+ @root.all_paths << self
84
+ end
85
+
86
+ def each
87
+ to_a.each { |p| yield p }
88
+ end
89
+
90
+ def push(path)
91
+ @paths.push path
92
+ end
93
+
94
+ alias << push
95
+
96
+ def unshift(path)
97
+ @paths.unshift path
98
+ end
99
+
100
+ def concat(paths)
101
+ @paths.concat paths
102
+ end
103
+
104
+ def load_once!
105
+ @load_once = true
106
+ @load_path = true
107
+ end
108
+
109
+ def load_once?
110
+ @load_once
111
+ end
112
+
113
+ def eager_load!
114
+ @eager_load = true
115
+ @load_path = true
116
+ end
117
+
118
+ def eager_load?
119
+ @eager_load
120
+ end
121
+
122
+ def load_path!
123
+ @load_path = true
124
+ end
125
+
126
+ def load_path?
127
+ @load_path
128
+ end
129
+
130
+ def paths
131
+ raise "You need to set a path root" unless @root.path
132
+ result = @paths.map do |p|
133
+ path = File.expand_path(p, @root.path)
134
+ @glob ? Dir[File.join(path, @glob)] : path
135
+ end
136
+ result.flatten!
137
+ result.uniq!
138
+ result
139
+ end
140
+
141
+ alias to_a paths
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,3 @@
1
+ ActionController::Base.perform_caching = true
2
+ ActiveSupport::Dependencies.mechanism = :require
3
+ Rails.logger.level = ActiveSupport::BufferedLogger::INFO
@@ -0,0 +1,64 @@
1
+ require 'rails/engine'
2
+
3
+ module Rails
4
+ class Plugin < Engine
5
+ def self.inherited(base)
6
+ raise "You cannot inherit from Rails::Plugin"
7
+ end
8
+
9
+ def self.all(list, paths)
10
+ plugins = []
11
+ paths.each do |path|
12
+ Dir["#{path}/*"].each do |plugin_path|
13
+ plugin = new(plugin_path)
14
+ next unless list.include?(plugin.name) || list.include?(:all)
15
+ plugins << plugin
16
+ end
17
+ end
18
+
19
+ plugins.sort_by do |p|
20
+ [list.index(p.name) || list.index(:all), p.name.to_s]
21
+ end
22
+ end
23
+
24
+ attr_reader :name, :path
25
+
26
+ def load_tasks
27
+ super
28
+ extra_tasks = Dir["#{root}/{tasks,rails/tasks}/**/*.rake"]
29
+
30
+ unless extra_tasks.empty?
31
+ ActiveSupport::Deprecation.warn "Having rake tasks in PLUGIN_PATH/tasks or " <<
32
+ "PLUGIN_PATH/rails/tasks is deprecated. Use to PLUGIN_PATH/lib/tasks instead"
33
+ extra_tasks.sort.each { |ext| load(ext) }
34
+ end
35
+ end
36
+
37
+ def initialize(root)
38
+ @name = File.basename(root).to_sym
39
+ config.root = root
40
+ end
41
+
42
+ def config
43
+ @config ||= Engine::Configuration.new
44
+ end
45
+
46
+ initializer :load_init_rb, :before => :load_application_initializers do |app|
47
+ file = Dir["#{root}/{rails/init,init}.rb"].first
48
+ config = app.config
49
+ eval(File.read(file), binding, file) if file && File.file?(file)
50
+ end
51
+
52
+ initializer :sanity_check_railties_collision do
53
+ if Engine.subclasses.map { |k| k.root.to_s }.include?(root.to_s)
54
+ raise "\"#{name}\" is a Railtie/Engine and cannot be installed as plugin"
55
+ end
56
+ end
57
+
58
+ protected
59
+
60
+ def reloadable?(app)
61
+ app.config.reload_plugins
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,8 @@
1
+ module Rails
2
+ module Rack
3
+ autoload :Debugger, "rails/rack/debugger"
4
+ autoload :Logger, "rails/rack/logger"
5
+ autoload :LogTailer, "rails/rack/log_tailer"
6
+ autoload :Static, "rails/rack/static"
7
+ end
8
+ end
@@ -0,0 +1,23 @@
1
+ module Rails
2
+ module Rack
3
+ class Debugger
4
+ def initialize(app)
5
+ @app = app
6
+
7
+ ARGV.clear # clear ARGV so that script/server options aren't passed to IRB
8
+
9
+ require_library_or_gem 'ruby-debug'
10
+ ::Debugger.start
11
+ ::Debugger.settings[:autoeval] = true if ::Debugger.respond_to?(:settings)
12
+ puts "=> Debugger enabled"
13
+ rescue Exception
14
+ puts "You need to install ruby-debug to run the server in debugging mode. With gems, use 'gem install ruby-debug'"
15
+ exit
16
+ end
17
+
18
+ def call(env)
19
+ @app.call(env)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,33 @@
1
+ module Rails
2
+ module Rack
3
+ class LogTailer
4
+ def initialize(app, log = nil)
5
+ @app = app
6
+
7
+ path = Pathname.new(log || "#{File.expand_path(Rails.root)}/log/#{Rails.env}.log").cleanpath
8
+ @cursor = ::File.size(path)
9
+ @last_checked = Time.now.to_f
10
+
11
+ @file = ::File.open(path, 'r')
12
+ end
13
+
14
+ def call(env)
15
+ response = @app.call(env)
16
+ tail!
17
+ response
18
+ end
19
+
20
+ def tail!
21
+ @file.seek @cursor
22
+
23
+ mod = @file.mtime.to_f
24
+ if mod > @last_checked
25
+ contents = @file.read
26
+ @last_checked = mod
27
+ @cursor += contents.size
28
+ $stdout.print contents
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,34 @@
1
+ require 'rails/subscriber'
2
+
3
+ module Rails
4
+ module Rack
5
+ # Log the request started and flush all loggers after it.
6
+ class Logger < Rails::Subscriber
7
+ def initialize(app)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ before_dispatch(env)
13
+ @app.call(env)
14
+ ensure
15
+ after_dispatch(env)
16
+ end
17
+
18
+ protected
19
+
20
+ def before_dispatch(env)
21
+ request = ActionDispatch::Request.new(env)
22
+ path = request.request_uri.inspect rescue "unknown"
23
+
24
+ info "\n\nStarted #{request.method.to_s.upcase} #{path} " <<
25
+ "for #{request.remote_ip} at #{Time.now.to_s(:db)}"
26
+ end
27
+
28
+ def after_dispatch(env)
29
+ Rails::Subscriber.flush_all!
30
+ end
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,5 @@
1
+ require 'action_dispatch'
2
+
3
+ module Rails::Rack
4
+ Static = ActiveSupport::Deprecation::DeprecatedConstantProxy.new('Rails::Rack::Static', ActionDispatch::Static)
5
+ end
@@ -0,0 +1,74 @@
1
+ require 'rails/initializable'
2
+ require 'rails/configuration'
3
+
4
+ module Rails
5
+ class Railtie
6
+ autoload :Configurable, "rails/railtie/configurable"
7
+ autoload :Configuration, "rails/railtie/configuration"
8
+
9
+ include Initializable
10
+
11
+ ABSTRACT_RAILTIES = %w(Rails::Plugin Rails::Engine Rails::Application)
12
+
13
+ class << self
14
+ def subclasses
15
+ @subclasses ||= []
16
+ end
17
+
18
+ def inherited(base)
19
+ unless abstract_railtie?(base)
20
+ base.send(:include, self::Configurable)
21
+ subclasses << base
22
+ end
23
+ end
24
+
25
+ def railtie_name(railtie_name = nil)
26
+ @railtie_name ||= name.demodulize.underscore
27
+ @railtie_name = railtie_name if railtie_name
28
+ @railtie_name
29
+ end
30
+
31
+ def railtie_names
32
+ subclasses.map { |p| p.railtie_name }
33
+ end
34
+
35
+ def subscriber(subscriber)
36
+ Rails::Subscriber.add(railtie_name, subscriber)
37
+ end
38
+
39
+ def rake_tasks(&blk)
40
+ @rake_tasks ||= []
41
+ @rake_tasks << blk if blk
42
+ @rake_tasks
43
+ end
44
+
45
+ def generators(&blk)
46
+ @generators ||= []
47
+ @generators << blk if blk
48
+ @generators
49
+ end
50
+
51
+ protected
52
+
53
+ def abstract_railtie?(base)
54
+ ABSTRACT_RAILTIES.include?(base.name)
55
+ end
56
+ end
57
+
58
+ def rake_tasks
59
+ self.class.rake_tasks
60
+ end
61
+
62
+ def generators
63
+ self.class.generators
64
+ end
65
+
66
+ def load_tasks
67
+ rake_tasks.each { |blk| blk.call }
68
+ end
69
+
70
+ def load_generators
71
+ generators.each { |blk| blk.call }
72
+ end
73
+ end
74
+ end