openskies 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,657 @@
1
+ require 'rails/railtie'
2
+ require 'active_support/core_ext/module/delegation'
3
+ require 'pathname'
4
+ require 'rbconfig'
5
+ require 'rails/engine/railties'
6
+
7
+ module Rails
8
+ # <tt>Rails::Engine</tt> allows you to wrap a specific Rails application or subset of
9
+ # functionality and share it with other applications. Since Rails 3.0, every
10
+ # <tt>Rails::Application</tt> is just an engine, which allows for simple
11
+ # feature and application sharing.
12
+ #
13
+ # Any <tt>Rails::Engine</tt> is also a <tt>Rails::Railtie</tt>, so the same
14
+ # methods (like <tt>rake_tasks</tt> and +generators+) and configuration
15
+ # options that are available in railties can also be used in engines.
16
+ #
17
+ # == Creating an Engine
18
+ #
19
+ # In Rails versions prior to 3.0, your gems automatically behaved as engines, however,
20
+ # this coupled Rails to Rubygems. Since Rails 3.0, if you want a gem to automatically
21
+ # behave as an engine, you have to specify an +Engine+ for it somewhere inside
22
+ # your plugin's +lib+ folder (similar to how we specify a +Railtie+):
23
+ #
24
+ # # lib/my_engine.rb
25
+ # module MyEngine
26
+ # class Engine < Rails::Engine
27
+ # end
28
+ # end
29
+ #
30
+ # Then ensure that this file is loaded at the top of your <tt>config/application.rb</tt>
31
+ # (or in your +Gemfile+) and it will automatically load models, controllers and helpers
32
+ # inside +app+, load routes at <tt>config/routes.rb</tt>, load locales at
33
+ # <tt>config/locales/*</tt>, and load tasks at <tt>lib/tasks/*</tt>.
34
+ #
35
+ # == Configuration
36
+ #
37
+ # Besides the +Railtie+ configuration which is shared across the application, in a
38
+ # <tt>Rails::Engine</tt> you can access <tt>autoload_paths</tt>, <tt>eager_load_paths</tt>
39
+ # and <tt>autoload_once_paths</tt>, which, differently from a <tt>Railtie</tt>, are scoped to
40
+ # the current engine.
41
+ #
42
+ # Example:
43
+ #
44
+ # class MyEngine < Rails::Engine
45
+ # # Add a load path for this specific Engine
46
+ # config.autoload_paths << File.expand_path("../lib/some/path", __FILE__)
47
+ #
48
+ # initializer "my_engine.add_middleware" do |app|
49
+ # app.middleware.use MyEngine::Middleware
50
+ # end
51
+ # end
52
+ #
53
+ # == Generators
54
+ #
55
+ # You can set up generators for engines with <tt>config.generators</tt> method:
56
+ #
57
+ # class MyEngine < Rails::Engine
58
+ # config.generators do |g|
59
+ # g.orm :active_record
60
+ # g.template_engine :erb
61
+ # g.test_framework :test_unit
62
+ # end
63
+ # end
64
+ #
65
+ # You can also set generators for an application by using <tt>config.app_generators</tt>:
66
+ #
67
+ # class MyEngine < Rails::Engine
68
+ # # note that you can also pass block to app_generators in the same way you
69
+ # # can pass it to generators method
70
+ # config.app_generators.orm :datamapper
71
+ # end
72
+ #
73
+ # == Paths
74
+ #
75
+ # Since Rails 3.0, applications and engines have more flexible path configuration (as
76
+ # opposed to the previous hardcoded path configuration). This means that you are not
77
+ # required to place your controllers at <tt>app/controllers</tt>, but in any place
78
+ # which you find convenient.
79
+ #
80
+ # For example, let's suppose you want to place your controllers in <tt>lib/controllers</tt>.
81
+ # You can set that as an option:
82
+ #
83
+ # class MyEngine < Rails::Engine
84
+ # paths["app/controllers"] = "lib/controllers"
85
+ # end
86
+ #
87
+ # You can also have your controllers loaded from both <tt>app/controllers</tt> and
88
+ # <tt>lib/controllers</tt>:
89
+ #
90
+ # class MyEngine < Rails::Engine
91
+ # paths["app/controllers"] << "lib/controllers"
92
+ # end
93
+ #
94
+ # The available paths in an engine are:
95
+ #
96
+ # class MyEngine < Rails::Engine
97
+ # paths["app"] # => ["app"]
98
+ # paths["app/controllers"] # => ["app/controllers"]
99
+ # paths["app/helpers"] # => ["app/helpers"]
100
+ # paths["app/models"] # => ["app/models"]
101
+ # paths["app/views"] # => ["app/views"]
102
+ # paths["lib"] # => ["lib"]
103
+ # paths["lib/tasks"] # => ["lib/tasks"]
104
+ # paths["config"] # => ["config"]
105
+ # paths["config/initializers"] # => ["config/initializers"]
106
+ # paths["config/locales"] # => ["config/locales"]
107
+ # paths["config/routes"] # => ["config/routes.rb"]
108
+ # end
109
+ #
110
+ # The <tt>Application</tt> class adds a couple more paths to this set. And as in your
111
+ # <tt>Application</tt>, all folders under +app+ are automatically added to the load path.
112
+ # If you have an <tt>app/observers</tt> folder for example, it will be added by default.
113
+ #
114
+ # == Endpoint
115
+ #
116
+ # An engine can be also a rack application. It can be useful if you have a rack application that
117
+ # you would like to wrap with +Engine+ and provide some of the +Engine+'s features.
118
+ #
119
+ # To do that, use the +endpoint+ method:
120
+ #
121
+ # module MyEngine
122
+ # class Engine < Rails::Engine
123
+ # endpoint MyRackApplication
124
+ # end
125
+ # end
126
+ #
127
+ # Now you can mount your engine in application's routes just like that:
128
+ #
129
+ # MyRailsApp::Application.routes.draw do
130
+ # mount MyEngine::Engine => "/engine"
131
+ # end
132
+ #
133
+ # == Middleware stack
134
+ #
135
+ # As an engine can now be a rack endpoint, it can also have a middleware
136
+ # stack. The usage is exactly the same as in <tt>Application</tt>:
137
+ #
138
+ # module MyEngine
139
+ # class Engine < Rails::Engine
140
+ # middleware.use SomeMiddleware
141
+ # end
142
+ # end
143
+ #
144
+ # == Routes
145
+ #
146
+ # If you don't specify an endpoint, routes will be used as the default
147
+ # endpoint. You can use them just like you use an application's routes:
148
+ #
149
+ # # ENGINE/config/routes.rb
150
+ # MyEngine::Engine.routes.draw do
151
+ # match "/" => "posts#index"
152
+ # end
153
+ #
154
+ # == Mount priority
155
+ #
156
+ # Note that now there can be more than one router in your application, and it's better to avoid
157
+ # passing requests through many routers. Consider this situation:
158
+ #
159
+ # MyRailsApp::Application.routes.draw do
160
+ # mount MyEngine::Engine => "/blog"
161
+ # match "/blog/omg" => "main#omg"
162
+ # end
163
+ #
164
+ # +MyEngine+ is mounted at <tt>/blog</tt>, and <tt>/blog/omg</tt> points to application's
165
+ # controller. In such a situation, requests to <tt>/blog/omg</tt> will go through +MyEngine+,
166
+ # and if there is no such route in +Engine+'s routes, it will be dispatched to <tt>main#omg</tt>.
167
+ # It's much better to swap that:
168
+ #
169
+ # MyRailsApp::Application.routes.draw do
170
+ # match "/blog/omg" => "main#omg"
171
+ # mount MyEngine::Engine => "/blog"
172
+ # end
173
+ #
174
+ # Now, +Engine+ will get only requests that were not handled by +Application+.
175
+ #
176
+ # == Engine name
177
+ #
178
+ # There are some places where an Engine's name is used:
179
+ #
180
+ # * routes: when you mount an Engine with <tt>mount(MyEngine::Engine => '/my_engine')</tt>,
181
+ # it's used as default :as option
182
+ # * some of the rake tasks are based on engine name, e.g. <tt>my_engine:install:migrations</tt>,
183
+ # <tt>my_engine:install:assets</tt>
184
+ #
185
+ # Engine name is set by default based on class name. For <tt>MyEngine::Engine</tt> it will be
186
+ # <tt>my_engine_engine</tt>. You can change it manually using the <tt>engine_name</tt> method:
187
+ #
188
+ # module MyEngine
189
+ # class Engine < Rails::Engine
190
+ # engine_name "my_engine"
191
+ # end
192
+ # end
193
+ #
194
+ # == Isolated Engine
195
+ #
196
+ # Normally when you create controllers, helpers and models inside an engine, they are treated
197
+ # as if they were created inside the application itself. This means that all helpers and
198
+ # named routes from the application will be available to your engine's controllers as well.
199
+ #
200
+ # However, sometimes you want to isolate your engine from the application, especially if your engine
201
+ # has its own router. To do that, you simply need to call +isolate_namespace+. This method requires
202
+ # you to pass a module where all your controllers, helpers and models should be nested to:
203
+ #
204
+ # module MyEngine
205
+ # class Engine < Rails::Engine
206
+ # isolate_namespace MyEngine
207
+ # end
208
+ # end
209
+ #
210
+ # With such an engine, everything that is inside the +MyEngine+ module will be isolated from
211
+ # the application.
212
+ #
213
+ # Consider such controller:
214
+ #
215
+ # module MyEngine
216
+ # class FooController < ActionController::Base
217
+ # end
218
+ # end
219
+ #
220
+ # If an engine is marked as isolated, +FooController+ has access only to helpers from +Engine+ and
221
+ # <tt>url_helpers</tt> from <tt>MyEngine::Engine.routes</tt>.
222
+ #
223
+ # The next thing that changes in isolated engines is the behavior of routes. Normally, when you namespace
224
+ # your controllers, you also need to do namespace all your routes. With an isolated engine,
225
+ # the namespace is applied by default, so you can ignore it in routes:
226
+ #
227
+ # MyEngine::Engine.routes.draw do
228
+ # resources :articles
229
+ # end
230
+ #
231
+ # The routes above will automatically point to <tt>MyEngine::ApplicationController</tt>. Furthermore, you don't
232
+ # need to use longer url helpers like <tt>my_engine_articles_path</tt>. Instead, you should simply use
233
+ # <tt>articles_path</tt> as you would do with your application.
234
+ #
235
+ # To make that behavior consistent with other parts of the framework, an isolated engine also has influence on
236
+ # <tt>ActiveModel::Naming</tt>. When you use a namespaced model, like <tt>MyEngine::Article</tt>, it will normally
237
+ # use the prefix "my_engine". In an isolated engine, the prefix will be omitted in url helpers and
238
+ # form fields for convenience.
239
+ #
240
+ # polymorphic_url(MyEngine::Article.new) # => "articles_path"
241
+ #
242
+ # form_for(MyEngine::Article.new) do
243
+ # text_field :title # => <input type="text" name="article[title]" id="article_title" />
244
+ # end
245
+ #
246
+ # Additionally, an isolated engine will set its name according to namespace, so
247
+ # MyEngine::Engine.engine_name will be "my_engine". It will also set MyEngine.table_name_prefix
248
+ # to "my_engine_", changing the MyEngine::Article model to use the my_engine_articles table.
249
+ #
250
+ # == Using Engine's routes outside Engine
251
+ #
252
+ # Since you can now mount an engine inside application's routes, you do not have direct access to +Engine+'s
253
+ # <tt>url_helpers</tt> inside +Application+. When you mount an engine in an application's routes, a special helper is
254
+ # created to allow you to do that. Consider such a scenario:
255
+ #
256
+ # # config/routes.rb
257
+ # MyApplication::Application.routes.draw do
258
+ # mount MyEngine::Engine => "/my_engine", :as => "my_engine"
259
+ # match "/foo" => "foo#index"
260
+ # end
261
+ #
262
+ # Now, you can use the <tt>my_engine</tt> helper inside your application:
263
+ #
264
+ # class FooController < ApplicationController
265
+ # def index
266
+ # my_engine.root_url #=> /my_engine/
267
+ # end
268
+ # end
269
+ #
270
+ # There is also a <tt>main_app</tt> helper that gives you access to application's routes inside Engine:
271
+ #
272
+ # module MyEngine
273
+ # class BarController
274
+ # def index
275
+ # main_app.foo_path #=> /foo
276
+ # end
277
+ # end
278
+ # end
279
+ #
280
+ # Note that the <tt>:as</tt> option given to mount takes the <tt>engine_name</tt> as default, so most of the time
281
+ # you can simply omit it.
282
+ #
283
+ # Finally, if you want to generate a url to an engine's route using
284
+ # <tt>polymorphic_url</tt>, you also need to pass the engine helper. Let's
285
+ # say that you want to create a form pointing to one of the engine's routes.
286
+ # All you need to do is pass the helper as the first element in array with
287
+ # attributes for url:
288
+ #
289
+ # form_for([my_engine, @user])
290
+ #
291
+ # This code will use <tt>my_engine.user_path(@user)</tt> to generate the proper route.
292
+ #
293
+ # == Isolated engine's helpers
294
+ #
295
+ # Sometimes you may want to isolate engine, but use helpers that are defined for it.
296
+ # If you want to share just a few specific helpers you can add them to application's
297
+ # helpers in ApplicationController:
298
+ #
299
+ # class ApplicationController < ActionController::Base
300
+ # helper MyEngine::SharedEngineHelper
301
+ # end
302
+ #
303
+ # If you want to include all of the engine's helpers, you can use #helpers method on an engine's
304
+ # instance:
305
+ #
306
+ # class ApplicationController < ActionController::Base
307
+ # helper MyEngine::Engine.helpers
308
+ # end
309
+ #
310
+ # It will include all of the helpers from engine's directory. Take into account that this does
311
+ # not include helpers defined in controllers with helper_method or other similar solutions,
312
+ # only helpers defined in the helpers directory will be included.
313
+ #
314
+ # == Migrations & seed data
315
+ #
316
+ # Engines can have their own migrations. The default path for migrations is exactly the same
317
+ # as in application: <tt>db/migrate</tt>
318
+ #
319
+ # To use engine's migrations in application you can use rake task, which copies them to
320
+ # application's dir:
321
+ #
322
+ # rake ENGINE_NAME:install:migrations
323
+ #
324
+ # Note that some of the migrations may be skipped if a migration with the same name already exists
325
+ # in application. In such a situation you must decide whether to leave that migration or rename the
326
+ # migration in the application and rerun copying migrations.
327
+ #
328
+ # If your engine has migrations, you may also want to prepare data for the database in
329
+ # the <tt>seeds.rb</tt> file. You can load that data using the <tt>load_seed</tt> method, e.g.
330
+ #
331
+ # MyEngine::Engine.load_seed
332
+ #
333
+ # == Loading priority
334
+ #
335
+ # In order to change engine's priority you can use config.railties_order in main application.
336
+ # It will affect the priority of loading views, helpers, assets and all the other files
337
+ # related to engine or application.
338
+ #
339
+ # Example:
340
+ #
341
+ # # load Blog::Engine with highest priority, followed by application and other railties
342
+ # config.railties_order = [Blog::Engine, :main_app, :all]
343
+ #
344
+ class Engine < Railtie
345
+ autoload :Configuration, "rails/engine/configuration"
346
+ autoload :Railties, "rails/engine/railties"
347
+
348
+ def load_generators(app=self)
349
+ initialize_generators
350
+ railties.all { |r| r.load_generators(app) }
351
+ Rails::Generators.configure!(app.config.generators)
352
+ super
353
+ self
354
+ end
355
+
356
+ class << self
357
+ attr_accessor :called_from, :isolated
358
+ alias :isolated? :isolated
359
+ alias :engine_name :railtie_name
360
+
361
+ def inherited(base)
362
+ unless base.abstract_railtie?
363
+ base.called_from = begin
364
+ # Remove the line number from backtraces making sure we don't leave anything behind
365
+ call_stack = caller.map { |p| p.sub(/:\d+.*/, '') }
366
+ File.dirname(call_stack.detect { |p| p !~ %r[railties[\w.-]*/lib/rails|rack[\w.-]*/lib/rack] })
367
+ end
368
+ end
369
+
370
+ super
371
+ end
372
+
373
+ def endpoint(endpoint = nil)
374
+ @endpoint ||= nil
375
+ @endpoint = endpoint if endpoint
376
+ @endpoint
377
+ end
378
+
379
+ def isolate_namespace(mod)
380
+ engine_name(generate_railtie_name(mod))
381
+
382
+ self.routes.default_scope = { :module => ActiveSupport::Inflector.underscore(mod.name) }
383
+ self.isolated = true
384
+
385
+ unless mod.respond_to?(:railtie_namespace)
386
+ name, railtie = engine_name, self
387
+
388
+ mod.singleton_class.instance_eval do
389
+ define_method(:railtie_namespace) { railtie }
390
+
391
+ unless mod.respond_to?(:table_name_prefix)
392
+ define_method(:table_name_prefix) { "#{name}_" }
393
+ end
394
+
395
+ unless mod.respond_to?(:use_relative_model_naming?)
396
+ class_eval "def use_relative_model_naming?; true; end", __FILE__, __LINE__
397
+ end
398
+
399
+ unless mod.respond_to?(:railtie_helpers_paths)
400
+ define_method(:railtie_helpers_paths) { railtie.helpers_paths }
401
+ end
402
+
403
+ unless mod.respond_to?(:railtie_routes_url_helpers)
404
+ define_method(:railtie_routes_url_helpers) { railtie.routes_url_helpers }
405
+ end
406
+ end
407
+ end
408
+ end
409
+
410
+ # Finds engine with given path
411
+ def find(path)
412
+ expanded_path = File.expand_path path.to_s
413
+ Rails::Engine::Railties.engines.find { |engine|
414
+ File.expand_path(engine.root.to_s) == expanded_path
415
+ }
416
+ end
417
+ end
418
+
419
+ delegate :middleware, :root, :paths, :to => :config
420
+ delegate :engine_name, :isolated?, :to => "self.class"
421
+
422
+ def load_tasks(app=self)
423
+ railties.all { |r| r.load_tasks(app) }
424
+ super
425
+ paths["lib/tasks"].existent.sort.each { |ext| load(ext) }
426
+ end
427
+
428
+ def load_console(app=self)
429
+ railties.all { |r| r.load_console(app) }
430
+ super
431
+ end
432
+
433
+ def eager_load!
434
+ railties.all(&:eager_load!)
435
+
436
+ config.eager_load_paths.each do |load_path|
437
+ matcher = /\A#{Regexp.escape(load_path)}\/(.*)\.rb\Z/
438
+ Dir.glob("#{load_path}/**/*.rb").sort.each do |file|
439
+ require_dependency file.sub(matcher, '\1')
440
+ end
441
+ end
442
+ end
443
+
444
+ def railties
445
+ @railties ||= self.class::Railties.new(config)
446
+ end
447
+
448
+ def helpers
449
+ @helpers ||= begin
450
+ helpers = Module.new
451
+ all = ActionController::Base.all_helpers_from_path(helpers_paths)
452
+ ActionController::Base.modules_for_helpers(all).each do |mod|
453
+ helpers.send(:include, mod)
454
+ end
455
+ helpers
456
+ end
457
+ end
458
+
459
+ def helpers_paths
460
+ paths["app/helpers"].existent
461
+ end
462
+
463
+ def routes_url_helpers
464
+ routes.url_helpers
465
+ end
466
+
467
+ def app
468
+ @app ||= begin
469
+ config.middleware = config.middleware.merge_into(default_middleware_stack)
470
+ config.middleware.build(endpoint)
471
+ end
472
+ end
473
+
474
+ def endpoint
475
+ self.class.endpoint || routes
476
+ end
477
+
478
+ def call(env)
479
+ app.call(env.merge!(env_config))
480
+ end
481
+
482
+ def env_config
483
+ @env_config ||= {
484
+ 'action_dispatch.routes' => routes
485
+ }
486
+ end
487
+
488
+ def routes
489
+ @routes ||= ActionDispatch::Routing::RouteSet.new
490
+ @routes.append(&Proc.new) if block_given?
491
+ @routes
492
+ end
493
+
494
+ def ordered_railties
495
+ railties.all + [self]
496
+ end
497
+
498
+ def initializers
499
+ initializers = []
500
+ ordered_railties.each do |r|
501
+ if r == self
502
+ initializers += super
503
+ else
504
+ initializers += r.initializers
505
+ end
506
+ end
507
+ initializers
508
+ end
509
+
510
+ def config
511
+ @config ||= Engine::Configuration.new(find_root_with_flag("lib"))
512
+ end
513
+
514
+ # Load data from db/seeds.rb file. It can be used in to load engines'
515
+ # seeds, e.g.:
516
+ #
517
+ # Blog::Engine.load_seed
518
+ def load_seed
519
+ seed_file = paths["db/seeds"].existent.first
520
+ load(seed_file) if seed_file
521
+ end
522
+
523
+ # Add configured load paths to ruby load paths and remove duplicates.
524
+ initializer :set_load_path, :before => :bootstrap_hook do
525
+ _all_load_paths.reverse_each do |path|
526
+ $LOAD_PATH.unshift(path) if File.directory?(path)
527
+ end
528
+ $LOAD_PATH.uniq!
529
+ end
530
+
531
+ # Set the paths from which Rails will automatically load source files,
532
+ # and the load_once paths.
533
+ #
534
+ # This needs to be an initializer, since it needs to run once
535
+ # per engine and get the engine as a block parameter
536
+ initializer :set_autoload_paths, :before => :bootstrap_hook do |app|
537
+ ActiveSupport::Dependencies.autoload_paths.unshift(*_all_autoload_paths)
538
+ ActiveSupport::Dependencies.autoload_once_paths.unshift(*_all_autoload_once_paths)
539
+
540
+ # Freeze so future modifications will fail rather than do nothing mysteriously
541
+ config.autoload_paths.freeze
542
+ config.eager_load_paths.freeze
543
+ config.autoload_once_paths.freeze
544
+ end
545
+
546
+ initializer :add_routing_paths do |app|
547
+ paths = self.paths["config/routes"].existent
548
+
549
+ if routes? || paths.any?
550
+ app.routes_reloader.paths.unshift(*paths)
551
+ app.routes_reloader.route_sets << routes
552
+ end
553
+ end
554
+
555
+ # I18n load paths are a special case since the ones added
556
+ # later have higher priority.
557
+ initializer :add_locales do
558
+ config.i18n.railties_load_path.concat(paths["config/locales"].existent)
559
+ end
560
+
561
+ initializer :add_view_paths do
562
+ views = paths["app/views"].existent
563
+ unless views.empty?
564
+ ActiveSupport.on_load(:action_controller){ prepend_view_path(views) }
565
+ ActiveSupport.on_load(:action_mailer){ prepend_view_path(views) }
566
+ end
567
+ end
568
+
569
+ initializer :load_environment_config, :before => :load_environment_hook, :group => :all do
570
+ environment = paths["config/environments"].existent.first
571
+ require environment if environment
572
+ end
573
+
574
+ initializer :append_assets_path, :group => :all do |app|
575
+ app.config.assets.paths.unshift(*paths["vendor/assets"].existent_directories)
576
+ app.config.assets.paths.unshift(*paths["lib/assets"].existent_directories)
577
+ app.config.assets.paths.unshift(*paths["app/assets"].existent_directories)
578
+ end
579
+
580
+ initializer :prepend_helpers_path do |app|
581
+ if !isolated? || (app == self)
582
+ app.config.helpers_paths.unshift(*paths["app/helpers"].existent)
583
+ end
584
+ end
585
+
586
+ initializer :load_config_initializers do
587
+ config.paths["config/initializers"].existent.sort.each do |initializer|
588
+ load(initializer)
589
+ end
590
+ end
591
+
592
+ initializer :engines_blank_point do
593
+ # We need this initializer so all extra initializers added in engines are
594
+ # consistently executed after all the initializers above across all engines.
595
+ end
596
+
597
+ rake_tasks do
598
+ next if self.is_a?(Rails::Application)
599
+ next unless has_migrations?
600
+
601
+ namespace railtie_name do
602
+ namespace :install do
603
+ desc "Copy migrations from #{railtie_name} to application"
604
+ task :migrations do
605
+ ENV["FROM"] = railtie_name
606
+ Rake::Task["railties:install:migrations"].invoke
607
+ end
608
+ end
609
+ end
610
+ end
611
+
612
+ protected
613
+
614
+ def initialize_generators
615
+ require "rails/generators"
616
+ end
617
+
618
+ def routes?
619
+ defined?(@routes)
620
+ end
621
+
622
+ def has_migrations?
623
+ paths["db/migrate"].existent.any?
624
+ end
625
+
626
+ def find_root_with_flag(flag, default=nil)
627
+ root_path = self.class.called_from
628
+
629
+ while root_path && File.directory?(root_path) && !File.exist?("#{root_path}/#{flag}")
630
+ parent = File.dirname(root_path)
631
+ root_path = parent != root_path && parent
632
+ end
633
+
634
+ root = File.exist?("#{root_path}/#{flag}") ? root_path : default
635
+ raise "Could not find root path for #{self}" unless root
636
+
637
+ RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ?
638
+ Pathname.new(root).expand_path : Pathname.new(root).realpath
639
+ end
640
+
641
+ def default_middleware_stack
642
+ ActionDispatch::MiddlewareStack.new
643
+ end
644
+
645
+ def _all_autoload_once_paths
646
+ config.autoload_once_paths
647
+ end
648
+
649
+ def _all_autoload_paths
650
+ @_all_autoload_paths ||= (config.autoload_paths + config.eager_load_paths + config.autoload_once_paths).uniq
651
+ end
652
+
653
+ def _all_load_paths
654
+ @_all_load_paths ||= (config.paths.load_paths + _all_autoload_paths).uniq
655
+ end
656
+ end
657
+ end