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,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