openskies 0.0.1

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 (494) hide show
  1. data/CHANGELOG.md +87 -0
  2. data/README.rdoc +35 -0
  3. data/bin/openskies +9 -0
  4. data/guides/assets/images/belongs_to.png +0 -0
  5. data/guides/assets/images/book_icon.gif +0 -0
  6. data/guides/assets/images/bullet.gif +0 -0
  7. data/guides/assets/images/challenge.png +0 -0
  8. data/guides/assets/images/chapters_icon.gif +0 -0
  9. data/guides/assets/images/check_bullet.gif +0 -0
  10. data/guides/assets/images/credits_pic_blank.gif +0 -0
  11. data/guides/assets/images/csrf.png +0 -0
  12. data/guides/assets/images/customized_error_messages.png +0 -0
  13. data/guides/assets/images/edge_badge.png +0 -0
  14. data/guides/assets/images/error_messages.png +0 -0
  15. data/guides/assets/images/feature_tile.gif +0 -0
  16. data/guides/assets/images/footer_tile.gif +0 -0
  17. data/guides/assets/images/fxn.png +0 -0
  18. data/guides/assets/images/grey_bullet.gif +0 -0
  19. data/guides/assets/images/habtm.png +0 -0
  20. data/guides/assets/images/has_many.png +0 -0
  21. data/guides/assets/images/has_many_through.png +0 -0
  22. data/guides/assets/images/has_one.png +0 -0
  23. data/guides/assets/images/has_one_through.png +0 -0
  24. data/guides/assets/images/header_backdrop.png +0 -0
  25. data/guides/assets/images/header_tile.gif +0 -0
  26. data/guides/assets/images/i18n/demo_html_safe.png +0 -0
  27. data/guides/assets/images/i18n/demo_localized_pirate.png +0 -0
  28. data/guides/assets/images/i18n/demo_translated_en.png +0 -0
  29. data/guides/assets/images/i18n/demo_translated_pirate.png +0 -0
  30. data/guides/assets/images/i18n/demo_translation_missing.png +0 -0
  31. data/guides/assets/images/i18n/demo_untranslated.png +0 -0
  32. data/guides/assets/images/icons/README +5 -0
  33. data/guides/assets/images/icons/callouts/1.png +0 -0
  34. data/guides/assets/images/icons/callouts/10.png +0 -0
  35. data/guides/assets/images/icons/callouts/11.png +0 -0
  36. data/guides/assets/images/icons/callouts/12.png +0 -0
  37. data/guides/assets/images/icons/callouts/13.png +0 -0
  38. data/guides/assets/images/icons/callouts/14.png +0 -0
  39. data/guides/assets/images/icons/callouts/15.png +0 -0
  40. data/guides/assets/images/icons/callouts/2.png +0 -0
  41. data/guides/assets/images/icons/callouts/3.png +0 -0
  42. data/guides/assets/images/icons/callouts/4.png +0 -0
  43. data/guides/assets/images/icons/callouts/5.png +0 -0
  44. data/guides/assets/images/icons/callouts/6.png +0 -0
  45. data/guides/assets/images/icons/callouts/7.png +0 -0
  46. data/guides/assets/images/icons/callouts/8.png +0 -0
  47. data/guides/assets/images/icons/callouts/9.png +0 -0
  48. data/guides/assets/images/icons/caution.png +0 -0
  49. data/guides/assets/images/icons/example.png +0 -0
  50. data/guides/assets/images/icons/home.png +0 -0
  51. data/guides/assets/images/icons/important.png +0 -0
  52. data/guides/assets/images/icons/next.png +0 -0
  53. data/guides/assets/images/icons/note.png +0 -0
  54. data/guides/assets/images/icons/prev.png +0 -0
  55. data/guides/assets/images/icons/tip.png +0 -0
  56. data/guides/assets/images/icons/up.png +0 -0
  57. data/guides/assets/images/icons/warning.png +0 -0
  58. data/guides/assets/images/jaimeiniesta.jpg +0 -0
  59. data/guides/assets/images/nav_arrow.gif +0 -0
  60. data/guides/assets/images/polymorphic.png +0 -0
  61. data/guides/assets/images/posts_index.png +0 -0
  62. data/guides/assets/images/radar.png +0 -0
  63. data/guides/assets/images/rails_guides_kindle_cover.jpg +0 -0
  64. data/guides/assets/images/rails_guides_logo.gif +0 -0
  65. data/guides/assets/images/rails_logo_remix.gif +0 -0
  66. data/guides/assets/images/rails_welcome.png +0 -0
  67. data/guides/assets/images/session_fixation.png +0 -0
  68. data/guides/assets/images/tab_grey.gif +0 -0
  69. data/guides/assets/images/tab_info.gif +0 -0
  70. data/guides/assets/images/tab_note.gif +0 -0
  71. data/guides/assets/images/tab_red.gif +0 -0
  72. data/guides/assets/images/tab_yellow.gif +0 -0
  73. data/guides/assets/images/tab_yellow.png +0 -0
  74. data/guides/assets/images/validation_error_messages.png +0 -0
  75. data/guides/assets/images/vijaydev.jpg +0 -0
  76. data/guides/assets/javascripts/guides.js +7 -0
  77. data/guides/assets/javascripts/syntaxhighlighter/shBrushAS3.js +59 -0
  78. data/guides/assets/javascripts/syntaxhighlighter/shBrushAppleScript.js +75 -0
  79. data/guides/assets/javascripts/syntaxhighlighter/shBrushBash.js +59 -0
  80. data/guides/assets/javascripts/syntaxhighlighter/shBrushCSharp.js +65 -0
  81. data/guides/assets/javascripts/syntaxhighlighter/shBrushColdFusion.js +100 -0
  82. data/guides/assets/javascripts/syntaxhighlighter/shBrushCpp.js +97 -0
  83. data/guides/assets/javascripts/syntaxhighlighter/shBrushCss.js +91 -0
  84. data/guides/assets/javascripts/syntaxhighlighter/shBrushDelphi.js +55 -0
  85. data/guides/assets/javascripts/syntaxhighlighter/shBrushDiff.js +41 -0
  86. data/guides/assets/javascripts/syntaxhighlighter/shBrushErlang.js +52 -0
  87. data/guides/assets/javascripts/syntaxhighlighter/shBrushGroovy.js +67 -0
  88. data/guides/assets/javascripts/syntaxhighlighter/shBrushJScript.js +52 -0
  89. data/guides/assets/javascripts/syntaxhighlighter/shBrushJava.js +57 -0
  90. data/guides/assets/javascripts/syntaxhighlighter/shBrushJavaFX.js +58 -0
  91. data/guides/assets/javascripts/syntaxhighlighter/shBrushPerl.js +72 -0
  92. data/guides/assets/javascripts/syntaxhighlighter/shBrushPhp.js +88 -0
  93. data/guides/assets/javascripts/syntaxhighlighter/shBrushPlain.js +33 -0
  94. data/guides/assets/javascripts/syntaxhighlighter/shBrushPowerShell.js +74 -0
  95. data/guides/assets/javascripts/syntaxhighlighter/shBrushPython.js +64 -0
  96. data/guides/assets/javascripts/syntaxhighlighter/shBrushRuby.js +55 -0
  97. data/guides/assets/javascripts/syntaxhighlighter/shBrushSass.js +94 -0
  98. data/guides/assets/javascripts/syntaxhighlighter/shBrushScala.js +51 -0
  99. data/guides/assets/javascripts/syntaxhighlighter/shBrushSql.js +66 -0
  100. data/guides/assets/javascripts/syntaxhighlighter/shBrushVb.js +56 -0
  101. data/guides/assets/javascripts/syntaxhighlighter/shBrushXml.js +69 -0
  102. data/guides/assets/javascripts/syntaxhighlighter/shCore.js +17 -0
  103. data/guides/assets/stylesheets/fixes.css +16 -0
  104. data/guides/assets/stylesheets/kindle.css +11 -0
  105. data/guides/assets/stylesheets/main.css +453 -0
  106. data/guides/assets/stylesheets/print.css +52 -0
  107. data/guides/assets/stylesheets/reset.css +43 -0
  108. data/guides/assets/stylesheets/style.css +13 -0
  109. data/guides/assets/stylesheets/syntaxhighlighter/shCore.css +226 -0
  110. data/guides/assets/stylesheets/syntaxhighlighter/shCoreDefault.css +328 -0
  111. data/guides/assets/stylesheets/syntaxhighlighter/shCoreDjango.css +331 -0
  112. data/guides/assets/stylesheets/syntaxhighlighter/shCoreEclipse.css +339 -0
  113. data/guides/assets/stylesheets/syntaxhighlighter/shCoreEmacs.css +324 -0
  114. data/guides/assets/stylesheets/syntaxhighlighter/shCoreFadeToGrey.css +328 -0
  115. data/guides/assets/stylesheets/syntaxhighlighter/shCoreMDUltra.css +324 -0
  116. data/guides/assets/stylesheets/syntaxhighlighter/shCoreMidnight.css +324 -0
  117. data/guides/assets/stylesheets/syntaxhighlighter/shCoreRDark.css +324 -0
  118. data/guides/assets/stylesheets/syntaxhighlighter/shThemeDefault.css +117 -0
  119. data/guides/assets/stylesheets/syntaxhighlighter/shThemeDjango.css +120 -0
  120. data/guides/assets/stylesheets/syntaxhighlighter/shThemeEclipse.css +128 -0
  121. data/guides/assets/stylesheets/syntaxhighlighter/shThemeEmacs.css +113 -0
  122. data/guides/assets/stylesheets/syntaxhighlighter/shThemeFadeToGrey.css +117 -0
  123. data/guides/assets/stylesheets/syntaxhighlighter/shThemeMDUltra.css +113 -0
  124. data/guides/assets/stylesheets/syntaxhighlighter/shThemeMidnight.css +113 -0
  125. data/guides/assets/stylesheets/syntaxhighlighter/shThemeRDark.css +113 -0
  126. data/guides/assets/stylesheets/syntaxhighlighter/shThemeRailsGuides.css +116 -0
  127. data/guides/code/getting_started/Gemfile +38 -0
  128. data/guides/code/getting_started/README.rdoc +261 -0
  129. data/guides/code/getting_started/Rakefile +7 -0
  130. data/guides/code/getting_started/app/assets/images/rails.png +0 -0
  131. data/guides/code/getting_started/app/assets/javascripts/application.js +15 -0
  132. data/guides/code/getting_started/app/assets/javascripts/comments.js.coffee +3 -0
  133. data/guides/code/getting_started/app/assets/javascripts/home.js.coffee +3 -0
  134. data/guides/code/getting_started/app/assets/javascripts/posts.js.coffee +3 -0
  135. data/guides/code/getting_started/app/assets/stylesheets/application.css +13 -0
  136. data/guides/code/getting_started/app/assets/stylesheets/comments.css.scss +3 -0
  137. data/guides/code/getting_started/app/assets/stylesheets/home.css.scss +3 -0
  138. data/guides/code/getting_started/app/assets/stylesheets/posts.css.scss +3 -0
  139. data/guides/code/getting_started/app/assets/stylesheets/scaffolds.css.scss +56 -0
  140. data/guides/code/getting_started/app/controllers/application_controller.rb +3 -0
  141. data/guides/code/getting_started/app/controllers/comments_controller.rb +16 -0
  142. data/guides/code/getting_started/app/controllers/home_controller.rb +5 -0
  143. data/guides/code/getting_started/app/controllers/posts_controller.rb +84 -0
  144. data/guides/code/getting_started/app/helpers/application_helper.rb +2 -0
  145. data/guides/code/getting_started/app/helpers/comments_helper.rb +2 -0
  146. data/guides/code/getting_started/app/helpers/home_helper.rb +2 -0
  147. data/guides/code/getting_started/app/helpers/posts_helper.rb +5 -0
  148. data/guides/code/getting_started/app/models/comment.rb +3 -0
  149. data/guides/code/getting_started/app/models/post.rb +11 -0
  150. data/guides/code/getting_started/app/models/tag.rb +3 -0
  151. data/guides/code/getting_started/app/views/comments/_comment.html.erb +15 -0
  152. data/guides/code/getting_started/app/views/comments/_form.html.erb +13 -0
  153. data/guides/code/getting_started/app/views/home/index.html.erb +2 -0
  154. data/guides/code/getting_started/app/views/layouts/application.html.erb +14 -0
  155. data/guides/code/getting_started/app/views/posts/_form.html.erb +32 -0
  156. data/guides/code/getting_started/app/views/posts/edit.html.erb +6 -0
  157. data/guides/code/getting_started/app/views/posts/index.html.erb +27 -0
  158. data/guides/code/getting_started/app/views/posts/new.html.erb +5 -0
  159. data/guides/code/getting_started/app/views/posts/show.html.erb +31 -0
  160. data/guides/code/getting_started/app/views/tags/_form.html.erb +12 -0
  161. data/guides/code/getting_started/config/application.rb +59 -0
  162. data/guides/code/getting_started/config/boot.rb +6 -0
  163. data/guides/code/getting_started/config/database.yml +25 -0
  164. data/guides/code/getting_started/config/environment.rb +5 -0
  165. data/guides/code/getting_started/config/environments/development.rb +37 -0
  166. data/guides/code/getting_started/config/environments/production.rb +67 -0
  167. data/guides/code/getting_started/config/environments/test.rb +37 -0
  168. data/guides/code/getting_started/config/initializers/backtrace_silencers.rb +7 -0
  169. data/guides/code/getting_started/config/initializers/inflections.rb +15 -0
  170. data/guides/code/getting_started/config/initializers/mime_types.rb +5 -0
  171. data/guides/code/getting_started/config/initializers/secret_token.rb +7 -0
  172. data/guides/code/getting_started/config/initializers/session_store.rb +8 -0
  173. data/guides/code/getting_started/config/initializers/wrap_parameters.rb +14 -0
  174. data/guides/code/getting_started/config/locales/en.yml +5 -0
  175. data/guides/code/getting_started/config/routes.rb +64 -0
  176. data/guides/code/getting_started/config.ru +4 -0
  177. data/guides/code/getting_started/db/migrate/20110901012504_create_posts.rb +11 -0
  178. data/guides/code/getting_started/db/migrate/20110901012815_create_comments.rb +12 -0
  179. data/guides/code/getting_started/db/migrate/20110901013701_create_tags.rb +11 -0
  180. data/guides/code/getting_started/db/schema.rb +43 -0
  181. data/guides/code/getting_started/db/seeds.rb +7 -0
  182. data/guides/code/getting_started/doc/README_FOR_APP +2 -0
  183. data/guides/code/getting_started/public/404.html +26 -0
  184. data/guides/code/getting_started/public/422.html +26 -0
  185. data/guides/code/getting_started/public/500.html +25 -0
  186. data/guides/code/getting_started/public/favicon.ico +0 -0
  187. data/guides/code/getting_started/public/robots.txt +5 -0
  188. data/guides/code/getting_started/script/rails +6 -0
  189. data/guides/code/getting_started/test/fixtures/comments.yml +11 -0
  190. data/guides/code/getting_started/test/fixtures/posts.yml +11 -0
  191. data/guides/code/getting_started/test/fixtures/tags.yml +9 -0
  192. data/guides/code/getting_started/test/functional/comments_controller_test.rb +7 -0
  193. data/guides/code/getting_started/test/functional/home_controller_test.rb +9 -0
  194. data/guides/code/getting_started/test/functional/posts_controller_test.rb +49 -0
  195. data/guides/code/getting_started/test/performance/browsing_test.rb +12 -0
  196. data/guides/code/getting_started/test/test_helper.rb +13 -0
  197. data/guides/code/getting_started/test/unit/comment_test.rb +7 -0
  198. data/guides/code/getting_started/test/unit/helpers/comments_helper_test.rb +4 -0
  199. data/guides/code/getting_started/test/unit/helpers/home_helper_test.rb +4 -0
  200. data/guides/code/getting_started/test/unit/helpers/posts_helper_test.rb +4 -0
  201. data/guides/code/getting_started/test/unit/post_test.rb +7 -0
  202. data/guides/code/getting_started/test/unit/tag_test.rb +7 -0
  203. data/guides/rails_guides/generator.rb +310 -0
  204. data/guides/rails_guides/helpers.rb +45 -0
  205. data/guides/rails_guides/indexer.rb +69 -0
  206. data/guides/rails_guides/levenshtein.rb +31 -0
  207. data/guides/rails_guides/textile_extensions.rb +63 -0
  208. data/guides/rails_guides.rb +50 -0
  209. data/guides/source/2_2_release_notes.textile +422 -0
  210. data/guides/source/2_3_release_notes.textile +610 -0
  211. data/guides/source/3_0_release_notes.textile +595 -0
  212. data/guides/source/3_1_release_notes.textile +553 -0
  213. data/guides/source/3_2_release_notes.textile +540 -0
  214. data/guides/source/_license.html.erb +2 -0
  215. data/guides/source/_welcome.html.erb +19 -0
  216. data/guides/source/action_controller_overview.textile +820 -0
  217. data/guides/source/action_mailer_basics.textile +516 -0
  218. data/guides/source/action_view_overview.textile +1497 -0
  219. data/guides/source/active_model_basics.textile +205 -0
  220. data/guides/source/active_record_basics.textile +218 -0
  221. data/guides/source/active_record_querying.textile +1433 -0
  222. data/guides/source/active_record_validations_callbacks.textile +1283 -0
  223. data/guides/source/active_resource_basics.textile +120 -0
  224. data/guides/source/active_support_core_extensions.textile +3713 -0
  225. data/guides/source/ajax_on_rails.textile +267 -0
  226. data/guides/source/api_documentation_guidelines.textile +185 -0
  227. data/guides/source/asset_pipeline.textile +707 -0
  228. data/guides/source/association_basics.textile +1959 -0
  229. data/guides/source/caching_with_rails.textile +437 -0
  230. data/guides/source/command_line.textile +574 -0
  231. data/guides/source/configuring.textile +641 -0
  232. data/guides/source/contributing_to_ruby_on_rails.textile +448 -0
  233. data/guides/source/credits.html.erb +72 -0
  234. data/guides/source/debugging_rails_applications.textile +714 -0
  235. data/guides/source/documents.yaml +157 -0
  236. data/guides/source/engines.textile +618 -0
  237. data/guides/source/form_helpers.textile +798 -0
  238. data/guides/source/generators.textile +621 -0
  239. data/guides/source/getting_started.textile +1929 -0
  240. data/guides/source/i18n.textile +931 -0
  241. data/guides/source/index.html.erb +30 -0
  242. data/guides/source/initialization.textile +1116 -0
  243. data/guides/source/kindle/KINDLE.md +26 -0
  244. data/guides/source/kindle/copyright.html.erb +1 -0
  245. data/guides/source/kindle/layout.html.erb +27 -0
  246. data/guides/source/kindle/rails_guides.opf.erb +52 -0
  247. data/guides/source/kindle/toc.html.erb +24 -0
  248. data/guides/source/kindle/toc.ncx.erb +64 -0
  249. data/guides/source/kindle/welcome.html.erb +5 -0
  250. data/guides/source/layout.html.erb +124 -0
  251. data/guides/source/layouts_and_rendering.textile +1237 -0
  252. data/guides/source/migrations.textile +900 -0
  253. data/guides/source/nested_model_forms.textile +222 -0
  254. data/guides/source/performance_testing.textile +597 -0
  255. data/guides/source/plugins.textile +464 -0
  256. data/guides/source/rails_application_templates.textile +240 -0
  257. data/guides/source/rails_on_rack.textile +236 -0
  258. data/guides/source/routing.textile +885 -0
  259. data/guides/source/ruby_on_rails_guides_guidelines.textile +79 -0
  260. data/guides/source/security.textile +1004 -0
  261. data/guides/source/testing.textile +947 -0
  262. data/guides/w3c_validator.rb +91 -0
  263. data/lib/rails/all.rb +15 -0
  264. data/lib/rails/application/bootstrap.rb +73 -0
  265. data/lib/rails/application/configuration.rb +151 -0
  266. data/lib/rails/application/finisher.rb +98 -0
  267. data/lib/rails/application/railties.rb +13 -0
  268. data/lib/rails/application/route_inspector.rb +84 -0
  269. data/lib/rails/application/routes_reloader.rb +56 -0
  270. data/lib/rails/application.rb +320 -0
  271. data/lib/rails/backtrace_cleaner.rb +42 -0
  272. data/lib/rails/cli.rb +16 -0
  273. data/lib/rails/code_statistics.rb +118 -0
  274. data/lib/rails/commands/application.rb +38 -0
  275. data/lib/rails/commands/benchmarker.rb +34 -0
  276. data/lib/rails/commands/console.rb +55 -0
  277. data/lib/rails/commands/dbconsole.rb +123 -0
  278. data/lib/rails/commands/destroy.rb +10 -0
  279. data/lib/rails/commands/generate.rb +12 -0
  280. data/lib/rails/commands/plugin.rb +544 -0
  281. data/lib/rails/commands/plugin_new.rb +11 -0
  282. data/lib/rails/commands/profiler.rb +32 -0
  283. data/lib/rails/commands/runner.rb +54 -0
  284. data/lib/rails/commands/server.rb +100 -0
  285. data/lib/rails/commands/update.rb +9 -0
  286. data/lib/rails/commands.rb +104 -0
  287. data/lib/rails/configuration.rb +89 -0
  288. data/lib/rails/console/app.rb +36 -0
  289. data/lib/rails/console/helpers.rb +11 -0
  290. data/lib/rails/engine/commands.rb +43 -0
  291. data/lib/rails/engine/configuration.rb +84 -0
  292. data/lib/rails/engine/railties.rb +33 -0
  293. data/lib/rails/engine.rb +657 -0
  294. data/lib/rails/generators/actions.rb +325 -0
  295. data/lib/rails/generators/active_model.rb +78 -0
  296. data/lib/rails/generators/app_base.rb +281 -0
  297. data/lib/rails/generators/base.rb +390 -0
  298. data/lib/rails/generators/css/assets/assets_generator.rb +13 -0
  299. data/lib/rails/generators/css/assets/templates/stylesheet.css +4 -0
  300. data/lib/rails/generators/css/scaffold/scaffold_generator.rb +16 -0
  301. data/lib/rails/generators/erb/controller/controller_generator.rb +20 -0
  302. data/lib/rails/generators/erb/controller/templates/view.html.erb +2 -0
  303. data/lib/rails/generators/erb/mailer/mailer_generator.rb +13 -0
  304. data/lib/rails/generators/erb/mailer/templates/view.text.erb +3 -0
  305. data/lib/rails/generators/erb/scaffold/scaffold_generator.rb +29 -0
  306. data/lib/rails/generators/erb/scaffold/templates/_form.html.erb +23 -0
  307. data/lib/rails/generators/erb/scaffold/templates/edit.html.erb +6 -0
  308. data/lib/rails/generators/erb/scaffold/templates/index.html.erb +27 -0
  309. data/lib/rails/generators/erb/scaffold/templates/new.html.erb +5 -0
  310. data/lib/rails/generators/erb/scaffold/templates/show.html.erb +12 -0
  311. data/lib/rails/generators/erb.rb +21 -0
  312. data/lib/rails/generators/generated_attribute.rb +107 -0
  313. data/lib/rails/generators/js/assets/assets_generator.rb +13 -0
  314. data/lib/rails/generators/js/assets/templates/javascript.js +2 -0
  315. data/lib/rails/generators/migration.rb +68 -0
  316. data/lib/rails/generators/named_base.rb +202 -0
  317. data/lib/rails/generators/rails/app/USAGE +15 -0
  318. data/lib/rails/generators/rails/app/app_generator.rb +303 -0
  319. data/lib/rails/generators/rails/app/templates/Gemfile +26 -0
  320. data/lib/rails/generators/rails/app/templates/README +261 -0
  321. data/lib/rails/generators/rails/app/templates/Rakefile +7 -0
  322. data/lib/rails/generators/rails/app/templates/app/assets/images/rails.png +0 -0
  323. data/lib/rails/generators/rails/app/templates/app/assets/javascripts/application.js.tt +17 -0
  324. data/lib/rails/generators/rails/app/templates/app/assets/stylesheets/application.css +13 -0
  325. data/lib/rails/generators/rails/app/templates/app/controllers/application_controller.rb +3 -0
  326. data/lib/rails/generators/rails/app/templates/app/helpers/application_helper.rb +2 -0
  327. data/lib/rails/generators/rails/app/templates/app/mailers/.empty_directory +0 -0
  328. data/lib/rails/generators/rails/app/templates/app/models/.empty_directory +0 -0
  329. data/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt +14 -0
  330. data/lib/rails/generators/rails/app/templates/config/application.rb +74 -0
  331. data/lib/rails/generators/rails/app/templates/config/boot.rb +6 -0
  332. data/lib/rails/generators/rails/app/templates/config/databases/frontbase.yml +31 -0
  333. data/lib/rails/generators/rails/app/templates/config/databases/ibm_db.yml +86 -0
  334. data/lib/rails/generators/rails/app/templates/config/databases/jdbc.yml +62 -0
  335. data/lib/rails/generators/rails/app/templates/config/databases/jdbcmysql.yml +33 -0
  336. data/lib/rails/generators/rails/app/templates/config/databases/jdbcpostgresql.yml +43 -0
  337. data/lib/rails/generators/rails/app/templates/config/databases/jdbcsqlite3.yml +20 -0
  338. data/lib/rails/generators/rails/app/templates/config/databases/mysql.yml +54 -0
  339. data/lib/rails/generators/rails/app/templates/config/databases/oracle.yml +39 -0
  340. data/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml +55 -0
  341. data/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml +25 -0
  342. data/lib/rails/generators/rails/app/templates/config/environment.rb +5 -0
  343. data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +41 -0
  344. data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +73 -0
  345. data/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +39 -0
  346. data/lib/rails/generators/rails/app/templates/config/initializers/backtrace_silencers.rb +7 -0
  347. data/lib/rails/generators/rails/app/templates/config/initializers/inflections.rb +15 -0
  348. data/lib/rails/generators/rails/app/templates/config/initializers/mime_types.rb +5 -0
  349. data/lib/rails/generators/rails/app/templates/config/initializers/secret_token.rb.tt +7 -0
  350. data/lib/rails/generators/rails/app/templates/config/initializers/session_store.rb.tt +8 -0
  351. data/lib/rails/generators/rails/app/templates/config/initializers/wrap_parameters.rb.tt +16 -0
  352. data/lib/rails/generators/rails/app/templates/config/locales/en.yml +5 -0
  353. data/lib/rails/generators/rails/app/templates/config/routes.rb +58 -0
  354. data/lib/rails/generators/rails/app/templates/config.ru +4 -0
  355. data/lib/rails/generators/rails/app/templates/db/seeds.rb.tt +7 -0
  356. data/lib/rails/generators/rails/app/templates/doc/README_FOR_APP +2 -0
  357. data/lib/rails/generators/rails/app/templates/gitignore +15 -0
  358. data/lib/rails/generators/rails/app/templates/public/404.html +26 -0
  359. data/lib/rails/generators/rails/app/templates/public/422.html +26 -0
  360. data/lib/rails/generators/rails/app/templates/public/500.html +25 -0
  361. data/lib/rails/generators/rails/app/templates/public/favicon.ico +0 -0
  362. data/lib/rails/generators/rails/app/templates/public/index.html +241 -0
  363. data/lib/rails/generators/rails/app/templates/public/robots.txt +5 -0
  364. data/lib/rails/generators/rails/app/templates/public/stylesheets/.empty_directory +0 -0
  365. data/lib/rails/generators/rails/app/templates/script/rails +5 -0
  366. data/lib/rails/generators/rails/app/templates/test/fixtures/.empty_directory +0 -0
  367. data/lib/rails/generators/rails/app/templates/test/functional/.empty_directory +0 -0
  368. data/lib/rails/generators/rails/app/templates/test/integration/.empty_directory +0 -0
  369. data/lib/rails/generators/rails/app/templates/test/performance/browsing_test.rb +12 -0
  370. data/lib/rails/generators/rails/app/templates/test/test_helper.rb +15 -0
  371. data/lib/rails/generators/rails/app/templates/test/unit/.empty_directory +0 -0
  372. data/lib/rails/generators/rails/assets/USAGE +20 -0
  373. data/lib/rails/generators/rails/assets/assets_generator.rb +25 -0
  374. data/lib/rails/generators/rails/assets/templates/javascript.js +2 -0
  375. data/lib/rails/generators/rails/assets/templates/stylesheet.css +4 -0
  376. data/lib/rails/generators/rails/controller/USAGE +18 -0
  377. data/lib/rails/generators/rails/controller/controller_generator.rb +20 -0
  378. data/lib/rails/generators/rails/controller/templates/controller.rb +13 -0
  379. data/lib/rails/generators/rails/generator/USAGE +12 -0
  380. data/lib/rails/generators/rails/generator/generator_generator.rb +25 -0
  381. data/lib/rails/generators/rails/generator/templates/%file_name%_generator.rb.tt +3 -0
  382. data/lib/rails/generators/rails/generator/templates/USAGE.tt +8 -0
  383. data/lib/rails/generators/rails/generator/templates/templates/.empty_directory +0 -0
  384. data/lib/rails/generators/rails/helper/USAGE +17 -0
  385. data/lib/rails/generators/rails/helper/helper_generator.rb +13 -0
  386. data/lib/rails/generators/rails/helper/templates/helper.rb +4 -0
  387. data/lib/rails/generators/rails/integration_test/USAGE +10 -0
  388. data/lib/rails/generators/rails/integration_test/integration_test_generator.rb +7 -0
  389. data/lib/rails/generators/rails/migration/USAGE +29 -0
  390. data/lib/rails/generators/rails/migration/migration_generator.rb +8 -0
  391. data/lib/rails/generators/rails/model/USAGE +45 -0
  392. data/lib/rails/generators/rails/model/model_generator.rb +8 -0
  393. data/lib/rails/generators/rails/observer/USAGE +12 -0
  394. data/lib/rails/generators/rails/observer/observer_generator.rb +7 -0
  395. data/lib/rails/generators/rails/performance_test/USAGE +10 -0
  396. data/lib/rails/generators/rails/performance_test/performance_test_generator.rb +7 -0
  397. data/lib/rails/generators/rails/plugin_new/USAGE +10 -0
  398. data/lib/rails/generators/rails/plugin_new/plugin_new_generator.rb +318 -0
  399. data/lib/rails/generators/rails/plugin_new/templates/%name%.gemspec +29 -0
  400. data/lib/rails/generators/rails/plugin_new/templates/Gemfile +23 -0
  401. data/lib/rails/generators/rails/plugin_new/templates/MIT-LICENSE +20 -0
  402. data/lib/rails/generators/rails/plugin_new/templates/README.rdoc +3 -0
  403. data/lib/rails/generators/rails/plugin_new/templates/Rakefile +31 -0
  404. data/lib/rails/generators/rails/plugin_new/templates/app/controllers/%name%/application_controller.rb.tt +4 -0
  405. data/lib/rails/generators/rails/plugin_new/templates/app/helpers/%name%/application_helper.rb.tt +4 -0
  406. data/lib/rails/generators/rails/plugin_new/templates/app/mailers/.empty_directory +0 -0
  407. data/lib/rails/generators/rails/plugin_new/templates/app/models/.empty_directory +0 -0
  408. data/lib/rails/generators/rails/plugin_new/templates/app/views/layouts/%name%/application.html.erb.tt +14 -0
  409. data/lib/rails/generators/rails/plugin_new/templates/config/routes.rb +6 -0
  410. data/lib/rails/generators/rails/plugin_new/templates/gitignore +7 -0
  411. data/lib/rails/generators/rails/plugin_new/templates/lib/%name%/engine.rb +7 -0
  412. data/lib/rails/generators/rails/plugin_new/templates/lib/%name%/version.rb +3 -0
  413. data/lib/rails/generators/rails/plugin_new/templates/lib/%name%.rb +6 -0
  414. data/lib/rails/generators/rails/plugin_new/templates/lib/tasks/%name%_tasks.rake +4 -0
  415. data/lib/rails/generators/rails/plugin_new/templates/rails/application.rb +18 -0
  416. data/lib/rails/generators/rails/plugin_new/templates/rails/boot.rb +10 -0
  417. data/lib/rails/generators/rails/plugin_new/templates/rails/routes.rb +4 -0
  418. data/lib/rails/generators/rails/plugin_new/templates/script/rails.tt +7 -0
  419. data/lib/rails/generators/rails/plugin_new/templates/test/%name%_test.rb +7 -0
  420. data/lib/rails/generators/rails/plugin_new/templates/test/integration/navigation_test.rb +12 -0
  421. data/lib/rails/generators/rails/plugin_new/templates/test/test_helper.rb +15 -0
  422. data/lib/rails/generators/rails/resource/USAGE +23 -0
  423. data/lib/rails/generators/rails/resource/resource_generator.rb +20 -0
  424. data/lib/rails/generators/rails/resource_route/resource_route_generator.rb +50 -0
  425. data/lib/rails/generators/rails/scaffold/USAGE +35 -0
  426. data/lib/rails/generators/rails/scaffold/scaffold_generator.rb +23 -0
  427. data/lib/rails/generators/rails/scaffold/templates/scaffold.css +56 -0
  428. data/lib/rails/generators/rails/scaffold_controller/USAGE +19 -0
  429. data/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb +25 -0
  430. data/lib/rails/generators/rails/scaffold_controller/templates/controller.rb +89 -0
  431. data/lib/rails/generators/rails/session_migration/USAGE +8 -0
  432. data/lib/rails/generators/rails/session_migration/session_migration_generator.rb +8 -0
  433. data/lib/rails/generators/rails/task/USAGE +9 -0
  434. data/lib/rails/generators/rails/task/task_generator.rb +12 -0
  435. data/lib/rails/generators/rails/task/templates/task.rb +8 -0
  436. data/lib/rails/generators/resource_helpers.rb +80 -0
  437. data/lib/rails/generators/test_case.rb +247 -0
  438. data/lib/rails/generators/test_unit/controller/controller_generator.rb +15 -0
  439. data/lib/rails/generators/test_unit/controller/templates/functional_test.rb +19 -0
  440. data/lib/rails/generators/test_unit/helper/helper_generator.rb +13 -0
  441. data/lib/rails/generators/test_unit/helper/templates/helper_test.rb +6 -0
  442. data/lib/rails/generators/test_unit/integration/integration_generator.rb +13 -0
  443. data/lib/rails/generators/test_unit/integration/templates/integration_test.rb +7 -0
  444. data/lib/rails/generators/test_unit/mailer/mailer_generator.rb +14 -0
  445. data/lib/rails/generators/test_unit/mailer/templates/functional_test.rb +21 -0
  446. data/lib/rails/generators/test_unit/model/model_generator.rb +24 -0
  447. data/lib/rails/generators/test_unit/model/templates/fixtures.yml +23 -0
  448. data/lib/rails/generators/test_unit/model/templates/unit_test.rb +9 -0
  449. data/lib/rails/generators/test_unit/observer/observer_generator.rb +13 -0
  450. data/lib/rails/generators/test_unit/observer/templates/unit_test.rb +9 -0
  451. data/lib/rails/generators/test_unit/performance/performance_generator.rb +13 -0
  452. data/lib/rails/generators/test_unit/performance/templates/performance_test.rb +12 -0
  453. data/lib/rails/generators/test_unit/plugin/plugin_generator.rb +13 -0
  454. data/lib/rails/generators/test_unit/plugin/templates/%file_name%_test.rb.tt +7 -0
  455. data/lib/rails/generators/test_unit/plugin/templates/test_helper.rb +3 -0
  456. data/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +38 -0
  457. data/lib/rails/generators/test_unit/scaffold/templates/functional_test.rb +51 -0
  458. data/lib/rails/generators/test_unit.rb +8 -0
  459. data/lib/rails/generators.rb +339 -0
  460. data/lib/rails/info.rb +116 -0
  461. data/lib/rails/info_controller.rb +15 -0
  462. data/lib/rails/initializable.rb +89 -0
  463. data/lib/rails/paths.rb +211 -0
  464. data/lib/rails/performance_test_help.rb +3 -0
  465. data/lib/rails/plugin.rb +92 -0
  466. data/lib/rails/rack/debugger.rb +24 -0
  467. data/lib/rails/rack/log_tailer.rb +34 -0
  468. data/lib/rails/rack/logger.rb +60 -0
  469. data/lib/rails/rack.rb +7 -0
  470. data/lib/rails/railtie/configurable.rb +35 -0
  471. data/lib/rails/railtie/configuration.rb +90 -0
  472. data/lib/rails/railtie.rb +202 -0
  473. data/lib/rails/ruby_version_check.rb +23 -0
  474. data/lib/rails/rubyprof_ext.rb +35 -0
  475. data/lib/rails/script_rails_loader.rb +29 -0
  476. data/lib/rails/source_annotation_extractor.rb +104 -0
  477. data/lib/rails/tasks/annotations.rake +20 -0
  478. data/lib/rails/tasks/documentation.rake +155 -0
  479. data/lib/rails/tasks/engine.rake +72 -0
  480. data/lib/rails/tasks/framework.rake +76 -0
  481. data/lib/rails/tasks/log.rake +9 -0
  482. data/lib/rails/tasks/middleware.rake +7 -0
  483. data/lib/rails/tasks/misc.rake +67 -0
  484. data/lib/rails/tasks/routes.rake +9 -0
  485. data/lib/rails/tasks/statistics.rake +16 -0
  486. data/lib/rails/tasks/tmp.rake +37 -0
  487. data/lib/rails/tasks.rb +16 -0
  488. data/lib/rails/test_help.rb +56 -0
  489. data/lib/rails/test_unit/railtie.rb +15 -0
  490. data/lib/rails/test_unit/sub_test_task.rb +8 -0
  491. data/lib/rails/test_unit/testing.rake +146 -0
  492. data/lib/rails/version.rb +10 -0
  493. data/lib/rails.rb +126 -0
  494. metadata +609 -0
