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,325 @@
1
+ require 'open-uri'
2
+ require 'rbconfig'
3
+ require 'active_support/core_ext/array/wrap'
4
+
5
+ module Rails
6
+ module Generators
7
+ module Actions
8
+
9
+ # Install a plugin. You must provide either a Subversion url or Git url.
10
+ #
11
+ # For a Git-hosted plugin, you can specify a branch and
12
+ # whether it should be added as a submodule instead of cloned.
13
+ #
14
+ # For a Subversion-hosted plugin you can specify a revision.
15
+ #
16
+ # ==== Examples
17
+ #
18
+ # plugin 'restful-authentication', :git => 'git://github.com/technoweenie/restful-authentication.git'
19
+ # plugin 'restful-authentication', :git => 'git://github.com/technoweenie/restful-authentication.git', :branch => 'stable'
20
+ # plugin 'restful-authentication', :git => 'git://github.com/technoweenie/restful-authentication.git', :submodule => true
21
+ # plugin 'restful-authentication', :svn => 'svn://svnhub.com/technoweenie/restful-authentication/trunk'
22
+ # plugin 'restful-authentication', :svn => 'svn://svnhub.com/technoweenie/restful-authentication/trunk', :revision => 1234
23
+ #
24
+ def plugin(name, options)
25
+ log :plugin, name
26
+
27
+ if options[:git] && options[:submodule]
28
+ options[:git] = "-b #{options[:branch]} #{options[:git]}" if options[:branch]
29
+ in_root do
30
+ run "git submodule add #{options[:git]} vendor/plugins/#{name}", :verbose => false
31
+ end
32
+ elsif options[:git] || options[:svn]
33
+ options[:git] = "-b #{options[:branch]} #{options[:git]}" if options[:branch]
34
+ options[:svn] = "-r #{options[:revision]} #{options[:svn]}" if options[:revision]
35
+ in_root do
36
+ run_ruby_script "script/rails plugin install #{options[:svn] || options[:git]}", :verbose => false
37
+ end
38
+ else
39
+ log "! no git or svn provided for #{name}. Skipping..."
40
+ end
41
+ end
42
+
43
+ # Adds an entry into Gemfile for the supplied gem. If env
44
+ # is specified, add the gem to the given environment.
45
+ #
46
+ # ==== Example
47
+ #
48
+ # gem "rspec", :group => :test
49
+ # gem "technoweenie-restful-authentication", :lib => "restful-authentication", :source => "http://gems.github.com/"
50
+ # gem "rails", "3.0", :git => "git://github.com/rails/rails"
51
+ #
52
+ def gem(*args)
53
+ options = args.extract_options!
54
+ name, version = args
55
+
56
+ # Set the message to be shown in logs. Uses the git repo if one is given,
57
+ # otherwise use name (version).
58
+ parts, message = [ name.inspect ], name
59
+ if version ||= options.delete(:version)
60
+ parts << version.inspect
61
+ message << " (#{version})"
62
+ end
63
+ message = options[:git] if options[:git]
64
+
65
+ log :gemfile, message
66
+
67
+ options.each do |option, value|
68
+ parts << ":#{option} => #{value.inspect}"
69
+ end
70
+
71
+ in_root do
72
+ str = "gem #{parts.join(", ")}"
73
+ str = " " + str if @in_group
74
+ str = "\n" + str
75
+ append_file "Gemfile", str, :verbose => false
76
+ end
77
+ end
78
+
79
+ # Wraps gem entries inside a group.
80
+ #
81
+ # ==== Example
82
+ #
83
+ # gem_group :development, :test do
84
+ # gem "rspec-rails"
85
+ # end
86
+ #
87
+ def gem_group(*names, &block)
88
+ name = names.map(&:inspect).join(", ")
89
+ log :gemfile, "group #{name}"
90
+
91
+ in_root do
92
+ append_file "Gemfile", "\ngroup #{name} do", :force => true
93
+
94
+ @in_group = true
95
+ instance_eval(&block)
96
+ @in_group = false
97
+
98
+ append_file "Gemfile", "\nend\n", :force => true
99
+ end
100
+ end
101
+
102
+ # Add the given source to Gemfile
103
+ #
104
+ # ==== Example
105
+ #
106
+ # add_source "http://gems.github.com/"
107
+ def add_source(source, options={})
108
+ log :source, source
109
+
110
+ in_root do
111
+ prepend_file "Gemfile", "source #{source.inspect}\n", :verbose => false
112
+ end
113
+ end
114
+
115
+ # Adds a line inside the Application class for config/application.rb.
116
+ #
117
+ # If options :env is specified, the line is appended to the corresponding
118
+ # file in config/environments.
119
+ #
120
+ def environment(data=nil, options={}, &block)
121
+ sentinel = /class [a-z_:]+ < Rails::Application/i
122
+ env_file_sentinel = /::Application\.configure do/
123
+ data = block.call if !data && block_given?
124
+
125
+ in_root do
126
+ if options[:env].nil?
127
+ inject_into_file 'config/application.rb', "\n #{data}", :after => sentinel, :verbose => false
128
+ else
129
+ Array.wrap(options[:env]).each do |env|
130
+ inject_into_file "config/environments/#{env}.rb", "\n #{data}", :after => env_file_sentinel, :verbose => false
131
+ end
132
+ end
133
+ end
134
+ end
135
+ alias :application :environment
136
+
137
+ # Run a command in git.
138
+ #
139
+ # ==== Examples
140
+ #
141
+ # git :init
142
+ # git :add => "this.file that.rb"
143
+ # git :add => "onefile.rb", :rm => "badfile.cxx"
144
+ #
145
+ def git(commands={})
146
+ if commands.is_a?(Symbol)
147
+ run "git #{commands}"
148
+ else
149
+ commands.each do |cmd, options|
150
+ run "git #{cmd} #{options}"
151
+ end
152
+ end
153
+ end
154
+
155
+ # Create a new file in the vendor/ directory. Code can be specified
156
+ # in a block or a data string can be given.
157
+ #
158
+ # ==== Examples
159
+ #
160
+ # vendor("sekrit.rb") do
161
+ # sekrit_salt = "#{Time.now}--#{3.years.ago}--#{rand}--"
162
+ # "salt = '#{sekrit_salt}'"
163
+ # end
164
+ #
165
+ # vendor("foreign.rb", "# Foreign code is fun")
166
+ #
167
+ def vendor(filename, data=nil, &block)
168
+ log :vendor, filename
169
+ create_file("vendor/#{filename}", data, :verbose => false, &block)
170
+ end
171
+
172
+ # Create a new file in the lib/ directory. Code can be specified
173
+ # in a block or a data string can be given.
174
+ #
175
+ # ==== Examples
176
+ #
177
+ # lib("crypto.rb") do
178
+ # "crypted_special_value = '#{rand}--#{Time.now}--#{rand(1337)}--'"
179
+ # end
180
+ #
181
+ # lib("foreign.rb", "# Foreign code is fun")
182
+ #
183
+ def lib(filename, data=nil, &block)
184
+ log :lib, filename
185
+ create_file("lib/#{filename}", data, :verbose => false, &block)
186
+ end
187
+
188
+ # Create a new Rakefile with the provided code (either in a block or a string).
189
+ #
190
+ # ==== Examples
191
+ #
192
+ # rakefile("bootstrap.rake") do
193
+ # project = ask("What is the UNIX name of your project?")
194
+ #
195
+ # <<-TASK
196
+ # namespace :#{project} do
197
+ # task :bootstrap do
198
+ # puts "i like boots!"
199
+ # end
200
+ # end
201
+ # TASK
202
+ # end
203
+ #
204
+ # rakefile("seed.rake", "puts 'im plantin ur seedz'")
205
+ #
206
+ def rakefile(filename, data=nil, &block)
207
+ log :rakefile, filename
208
+ create_file("lib/tasks/#{filename}", data, :verbose => false, &block)
209
+ end
210
+
211
+ # Create a new initializer with the provided code (either in a block or a string).
212
+ #
213
+ # ==== Examples
214
+ #
215
+ # initializer("globals.rb") do
216
+ # data = ""
217
+ #
218
+ # ['MY_WORK', 'ADMINS', 'BEST_COMPANY_EVAR'].each do |const|
219
+ # data << "#{const} = :entp\n"
220
+ # end
221
+ #
222
+ # data
223
+ # end
224
+ #
225
+ # initializer("api.rb", "API_KEY = '123456'")
226
+ #
227
+ def initializer(filename, data=nil, &block)
228
+ log :initializer, filename
229
+ create_file("config/initializers/#{filename}", data, :verbose => false, &block)
230
+ end
231
+
232
+ # Generate something using a generator from Rails or a plugin.
233
+ # The second parameter is the argument string that is passed to
234
+ # the generator or an Array that is joined.
235
+ #
236
+ # ==== Example
237
+ #
238
+ # generate(:authenticated, "user session")
239
+ #
240
+ def generate(what, *args)
241
+ log :generate, what
242
+ argument = args.map {|arg| arg.to_s }.flatten.join(" ")
243
+
244
+ in_root { run_ruby_script("script/rails generate #{what} #{argument}", :verbose => false) }
245
+ end
246
+
247
+ # Runs the supplied rake task
248
+ #
249
+ # ==== Example
250
+ #
251
+ # rake("db:migrate")
252
+ # rake("db:migrate", :env => "production")
253
+ # rake("gems:install", :sudo => true)
254
+ #
255
+ def rake(command, options={})
256
+ log :rake, command
257
+ env = options[:env] || ENV["RAILS_ENV"] || 'development'
258
+ sudo = options[:sudo] && RbConfig::CONFIG['host_os'] !~ /mswin|mingw/ ? 'sudo ' : ''
259
+ in_root { run("#{sudo}#{extify(:rake)} #{command} RAILS_ENV=#{env}", :verbose => false) }
260
+ end
261
+
262
+ # Just run the capify command in root
263
+ #
264
+ # ==== Example
265
+ #
266
+ # capify!
267
+ #
268
+ def capify!
269
+ log :capify, ""
270
+ in_root { run("#{extify(:capify)} .", :verbose => false) }
271
+ end
272
+
273
+ # Make an entry in Rails routing file config/routes.rb
274
+ #
275
+ # === Example
276
+ #
277
+ # route "root :to => 'welcome'"
278
+ #
279
+ def route(routing_code)
280
+ log :route, routing_code
281
+ sentinel = /\.routes\.draw do(?:\s*\|map\|)?\s*$/
282
+
283
+ in_root do
284
+ inject_into_file 'config/routes.rb', "\n #{routing_code}\n", { :after => sentinel, :verbose => false }
285
+ end
286
+ end
287
+
288
+ # Reads the given file at the source root and prints it in the console.
289
+ #
290
+ # === Example
291
+ #
292
+ # readme "README"
293
+ #
294
+ def readme(path)
295
+ log File.read(find_in_source_paths(path))
296
+ end
297
+
298
+ protected
299
+
300
+ # Define log for backwards compatibility. If just one argument is sent,
301
+ # invoke say, otherwise invoke say_status. Differently from say and
302
+ # similarly to say_status, this method respects the quiet? option given.
303
+ #
304
+ def log(*args)
305
+ if args.size == 1
306
+ say args.first.to_s unless options.quiet?
307
+ else
308
+ args << (self.behavior == :invoke ? :green : :red)
309
+ say_status(*args)
310
+ end
311
+ end
312
+
313
+ # Add an extension to the given name based on the platform.
314
+ #
315
+ def extify(name)
316
+ if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
317
+ "#{name}.bat"
318
+ else
319
+ name
320
+ end
321
+ end
322
+
323
+ end
324
+ end
325
+ end
@@ -0,0 +1,78 @@
1
+ module Rails
2
+ module Generators
3
+ # ActiveModel is a class to be implemented by each ORM to allow Rails to
4
+ # generate customized controller code.
5
+ #
6
+ # The API has the same methods as ActiveRecord, but each method returns a
7
+ # string that matches the ORM API.
8
+ #
9
+ # For example:
10
+ #
11
+ # ActiveRecord::Generators::ActiveModel.find(Foo, "params[:id]")
12
+ # # => "Foo.find(params[:id])"
13
+ #
14
+ # Datamapper::Generators::ActiveModel.find(Foo, "params[:id]")
15
+ # # => "Foo.get(params[:id])"
16
+ #
17
+ # On initialization, the ActiveModel accepts the instance name that will
18
+ # receive the calls:
19
+ #
20
+ # builder = ActiveRecord::Generators::ActiveModel.new "@foo"
21
+ # builder.save # => "@foo.save"
22
+ #
23
+ # The only exception in ActiveModel for ActiveRecord is the use of self.build
24
+ # instead of self.new.
25
+ #
26
+ class ActiveModel
27
+ attr_reader :name
28
+
29
+ def initialize(name)
30
+ @name = name
31
+ end
32
+
33
+ # GET index
34
+ def self.all(klass)
35
+ "#{klass}.all"
36
+ end
37
+
38
+ # GET show
39
+ # GET edit
40
+ # PUT update
41
+ # DELETE destroy
42
+ def self.find(klass, params=nil)
43
+ "#{klass}.find(#{params})"
44
+ end
45
+
46
+ # GET new
47
+ # POST create
48
+ def self.build(klass, params=nil)
49
+ if params
50
+ "#{klass}.new(#{params})"
51
+ else
52
+ "#{klass}.new"
53
+ end
54
+ end
55
+
56
+ # POST create
57
+ def save
58
+ "#{name}.save"
59
+ end
60
+
61
+ # PUT update
62
+ def update_attributes(params=nil)
63
+ "#{name}.update_attributes(#{params})"
64
+ end
65
+
66
+ # POST create
67
+ # PUT update
68
+ def errors
69
+ "#{name}.errors"
70
+ end
71
+
72
+ # DELETE destroy
73
+ def destroy
74
+ "#{name}.destroy"
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,281 @@
1
+ require 'digest/md5'
2
+ require 'securerandom'
3
+ require 'active_support/core_ext/string/strip'
4
+ require 'rails/version' unless defined?(Rails::VERSION)
5
+ require 'rbconfig'
6
+ require 'open-uri'
7
+ require 'uri'
8
+
9
+ module Rails
10
+ module Generators
11
+ class AppBase < Base
12
+ DATABASES = %w( mysql oracle postgresql sqlite3 frontbase ibm_db sqlserver )
13
+ JDBC_DATABASES = %w( jdbcmysql jdbcsqlite3 jdbcpostgresql jdbc )
14
+ DATABASES.concat(JDBC_DATABASES)
15
+
16
+ attr_accessor :rails_template
17
+ add_shebang_option!
18
+
19
+ argument :app_path, :type => :string
20
+
21
+ def self.add_shared_options_for(name)
22
+ class_option :builder, :type => :string, :aliases => "-b",
23
+ :desc => "Path to a #{name} builder (can be a filesystem path or URL)"
24
+
25
+ class_option :template, :type => :string, :aliases => "-m",
26
+ :desc => "Path to an #{name} template (can be a filesystem path or URL)"
27
+
28
+ class_option :skip_gemfile, :type => :boolean, :default => false,
29
+ :desc => "Don't create a Gemfile"
30
+
31
+ class_option :skip_bundle, :type => :boolean, :default => false,
32
+ :desc => "Don't run bundle install"
33
+
34
+ class_option :skip_git, :type => :boolean, :aliases => "-G", :default => false,
35
+ :desc => "Skip Git ignores and keeps"
36
+
37
+ class_option :skip_active_record, :type => :boolean, :aliases => "-O", :default => false,
38
+ :desc => "Skip Active Record files"
39
+
40
+ class_option :skip_sprockets, :type => :boolean, :aliases => "-S", :default => false,
41
+ :desc => "Skip Sprockets files"
42
+
43
+ class_option :database, :type => :string, :aliases => "-d", :default => "sqlite3",
44
+ :desc => "Preconfigure for selected database (options: #{DATABASES.join('/')})"
45
+
46
+ class_option :javascript, :type => :string, :aliases => '-j', :default => 'jquery',
47
+ :desc => 'Preconfigure for selected JavaScript library'
48
+
49
+ class_option :skip_javascript, :type => :boolean, :aliases => "-J", :default => false,
50
+ :desc => "Skip JavaScript files"
51
+
52
+ class_option :dev, :type => :boolean, :default => false,
53
+ :desc => "Setup the #{name} with Gemfile pointing to your Rails checkout"
54
+
55
+ class_option :edge, :type => :boolean, :default => false,
56
+ :desc => "Setup the #{name} with Gemfile pointing to Rails repository"
57
+
58
+ class_option :skip_test_unit, :type => :boolean, :aliases => "-T", :default => false,
59
+ :desc => "Skip Test::Unit files"
60
+
61
+ class_option :help, :type => :boolean, :aliases => "-h", :group => :rails,
62
+ :desc => "Show this help message and quit"
63
+
64
+ class_option :old_style_hash, :type => :boolean, :default => false,
65
+ :desc => "Force using old style hash (:foo => 'bar') on Ruby >= 1.9"
66
+ end
67
+
68
+ def initialize(*args)
69
+ @original_wd = Dir.pwd
70
+ super
71
+ convert_database_option_for_jruby
72
+ end
73
+
74
+ protected
75
+
76
+ def builder
77
+ @builder ||= begin
78
+ if path = options[:builder]
79
+ if URI(path).is_a?(URI::HTTP)
80
+ contents = open(path, "Accept" => "application/x-thor-template") {|io| io.read }
81
+ else
82
+ contents = open(File.expand_path(path, @original_wd)) {|io| io.read }
83
+ end
84
+
85
+ prok = eval("proc { #{contents} }", TOPLEVEL_BINDING, path, 1)
86
+ instance_eval(&prok)
87
+ end
88
+
89
+ builder_class = get_builder_class
90
+ builder_class.send(:include, ActionMethods)
91
+ builder_class.new(self)
92
+ end
93
+ end
94
+
95
+ def build(meth, *args)
96
+ builder.send(meth, *args) if builder.respond_to?(meth)
97
+ end
98
+
99
+ def create_root
100
+ self.destination_root = File.expand_path(app_path, destination_root)
101
+ valid_const?
102
+
103
+ empty_directory '.'
104
+ set_default_accessors!
105
+ FileUtils.cd(destination_root) unless options[:pretend]
106
+ end
107
+
108
+ def apply_rails_template
109
+ apply rails_template if rails_template
110
+ rescue Thor::Error, LoadError, Errno::ENOENT => e
111
+ raise Error, "The template [#{rails_template}] could not be loaded. Error: #{e}"
112
+ end
113
+
114
+ def set_default_accessors!
115
+ self.rails_template = case options[:template]
116
+ when /^https?:\/\//
117
+ options[:template]
118
+ when String
119
+ File.expand_path(options[:template], Dir.pwd)
120
+ else
121
+ options[:template]
122
+ end
123
+ end
124
+
125
+ def database_gemfile_entry
126
+ options[:skip_active_record] ? "" : "gem '#{gem_for_database}'\n"
127
+ end
128
+
129
+ def include_all_railties?
130
+ !options[:skip_active_record] && !options[:skip_test_unit] && !options[:skip_sprockets]
131
+ end
132
+
133
+ def comment_if(value)
134
+ options[value] ? '# ' : ''
135
+ end
136
+
137
+ def rails_gemfile_entry
138
+ if options.dev?
139
+ <<-GEMFILE.strip_heredoc
140
+ gem 'rails', :path => '#{Rails::Generators::RAILS_DEV_PATH}'
141
+ gem 'journey', :git => 'git://github.com/rails/journey.git', :branch => '1-0-stable'
142
+ gem 'arel', :git => 'git://github.com/rails/arel.git', :branch => '3-0-stable'
143
+ GEMFILE
144
+ elsif options.edge?
145
+ <<-GEMFILE.strip_heredoc
146
+ gem 'rails', :git => 'git://github.com/rails/rails.git', :branch => '3-2-stable'
147
+ gem 'journey', :git => 'git://github.com/rails/journey.git', :branch => '1-0-stable'
148
+ gem 'arel', :git => 'git://github.com/rails/arel.git', :branch => '3-0-stable'
149
+ GEMFILE
150
+ else
151
+ <<-GEMFILE.strip_heredoc
152
+ gem 'rails', '#{Rails::VERSION::STRING}'
153
+
154
+ # Bundle edge Rails instead:
155
+ # gem 'rails', :git => 'git://github.com/rails/rails.git'
156
+ GEMFILE
157
+ end
158
+ end
159
+
160
+ def gem_for_database
161
+ # %w( mysql oracle postgresql sqlite3 frontbase ibm_db sqlserver jdbcmysql jdbcsqlite3 jdbcpostgresql )
162
+ case options[:database]
163
+ when "oracle" then "ruby-oci8"
164
+ when "postgresql" then "pg"
165
+ when "frontbase" then "ruby-frontbase"
166
+ when "mysql" then "mysql2"
167
+ when "sqlserver" then "activerecord-sqlserver-adapter"
168
+ when "jdbcmysql" then "activerecord-jdbcmysql-adapter"
169
+ when "jdbcsqlite3" then "activerecord-jdbcsqlite3-adapter"
170
+ when "jdbcpostgresql" then "activerecord-jdbcpostgresql-adapter"
171
+ when "jdbc" then "activerecord-jdbc-adapter"
172
+ else options[:database]
173
+ end
174
+ end
175
+
176
+ def convert_database_option_for_jruby
177
+ if defined?(JRUBY_VERSION)
178
+ case options[:database]
179
+ when "oracle" then options[:database].replace "jdbc"
180
+ when "postgresql" then options[:database].replace "jdbcpostgresql"
181
+ when "mysql" then options[:database].replace "jdbcmysql"
182
+ when "sqlite3" then options[:database].replace "jdbcsqlite3"
183
+ end
184
+ end
185
+ end
186
+
187
+ def ruby_debugger_gemfile_entry
188
+ if RUBY_VERSION < "1.9"
189
+ "gem 'ruby-debug'"
190
+ else
191
+ "gem 'debugger'"
192
+ end
193
+ end
194
+
195
+ def assets_gemfile_entry
196
+ return if options[:skip_sprockets]
197
+
198
+ gemfile = if options.dev? || options.edge?
199
+ <<-GEMFILE
200
+ # Gems used only for assets and not required
201
+ # in production environments by default.
202
+ group :assets do
203
+ gem 'sass-rails', :git => 'git://github.com/rails/sass-rails.git', :branch => '3-2-stable'
204
+ gem 'coffee-rails', :git => 'git://github.com/rails/coffee-rails.git', :branch => '3-2-stable'
205
+
206
+ # See https://github.com/sstephenson/execjs#readme for more supported runtimes
207
+ #{javascript_runtime_gemfile_entry}
208
+ gem 'uglifier', '>= 1.0.3'
209
+ end
210
+ GEMFILE
211
+ else
212
+ <<-GEMFILE
213
+ # Gems used only for assets and not required
214
+ # in production environments by default.
215
+ group :assets do
216
+ gem 'sass-rails', '~> 3.2.3'
217
+ gem 'coffee-rails', '~> 3.2.1'
218
+
219
+ # See https://github.com/sstephenson/execjs#readme for more supported runtimes
220
+ #{javascript_runtime_gemfile_entry}
221
+ gem 'uglifier', '>= 1.0.3'
222
+ end
223
+ GEMFILE
224
+ end
225
+
226
+ gemfile.strip_heredoc.gsub(/^[ \t]*$/, '')
227
+ end
228
+
229
+ def javascript_gemfile_entry
230
+ "gem '#{options[:javascript]}-rails'" unless options[:skip_javascript]
231
+ end
232
+
233
+ def javascript_runtime_gemfile_entry
234
+ if defined?(JRUBY_VERSION)
235
+ "gem 'therubyrhino'\n"
236
+ else
237
+ "# gem 'therubyracer', :platforms => :ruby\n"
238
+ end
239
+ end
240
+
241
+ def bundle_command(command)
242
+ say_status :run, "bundle #{command}"
243
+
244
+ # We are going to shell out rather than invoking Bundler::CLI.new(command)
245
+ # because `rails new` loads the Thor gem and on the other hand bundler uses
246
+ # its own vendored Thor, which could be a different version. Running both
247
+ # things in the same process is a recipe for a night with paracetamol.
248
+ #
249
+ # We use backticks and #print here instead of vanilla #system because it
250
+ # is easier to silence stdout in the existing test suite this way. The
251
+ # end-user gets the bundler commands called anyway, so no big deal.
252
+ #
253
+ # Thanks to James Tucker for the Gem tricks involved in this call.
254
+ print `"#{Gem.ruby}" -rubygems "#{Gem.bin_path('bundler', 'bundle')}" #{command}`
255
+ end
256
+
257
+ def run_bundle
258
+ bundle_command('install') unless options[:skip_gemfile] || options[:skip_bundle]
259
+ end
260
+
261
+ def empty_directory_with_gitkeep(destination, config = {})
262
+ empty_directory(destination, config)
263
+ git_keep(destination)
264
+ end
265
+
266
+ def git_keep(destination)
267
+ create_file("#{destination}/.gitkeep") unless options[:skip_git]
268
+ end
269
+
270
+ # Returns Ruby 1.9 style key-value pair if current code is running on
271
+ # Ruby 1.9.x. Returns the old-style (with hash rocket) otherwise.
272
+ def key_value(key, value)
273
+ if options[:old_style_hash] || RUBY_VERSION < '1.9'
274
+ ":#{key} => #{value}"
275
+ else
276
+ "#{key}: #{value}"
277
+ end
278
+ end
279
+ end
280
+ end
281
+ end