@@ -0,0 +1,202 @@
1
+ require 'rails/initializable'
2
+ require 'rails/configuration'
3
+ require 'active_support/inflector'
4
+ require 'active_support/core_ext/module/introspection'
5
+ require 'active_support/core_ext/module/delegation'
6
+
7
+ module Rails
8
+ # Railtie is the core of the Rails framework and provides several hooks to extend
9
+ # Rails and/or modify the initialization process.
10
+ #
11
+ # Every major component of Rails (Action Mailer, Action Controller,
12
+ # Action View, Active Record and Active Resource) is a Railtie. Each of
13
+ # them is responsible for their own initialization. This makes Rails itself
14
+ # absent of any component hooks, allowing other components to be used in
15
+ # place of any of the Rails defaults.
16
+ #
17
+ # Developing a Rails extension does _not_ require any implementation of
18
+ # Railtie, but if you need to interact with the Rails framework during
19
+ # or after boot, then Railtie is needed.
20
+ #
21
+ # For example, an extension doing any of the following would require Railtie:
22
+ #
23
+ # * creating initializers
24
+ # * configuring a Rails framework for the application, like setting a generator
25
+ # * adding config.* keys to the environment
26
+ # * setting up a subscriber with ActiveSupport::Notifications
27
+ # * adding rake tasks
28
+ #
29
+ # == Creating your Railtie
30
+ #
31
+ # To extend Rails using Railtie, create a Railtie class which inherits
32
+ # from Rails::Railtie within your extension's namespace. This class must be
33
+ # loaded during the Rails boot process.
34
+ #
35
+ # The following example demonstrates an extension which can be used with or without Rails.
36
+ #
37
+ # # lib/my_gem/railtie.rb
38
+ # module MyGem
39
+ # class Railtie < Rails::Railtie
40
+ # end
41
+ # end
42
+ #
43
+ # # lib/my_gem.rb
44
+ # require 'my_gem/railtie' if defined?(Rails)
45
+ #
46
+ # == Initializers
47
+ #
48
+ # To add an initialization step from your Railtie to Rails boot process, you just need
49
+ # to create an initializer block:
50
+ #
51
+ # class MyRailtie < Rails::Railtie
52
+ # initializer "my_railtie.configure_rails_initialization" do
53
+ # # some initialization behavior
54
+ # end
55
+ # end
56
+ #
57
+ # If specified, the block can also receive the application object, in case you
58
+ # need to access some application specific configuration, like middleware:
59
+ #
60
+ # class MyRailtie < Rails::Railtie
61
+ # initializer "my_railtie.configure_rails_initialization" do |app|
62
+ # app.middleware.use MyRailtie::Middleware
63
+ # end
64
+ # end
65
+ #
66
+ # Finally, you can also pass :before and :after as option to initializer, in case
67
+ # you want to couple it with a specific step in the initialization process.
68
+ #
69
+ # == Configuration
70
+ #
71
+ # Inside the Railtie class, you can access a config object which contains configuration
72
+ # shared by all railties and the application:
73
+ #
74
+ # class MyRailtie < Rails::Railtie
75
+ # # Customize the ORM
76
+ # config.app_generators.orm :my_railtie_orm
77
+ #
78
+ # # Add a to_prepare block which is executed once in production
79
+ # # and before each request in development
80
+ # config.to_prepare do
81
+ # MyRailtie.setup!
82
+ # end
83
+ # end
84
+ #
85
+ # == Loading rake tasks and generators
86
+ #
87
+ # If your railtie has rake tasks, you can tell Rails to load them through the method
88
+ # rake_tasks:
89
+ #
90
+ # class MyRailtie < Rails::Railtie
91
+ # rake_tasks do
92
+ # load "path/to/my_railtie.tasks"
93
+ # end
94
+ # end
95
+ #
96
+ # By default, Rails load generators from your load path. However, if you want to place
97
+ # your generators at a different location, you can specify in your Railtie a block which
98
+ # will load them during normal generators lookup:
99
+ #
100
+ # class MyRailtie < Rails::Railtie
101
+ # generators do
102
+ # require "path/to/my_railtie_generator"
103
+ # end
104
+ # end
105
+ #
106
+ # == Application, Plugin and Engine
107
+ #
108
+ # A Rails::Engine is nothing more than a Railtie with some initializers already set.
109
+ # And since Rails::Application and Rails::Plugin are engines, the same configuration
110
+ # described here can be used in all three.
111
+ #
112
+ # Be sure to look at the documentation of those specific classes for more information.
113
+ #
114
+ class Railtie
115
+ autoload :Configurable, "rails/railtie/configurable"
116
+ autoload :Configuration, "rails/railtie/configuration"
117
+
118
+ include Initializable
119
+
120
+ ABSTRACT_RAILTIES = %w(Rails::Railtie Rails::Plugin Rails::Engine Rails::Application)
121
+
122
+ class << self
123
+ private :new
124
+
125
+ def subclasses
126
+ @subclasses ||= []
127
+ end
128
+
129
+ def inherited(base)
130
+ unless base.abstract_railtie?
131
+ base.send(:include, Railtie::Configurable)
132
+ subclasses << base
133
+ end
134
+ end
135
+
136
+ def rake_tasks(&blk)
137
+ @rake_tasks ||= []
138
+ @rake_tasks << blk if blk
139
+ @rake_tasks
140
+ end
141
+
142
+ def console(&blk)
143
+ @load_console ||= []
144
+ @load_console << blk if blk
145
+ @load_console
146
+ end
147
+
148
+ def generators(&blk)
149
+ @generators ||= []
150
+ @generators << blk if blk
151
+ @generators
152
+ end
153
+
154
+ def abstract_railtie?
155
+ ABSTRACT_RAILTIES.include?(name)
156
+ end
157
+
158
+ def railtie_name(name = nil)
159
+ @railtie_name = name.to_s if name
160
+ @railtie_name ||= generate_railtie_name(self.name)
161
+ end
162
+
163
+ protected
164
+ def generate_railtie_name(class_or_module)
165
+ ActiveSupport::Inflector.underscore(class_or_module).gsub("/", "_")
166
+ end
167
+ end
168
+
169
+ delegate :railtie_name, :to => "self.class"
170
+
171
+ def config
172
+ @config ||= Railtie::Configuration.new
173
+ end
174
+
175
+ def eager_load!
176
+ end
177
+
178
+ def load_console(app=self)
179
+ self.class.console.each { |block| block.call(app) }
180
+ end
181
+
182
+ def load_tasks(app=self)
183
+ extend Rake::DSL if defined? Rake::DSL
184
+ self.class.rake_tasks.each { |block| self.instance_exec(app, &block) }
185
+
186
+ # load also tasks from all superclasses
187
+ klass = self.class.superclass
188
+ while klass.respond_to?(:rake_tasks)
189
+ klass.rake_tasks.each { |t| self.instance_exec(app, &t) }
190
+ klass = klass.superclass
191
+ end
192
+ end
193
+
194
+ def load_generators(app=self)
195
+ self.class.generators.each { |block| block.call(app) }
196
+ end
197
+
198
+ def railtie_namespace
199
+ @railtie_namespace ||= self.class.parents.detect { |n| n.respond_to?(:railtie_namespace) }
200
+ end
201
+ end
202
+ end
@@ -0,0 +1,23 @@
1
+ if RUBY_VERSION < '1.8.7'
2
+ desc = defined?(RUBY_DESCRIPTION) ? RUBY_DESCRIPTION : "ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE})"
3
+ abort <<-end_message
4
+
5
+ Rails 3 requires Ruby 1.8.7 or >= 1.9.2.
6
+
7
+ You're running
8
+ #{desc}
9
+
10
+ Please upgrade to continue.
11
+
12
+ end_message
13
+ elsif RUBY_VERSION > '1.9' and RUBY_VERSION < '1.9.2'
14
+ $stderr.puts <<-end_message
15
+
16
+ Rails 3 doesn't officially support Ruby 1.9.1 since recent stable
17
+ releases have segfaulted the test suite. Please upgrade to Ruby 1.9.2 or later.
18
+
19
+ You're running
20
+ #{RUBY_DESCRIPTION}
21
+
22
+ end_message
23
+ end
@@ -0,0 +1,35 @@
1
+ require 'prof'
2
+
3
+ module Prof #:nodoc:
4
+ # Adapted from Shugo Maeda's unprof.rb
5
+ def self.print_profile(results, io = $stderr)
6
+ total = results.detect { |i|
7
+ i.method_class.nil? && i.method_id == :"#toplevel"
8
+ }.total_time
9
+ total = 0.001 if total < 0.001
10
+
11
+ io.puts " %% cumulative self self total"
12
+ io.puts " time seconds seconds calls ms/call ms/call name"
13
+
14
+ sum = 0.0
15
+ for r in results
16
+ sum += r.self_time
17
+
18
+ name = if r.method_class.nil?
19
+ r.method_id.to_s
20
+ elsif r.method_class.is_a?(Class)
21
+ "#{r.method_class}##{r.method_id}"
22
+ else
23
+ "#{r.method_class}.#{r.method_id}"
24
+ end
25
+ io.printf "%6.2f %8.3f %8.3f %8d %8.2f %8.2f %s\n",
26
+ r.self_time / total * 100,
27
+ sum,
28
+ r.self_time,
29
+ r.count,
30
+ r.self_time * 1000 / r.count,
31
+ r.total_time * 1000 / r.count,
32
+ name
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,29 @@
1
+ require 'pathname'
2
+
3
+ module Rails
4
+ module ScriptRailsLoader
5
+ RUBY = File.join(*RbConfig::CONFIG.values_at("bindir", "ruby_install_name")) + RbConfig::CONFIG["EXEEXT"]
6
+ SCRIPT_RAILS = File.join('script', 'rails')
7
+
8
+ def self.exec_script_rails!
9
+ cwd = Dir.pwd
10
+ return unless in_rails_application? || in_rails_application_subdirectory?
11
+ exec RUBY, SCRIPT_RAILS, *ARGV if in_rails_application?
12
+ Dir.chdir("..") do
13
+ # Recurse in a chdir block: if the search fails we want to be sure
14
+ # the application is generated in the original working directory.
15
+ exec_script_rails! unless cwd == Dir.pwd
16
+ end
17
+ rescue SystemCallError
18
+ # could not chdir, no problem just return
19
+ end
20
+
21
+ def self.in_rails_application?
22
+ File.exists?(SCRIPT_RAILS)
23
+ end
24
+
25
+ def self.in_rails_application_subdirectory?(path = Pathname.new(Dir.pwd))
26
+ File.exists?(File.join(path, SCRIPT_RAILS)) || !path.root? && in_rails_application_subdirectory?(path.parent)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,104 @@
1
+ # Implements the logic behind the rake tasks for annotations like
2
+ #
3
+ # rake notes
4
+ # rake notes:optimize
5
+ #
6
+ # and friends. See <tt>rake -T notes</tt> and <tt>railties/lib/tasks/annotations.rake</tt>.
7
+ #
8
+ # Annotation objects are triplets <tt>:line</tt>, <tt>:tag</tt>, <tt>:text</tt> that
9
+ # represent the line where the annotation lives, its tag, and its text. Note
10
+ # the filename is not stored.
11
+ #
12
+ # Annotations are looked for in comments and modulus whitespace they have to
13
+ # start with the tag optionally followed by a colon. Everything up to the end
14
+ # of the line (or closing ERB comment tag) is considered to be their text.
15
+ class SourceAnnotationExtractor
16
+ class Annotation < Struct.new(:line, :tag, :text)
17
+
18
+ # Returns a representation of the annotation that looks like this:
19
+ #
20
+ # [126] [TODO] This algorithm is simple and clearly correct, make it faster.
21
+ #
22
+ # If +options+ has a flag <tt>:tag</tt> the tag is shown as in the example above.
23
+ # Otherwise the string contains just line and text.
24
+ def to_s(options={})
25
+ s = "[%3d] " % line
26
+ s << "[#{tag}] " if options[:tag]
27
+ s << text
28
+ end
29
+ end
30
+
31
+ # Prints all annotations with tag +tag+ under the root directories +app+, +config+, +lib+,
32
+ # +script+, and +test+ (recursively). Only filenames with extension
33
+ # +.builder+, +.rb+, and +.erb+ are taken into account. The +options+
34
+ # hash is passed to each annotation's +to_s+.
35
+ #
36
+ # This class method is the single entry point for the rake tasks.
37
+ def self.enumerate(tag, options={})
38
+ extractor = new(tag)
39
+ extractor.display(extractor.find, options)
40
+ end
41
+
42
+ attr_reader :tag
43
+
44
+ def initialize(tag)
45
+ @tag = tag
46
+ end
47
+
48
+ # Returns a hash that maps filenames under +dirs+ (recursively) to arrays
49
+ # with their annotations.
50
+ def find(dirs=%w(app config lib script test))
51
+ dirs.inject({}) { |h, dir| h.update(find_in(dir)) }
52
+ end
53
+
54
+ # Returns a hash that maps filenames under +dir+ (recursively) to arrays
55
+ # with their annotations. Only files with annotations are included, and only
56
+ # those with extension +.builder+, +.rb+, +.erb+, +.haml+, +.slim+ and +.coffee+
57
+ # are taken into account.
58
+ def find_in(dir)
59
+ results = {}
60
+
61
+ Dir.glob("#{dir}/*") do |item|
62
+ next if File.basename(item)[0] == ?.
63
+
64
+ if File.directory?(item)
65
+ results.update(find_in(item))
66
+ elsif item =~ /\.(builder|rb|coffee)$/
67
+ results.update(extract_annotations_from(item, /#\s*(#{tag}):?\s*(.*)$/))
68
+ elsif item =~ /\.erb$/
69
+ results.update(extract_annotations_from(item, /<%\s*#\s*(#{tag}):?\s*(.*?)\s*%>/))
70
+ elsif item =~ /\.haml$/
71
+ results.update(extract_annotations_from(item, /-\s*#\s*(#{tag}):?\s*(.*)$/))
72
+ elsif item =~ /\.slim$/
73
+ results.update(extract_annotations_from(item, /\/\s*\s*(#{tag}):?\s*(.*)$/))
74
+ end
75
+ end
76
+
77
+ results
78
+ end
79
+
80
+ # If +file+ is the filename of a file that contains annotations this method returns
81
+ # a hash with a single entry that maps +file+ to an array of its annotations.
82
+ # Otherwise it returns an empty hash.
83
+ def extract_annotations_from(file, pattern)
84
+ lineno = 0
85
+ result = File.readlines(file).inject([]) do |list, line|
86
+ lineno += 1
87
+ next list unless line =~ pattern
88
+ list << Annotation.new(lineno, $1, $2)
89
+ end
90
+ result.empty? ? {} : { file => result }
91
+ end
92
+
93
+ # Prints the mapping from filenames to annotations in +results+ ordered by filename.
94
+ # The +options+ hash is passed to each annotation's +to_s+.
95
+ def display(results, options={})
96
+ results.keys.sort.each do |file|
97
+ puts "#{file}:"
98
+ results[file].each do |note|
99
+ puts " * #{note.to_s(options)}"
100
+ end
101
+ puts
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,20 @@
1
+ require 'rails/source_annotation_extractor'
2
+
3
+ desc "Enumerate all annotations (use notes:optimize, :fixme, :todo for focus)"
4
+ task :notes do
5
+ SourceAnnotationExtractor.enumerate "OPTIMIZE|FIXME|TODO", :tag => true
6
+ end
7
+
8
+ namespace :notes do
9
+ ["OPTIMIZE", "FIXME", "TODO"].each do |annotation|
10
+ # desc "Enumerate all #{annotation} annotations"
11
+ task annotation.downcase.intern do
12
+ SourceAnnotationExtractor.enumerate annotation
13
+ end
14
+ end
15
+
16
+ desc "Enumerate a custom annotation, specify with ANNOTATION=CUSTOM"
17
+ task :custom do
18
+ SourceAnnotationExtractor.enumerate ENV['ANNOTATION']
19
+ end
20
+ end
@@ -0,0 +1,155 @@
1
+ begin
2
+ require 'rdoc/task'
3
+ rescue LoadError
4
+ require 'rdoc/rdoc'
5
+ require 'rake/rdoctask'
6
+ RDoc::Task = Rake::RDocTask
7
+ end
8
+
9
+ # Monkey-patch to remove redoc'ing and clobber descriptions to cut down on rake -T noise
10
+ class RDocTaskWithoutDescriptions < RDoc::Task
11
+ include ::Rake::DSL if defined?(::Rake::DSL)
12
+
13
+ def define
14
+ task rdoc_task_name
15
+
16
+ task rerdoc_task_name => [clobber_task_name, rdoc_task_name]
17
+
18
+ task clobber_task_name do
19
+ rm_r rdoc_dir rescue nil
20
+ end
21
+
22
+ task :clobber => [clobber_task_name]
23
+
24
+ directory @rdoc_dir
25
+ task rdoc_task_name => [rdoc_target]
26
+ file rdoc_target => @rdoc_files + [Rake.application.rakefile] do
27
+ rm_r @rdoc_dir rescue nil
28
+ @before_running_rdoc.call if @before_running_rdoc
29
+ args = option_list + @rdoc_files
30
+ if @external
31
+ argstring = args.join(' ')
32
+ sh %{ruby -Ivendor vendor/rd #{argstring}}
33
+ else
34
+ require 'rdoc/rdoc'
35
+ RDoc::RDoc.new.document(args)
36
+ end
37
+ end
38
+ self
39
+ end
40
+ end
41
+
42
+ namespace :doc do
43
+ def gem_path(gem_name)
44
+ path = $LOAD_PATH.grep(/#{gem_name}[\w.-]*\/lib$/).first
45
+ yield File.dirname(path) if path
46
+ end
47
+
48
+ RDocTaskWithoutDescriptions.new("app") { |rdoc|
49
+ rdoc.rdoc_dir = 'doc/app'
50
+ rdoc.template = ENV['template'] if ENV['template']
51
+ rdoc.title = ENV['title'] || "Rails Application Documentation"
52
+ rdoc.options << '--line-numbers'
53
+ rdoc.options << '--charset' << 'utf-8'
54
+ rdoc.rdoc_files.include('doc/README_FOR_APP')
55
+ rdoc.rdoc_files.include('app/**/*.rb')
56
+ rdoc.rdoc_files.include('lib/**/*.rb')
57
+ }
58
+ Rake::Task['doc:app'].comment = "Generate docs for the app -- also available doc:rails, doc:guides, doc:plugins (options: TEMPLATE=/rdoc-template.rb, TITLE=\"Custom Title\")"
59
+
60
+ # desc 'Generate documentation for the Rails framework.'
61
+ RDocTaskWithoutDescriptions.new("rails") { |rdoc|
62
+ rdoc.rdoc_dir = 'doc/api'
63
+ rdoc.template = "#{ENV['template']}.rb" if ENV['template']
64
+ rdoc.title = "Rails Framework Documentation"
65
+ rdoc.options << '--line-numbers'
66
+ rdoc.rdoc_files.include('README.rdoc')
67
+
68
+ gem_path('actionmailer') do |actionmailer|
69
+ %w(README.rdoc CHANGELOG.md MIT-LICENSE lib/action_mailer/base.rb).each do |file|
70
+ rdoc.rdoc_files.include("#{actionmailer}/#{file}")
71
+ end
72
+ end
73
+
74
+ gem_path('actionpack') do |actionpack|
75
+ %w(README.rdoc CHANGELOG.md MIT-LICENSE lib/action_controller/**/*.rb lib/action_view/**/*.rb).each do |file|
76
+ rdoc.rdoc_files.include("#{actionpack}/#{file}")
77
+ end
78
+ end
79
+
80
+ gem_path('activemodel') do |activemodel|
81
+ %w(README.rdoc CHANGELOG.md MIT-LICENSE lib/active_model/**/*.rb).each do |file|
82
+ rdoc.rdoc_files.include("#{activemodel}/#{file}")
83
+ end
84
+ end
85
+
86
+ gem_path('activerecord') do |activerecord|
87
+ %w(README.rdoc CHANGELOG.md lib/active_record/**/*.rb).each do |file|
88
+ rdoc.rdoc_files.include("#{activerecord}/#{file}")
89
+ end
90
+ end
91
+
92
+ gem_path('activeresource') do |activeresource|
93
+ %w(README.rdoc CHANGELOG.md lib/active_resource.rb lib/active_resource/*).each do |file|
94
+ rdoc.rdoc_files.include("#{activeresource}/#{file}")
95
+ end
96
+ end
97
+
98
+ gem_path('activesupport') do |activesupport|
99
+ %w(README.rdoc CHANGELOG.md lib/active_support/**/*.rb).each do |file|
100
+ rdoc.rdoc_files.include("#{activesupport}/#{file}")
101
+ end
102
+ end
103
+
104
+ gem_path('railties') do |railties|
105
+ %w(README.rdoc CHANGELOG.md lib/{*.rb,commands/*.rb,generators/*.rb}).each do |file|
106
+ rdoc.rdoc_files.include("#{railties}/#{file}")
107
+ end
108
+ end
109
+ }
110
+
111
+ plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) }
112
+
113
+ # desc "Generate documentation for all installed plugins"
114
+ task :plugins => plugins.collect { |plugin| "doc:plugins:#{plugin}" }
115
+
116
+ # desc "Remove plugin documentation"
117
+ task :clobber_plugins do
118
+ rm_rf 'doc/plugins' rescue nil
119
+ end
120
+
121
+ # desc "Generate Rails Guides"
122
+ task :guides do
123
+ # FIXME: Reaching outside lib directory is a bad idea
124
+ require File.expand_path('../../../../guides/rails_guides', __FILE__)
125
+ RailsGuides::Generator.new(Rails.root.join("doc/guides")).generate
126
+ end
127
+
128
+ namespace :plugins do
129
+ # Define doc tasks for each plugin
130
+ plugins.each do |plugin|
131
+ # desc "Generate documentation for the #{plugin} plugin"
132
+ task(plugin => :environment) do
133
+ plugin_base = "vendor/plugins/#{plugin}"
134
+ options = []
135
+ files = Rake::FileList.new
136
+ options << "-o doc/plugins/#{plugin}"
137
+ options << "--title '#{plugin.titlecase} Plugin Documentation'"
138
+ options << '--line-numbers'
139
+ options << '--charset' << 'utf-8'
140
+ options << '-T html'
141
+
142
+ files.include("#{plugin_base}/lib/**/*.rb")
143
+ if File.exist?("#{plugin_base}/README")
144
+ files.include("#{plugin_base}/README")
145
+ options << "--main '#{plugin_base}/README'"
146
+ end
147
+ files.include("#{plugin_base}/CHANGELOG") if File.exist?("#{plugin_base}/CHANGELOG")
148
+
149
+ options << files.to_s
150
+
151
+ sh %(rdoc #{options * ' '})
152
+ end
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,72 @@
1
+ task "load_app" do
2
+ namespace :app do
3
+ load APP_RAKEFILE
4
+ end
5
+ task :environment => "app:environment"
6
+
7
+ if !defined?(ENGINE_PATH) || !ENGINE_PATH
8
+ ENGINE_PATH = find_engine_path(APP_RAKEFILE)
9
+ end
10
+ end
11
+
12
+ def app_task(name)
13
+ task name => [:load_app, "app:db:#{name}"]
14
+ end
15
+
16
+ namespace :db do
17
+ app_task "reset"
18
+
19
+ desc "Migrate the database (options: VERSION=x, VERBOSE=false)."
20
+ app_task "migrate"
21
+ app_task "migrate:up"
22
+ app_task "migrate:down"
23
+ app_task "migrate:redo"
24
+ app_task "migrate:reset"
25
+
26
+ desc "Display status of migrations"
27
+ app_task "migrate:status"
28
+
29
+ desc 'Create the database from config/database.yml for the current Rails.env (use db:create:all to create all dbs in the config)'
30
+ app_task "create"
31
+ app_task "create:all"
32
+
33
+ desc 'Drops the database for the current Rails.env (use db:drop:all to drop all databases)'
34
+ app_task "drop"
35
+ app_task "drop:all"
36
+
37
+ desc "Load fixtures into the current environment's database."
38
+ app_task "fixtures:load"
39
+
40
+ desc "Rolls the schema back to the previous version (specify steps w/ STEP=n)."
41
+ app_task "rollback"
42
+
43
+ desc "Create a db/schema.rb file that can be portably used against any DB supported by AR"
44
+ app_task "schema:dump"
45
+
46
+ desc "Load a schema.rb file into the database"
47
+ app_task "schema:load"
48
+
49
+ desc "Load the seed data from db/seeds.rb"
50
+ app_task "seed"
51
+
52
+ desc "Create the database, load the schema, and initialize with the seed data (use db:reset to also drop the db first)"
53
+ app_task "setup"
54
+
55
+ desc "Dump the database structure to an SQL file"
56
+ app_task "structure:dump"
57
+
58
+ desc "Retrieves the current schema version number"
59
+ app_task "version"
60
+ end
61
+
62
+ def find_engine_path(path)
63
+ return if path == "/"
64
+
65
+ if Rails::Engine.find(path)
66
+ path
67
+ else
68
+ find_engine_path(File.expand_path('..', path))
69
+ end
70
+ end
71
+
72
+ Rake.application.invoke_task(:load_app)