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,123 @@
1
+ require 'erb'
2
+
3
+ begin
4
+ require 'psych'
5
+ rescue LoadError
6
+ end
7
+
8
+ require 'yaml'
9
+ require 'optparse'
10
+ require 'rbconfig'
11
+
12
+ module Rails
13
+ class DBConsole
14
+ def self.start(app)
15
+ new(app).start
16
+ end
17
+
18
+ def initialize(app)
19
+ @app = app
20
+ end
21
+
22
+ def start
23
+ include_password = false
24
+ options = {}
25
+ OptionParser.new do |opt|
26
+ opt.banner = "Usage: dbconsole [environment] [options]"
27
+ opt.on("-p", "--include-password", "Automatically provide the password from database.yml") do |v|
28
+ include_password = true
29
+ end
30
+
31
+ opt.on("--mode [MODE]", ['html', 'list', 'line', 'column'],
32
+ "Automatically put the sqlite3 database in the specified mode (html, list, line, column).") do |mode|
33
+ options['mode'] = mode
34
+ end
35
+
36
+ opt.on("--header") do |h|
37
+ options['header'] = h
38
+ end
39
+
40
+ opt.parse!(ARGV)
41
+ abort opt.to_s unless (0..1).include?(ARGV.size)
42
+ end
43
+
44
+ unless config = @app.config.database_configuration[Rails.env]
45
+ abort "No database is configured for the environment '#{Rails.env}'"
46
+ end
47
+
48
+
49
+ def find_cmd(*commands)
50
+ dirs_on_path = ENV['PATH'].to_s.split(File::PATH_SEPARATOR)
51
+ commands += commands.map{|cmd| "#{cmd}.exe"} if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
52
+
53
+ full_path_command = nil
54
+ found = commands.detect do |cmd|
55
+ dir = dirs_on_path.detect do |path|
56
+ full_path_command = File.join(path, cmd)
57
+ File.executable? full_path_command
58
+ end
59
+ end
60
+ found ? full_path_command : abort("Couldn't find database client: #{commands.join(', ')}. Check your $PATH and try again.")
61
+ end
62
+
63
+ case config["adapter"]
64
+ when /^mysql/
65
+ args = {
66
+ 'host' => '--host',
67
+ 'port' => '--port',
68
+ 'socket' => '--socket',
69
+ 'username' => '--user',
70
+ 'encoding' => '--default-character-set'
71
+ }.map { |opt, arg| "#{arg}=#{config[opt]}" if config[opt] }.compact
72
+
73
+ if config['password'] && include_password
74
+ args << "--password=#{config['password']}"
75
+ elsif config['password'] && !config['password'].to_s.empty?
76
+ args << "-p"
77
+ end
78
+
79
+ args << config['database']
80
+
81
+ exec(find_cmd('mysql', 'mysql5'), *args)
82
+
83
+ when "postgresql", "postgres"
84
+ ENV['PGUSER'] = config["username"] if config["username"]
85
+ ENV['PGHOST'] = config["host"] if config["host"]
86
+ ENV['PGPORT'] = config["port"].to_s if config["port"]
87
+ ENV['PGPASSWORD'] = config["password"].to_s if config["password"] && include_password
88
+ exec(find_cmd('psql'), config["database"])
89
+
90
+ when "sqlite"
91
+ exec(find_cmd('sqlite'), config["database"])
92
+
93
+ when "sqlite3"
94
+ args = []
95
+
96
+ args << "-#{options['mode']}" if options['mode']
97
+ args << "-header" if options['header']
98
+ args << config['database']
99
+
100
+ exec(find_cmd('sqlite3'), *args)
101
+
102
+ when "oracle", "oracle_enhanced"
103
+ logon = ""
104
+
105
+ if config['username']
106
+ logon = config['username']
107
+ logon << "/#{config['password']}" if config['password'] && include_password
108
+ logon << "@#{config['database']}" if config['database']
109
+ end
110
+
111
+ exec(find_cmd('sqlplus'), logon)
112
+
113
+ else
114
+ abort "Unknown command-line client for #{config['database']}. Submit a Rails patch to add support!"
115
+ end
116
+ end
117
+ end
118
+ end
119
+
120
+ # Has to set the RAILS_ENV before config/application is required
121
+ if ARGV.first && !ARGV.first.index("-") && env = ARGV.first
122
+ ENV['RAILS_ENV'] = %w(production development test).detect {|e| e =~ /^#{env}/} || env
123
+ end
@@ -0,0 +1,10 @@
1
+ require 'rails/generators'
2
+ require 'active_support/core_ext/object/inclusion'
3
+
4
+ if ARGV.first.in?([nil, "-h", "--help"])
5
+ Rails::Generators.help 'destroy'
6
+ exit
7
+ end
8
+
9
+ name = ARGV.shift
10
+ Rails::Generators.invoke name, ARGV, :behavior => :revoke, :destination_root => Rails.root
@@ -0,0 +1,12 @@
1
+ require 'rails/generators'
2
+ require 'active_support/core_ext/object/inclusion'
3
+
4
+ if ARGV.first.in?([nil, "-h", "--help"])
5
+ Rails::Generators.help 'generate'
6
+ exit
7
+ end
8
+
9
+ name = ARGV.shift
10
+
11
+ root = defined?(ENGINE_ROOT) ? ENGINE_ROOT : Rails.root
12
+ Rails::Generators.invoke name, ARGV, :behavior => :invoke, :destination_root => root
@@ -0,0 +1,544 @@
1
+ # Rails Plugin Manager.
2
+ #
3
+ # Installing plugins:
4
+ #
5
+ # $ rails plugin install continuous_builder asset_timestamping
6
+ #
7
+ # Specifying revisions:
8
+ #
9
+ # * Subversion revision is a single integer.
10
+ #
11
+ # * Git revision format:
12
+ # - full - 'refs/tags/1.8.0' or 'refs/heads/experimental'
13
+ # - short: 'experimental' (equivalent to 'refs/heads/experimental')
14
+ # 'tag 1.8.0' (equivalent to 'refs/tags/1.8.0')
15
+ #
16
+ #
17
+ # This is Free Software, copyright 2005 by Ryan Tomayko (rtomayko@gmail.com)
18
+ # and is licensed MIT: (http://www.opensource.org/licenses/mit-license.php)
19
+
20
+ $verbose = false
21
+
22
+ require 'open-uri'
23
+ require 'fileutils'
24
+ require 'tempfile'
25
+
26
+ include FileUtils
27
+
28
+ class RailsEnvironment
29
+ attr_reader :root
30
+
31
+ def initialize(dir)
32
+ @root = dir
33
+ end
34
+
35
+ def self.find(dir=nil)
36
+ dir ||= pwd
37
+ while dir.length > 1
38
+ return new(dir) if File.exist?(File.join(dir, 'config', 'environment.rb'))
39
+ dir = File.dirname(dir)
40
+ end
41
+ end
42
+
43
+ def self.default
44
+ @default ||= find
45
+ end
46
+
47
+ def self.default=(rails_env)
48
+ @default = rails_env
49
+ end
50
+
51
+ def install(name_uri_or_plugin)
52
+ if name_uri_or_plugin.is_a? String
53
+ if name_uri_or_plugin =~ /:\/\//
54
+ plugin = Plugin.new(name_uri_or_plugin)
55
+ else
56
+ plugin = Plugins[name_uri_or_plugin]
57
+ end
58
+ else
59
+ plugin = name_uri_or_plugin
60
+ end
61
+ if plugin
62
+ plugin.install
63
+ else
64
+ puts "Plugin not found: #{name_uri_or_plugin}"
65
+ end
66
+ end
67
+
68
+ def use_svn?
69
+ require 'active_support/core_ext/kernel'
70
+ silence_stderr {`svn --version` rescue nil}
71
+ !$?.nil? && $?.success?
72
+ end
73
+
74
+ def use_externals?
75
+ use_svn? && File.directory?("#{root}/vendor/plugins/.svn")
76
+ end
77
+
78
+ def use_checkout?
79
+ # this is a bit of a guess. we assume that if the rails environment
80
+ # is under subversion then they probably want the plugin checked out
81
+ # instead of exported. This can be overridden on the command line
82
+ File.directory?("#{root}/.svn")
83
+ end
84
+
85
+ def best_install_method
86
+ return :http unless use_svn?
87
+ case
88
+ when use_externals? then :externals
89
+ when use_checkout? then :checkout
90
+ else :export
91
+ end
92
+ end
93
+
94
+ def externals
95
+ return [] unless use_externals?
96
+ ext = `svn propget svn:externals "#{root}/vendor/plugins"`
97
+ lines = ext.respond_to?(:lines) ? ext.lines : ext
98
+ lines.reject{ |line| line.strip == '' }.map do |line|
99
+ line.strip.split(/\s+/, 2)
100
+ end
101
+ end
102
+
103
+ def externals=(items)
104
+ unless items.is_a? String
105
+ items = items.map{|name,uri| "#{name.ljust(29)} #{uri.chomp('/')}"}.join("\n")
106
+ end
107
+ Tempfile.open("svn-set-prop") do |file|
108
+ file.write(items)
109
+ file.flush
110
+ system("svn propset -q svn:externals -F \"#{file.path}\" \"#{root}/vendor/plugins\"")
111
+ end
112
+ end
113
+ end
114
+
115
+ class Plugin
116
+ attr_reader :name, :uri
117
+
118
+ def initialize(uri, name = nil)
119
+ @uri = uri
120
+ guess_name(uri)
121
+ end
122
+
123
+ def self.find(name)
124
+ new(name)
125
+ end
126
+
127
+ def to_s
128
+ "#{@name.ljust(30)}#{@uri}"
129
+ end
130
+
131
+ def svn_url?
132
+ @uri =~ /svn(?:\+ssh)?:\/\/*/
133
+ end
134
+
135
+ def git_url?
136
+ @uri =~ /^git:\/\// || @uri =~ /\.git$/
137
+ end
138
+
139
+ def installed?
140
+ File.directory?("#{rails_env.root}/vendor/plugins/#{name}") \
141
+ or rails_env.externals.detect{ |name, repo| self.uri == repo }
142
+ end
143
+
144
+ def install(method=nil, options = {})
145
+ method ||= rails_env.best_install_method?
146
+ if :http == method
147
+ method = :export if svn_url?
148
+ method = :git if git_url?
149
+ end
150
+
151
+ uninstall if installed? and options[:force]
152
+
153
+ unless installed?
154
+ send("install_using_#{method}", options)
155
+ run_install_hook
156
+ else
157
+ puts "already installed: #{name} (#{uri}). pass --force to reinstall"
158
+ end
159
+ end
160
+
161
+ def uninstall
162
+ path = "#{rails_env.root}/vendor/plugins/#{name}"
163
+ if File.directory?(path)
164
+ puts "Removing 'vendor/plugins/#{name}'" if $verbose
165
+ run_uninstall_hook
166
+ rm_r path
167
+ else
168
+ puts "Plugin doesn't exist: #{path}"
169
+ end
170
+
171
+ if rails_env.use_externals?
172
+ # clean up svn:externals
173
+ externals = rails_env.externals
174
+ externals.reject!{|n, u| name == n or name == u}
175
+ rails_env.externals = externals
176
+ end
177
+ end
178
+
179
+ def info
180
+ tmp = "#{rails_env.root}/_tmp_about.yml"
181
+ if svn_url?
182
+ cmd = "svn export #{@uri} \"#{rails_env.root}/#{tmp}\""
183
+ puts cmd if $verbose
184
+ system(cmd)
185
+ end
186
+ open(svn_url? ? tmp : File.join(@uri, 'about.yml')) do |stream|
187
+ stream.read
188
+ end rescue "No about.yml found in #{uri}"
189
+ ensure
190
+ FileUtils.rm_rf tmp if svn_url?
191
+ end
192
+
193
+ private
194
+
195
+ def run_install_hook
196
+ install_hook_file = "#{rails_env.root}/vendor/plugins/#{name}/install.rb"
197
+ load install_hook_file if File.exist? install_hook_file
198
+ end
199
+
200
+ def run_uninstall_hook
201
+ uninstall_hook_file = "#{rails_env.root}/vendor/plugins/#{name}/uninstall.rb"
202
+ load uninstall_hook_file if File.exist? uninstall_hook_file
203
+ end
204
+
205
+ def install_using_export(options = {})
206
+ svn_command :export, options
207
+ end
208
+
209
+ def install_using_checkout(options = {})
210
+ svn_command :checkout, options
211
+ end
212
+
213
+ def install_using_externals(options = {})
214
+ externals = rails_env.externals
215
+ externals.push([@name, uri])
216
+ rails_env.externals = externals
217
+ install_using_checkout(options)
218
+ end
219
+
220
+ def install_using_http(options = {})
221
+ root = rails_env.root
222
+ mkdir_p "#{root}/vendor/plugins/#{@name}"
223
+ Dir.chdir "#{root}/vendor/plugins/#{@name}" do
224
+ puts "fetching from '#{uri}'" if $verbose
225
+ fetcher = RecursiveHTTPFetcher.new(uri, -1)
226
+ fetcher.quiet = true if options[:quiet]
227
+ fetcher.fetch
228
+ end
229
+ end
230
+
231
+ def install_using_git(options = {})
232
+ root = rails_env.root
233
+ mkdir_p(install_path = "#{root}/vendor/plugins/#{name}")
234
+ Dir.chdir install_path do
235
+ init_cmd = "git init"
236
+ init_cmd += " -q" if options[:quiet] and not $verbose
237
+ puts init_cmd if $verbose
238
+ system(init_cmd)
239
+ base_cmd = "git pull --depth 1 #{uri}"
240
+ base_cmd += " -q" if options[:quiet] and not $verbose
241
+ base_cmd += " #{options[:revision]}" if options[:revision]
242
+ puts base_cmd if $verbose
243
+ if system(base_cmd)
244
+ puts "removing: .git .gitignore" if $verbose
245
+ rm_rf %w(.git .gitignore)
246
+ else
247
+ rm_rf install_path
248
+ end
249
+ end
250
+ end
251
+
252
+ def svn_command(cmd, options = {})
253
+ root = rails_env.root
254
+ mkdir_p "#{root}/vendor/plugins"
255
+ base_cmd = "svn #{cmd} #{uri} \"#{root}/vendor/plugins/#{name}\""
256
+ base_cmd += ' -q' if options[:quiet] and not $verbose
257
+ base_cmd += " -r #{options[:revision]}" if options[:revision]
258
+ puts base_cmd if $verbose
259
+ system(base_cmd)
260
+ end
261
+
262
+ def guess_name(url)
263
+ @name = File.basename(url)
264
+ if @name == 'trunk' || @name.empty?
265
+ @name = File.basename(File.dirname(url))
266
+ end
267
+ @name.gsub!(/\.git$/, '') if @name =~ /\.git$/
268
+ end
269
+
270
+ def rails_env
271
+ @rails_env || RailsEnvironment.default
272
+ end
273
+ end
274
+
275
+ # load default environment and parse arguments
276
+ require 'optparse'
277
+ module Rails
278
+ module Commands
279
+ class Plugin
280
+ attr_reader :environment, :script_name
281
+ def initialize
282
+ @environment = RailsEnvironment.default
283
+ @rails_root = RailsEnvironment.default.root
284
+ @script_name = File.basename($0)
285
+ end
286
+
287
+ def environment=(value)
288
+ @environment = value
289
+ RailsEnvironment.default = value
290
+ end
291
+
292
+ def options
293
+ OptionParser.new do |o|
294
+ o.set_summary_indent(' ')
295
+ o.banner = "Usage: plugin [OPTIONS] command"
296
+ o.define_head "Rails plugin manager."
297
+
298
+ o.separator ""
299
+ o.separator "GENERAL OPTIONS"
300
+
301
+ o.on("-r", "--root=DIR", String,
302
+ "Set an explicit rails app directory.",
303
+ "Default: #{@rails_root}") { |rails_root| @rails_root = rails_root; self.environment = RailsEnvironment.new(@rails_root) }
304
+
305
+ o.on("-v", "--verbose", "Turn on verbose output.") { |verbose| $verbose = verbose }
306
+ o.on("-h", "--help", "Show this help message.") { puts o; exit }
307
+
308
+ o.separator ""
309
+ o.separator "COMMANDS"
310
+
311
+ o.separator " install Install plugin(s) from known repositories or URLs."
312
+ o.separator " remove Uninstall plugins."
313
+
314
+ o.separator ""
315
+ o.separator "EXAMPLES"
316
+ o.separator " Install a plugin from a subversion URL:"
317
+ o.separator " #{@script_name} plugin install http://example.com/my_svn_plugin\n"
318
+ o.separator " Install a plugin from a git URL:"
319
+ o.separator " #{@script_name} plugin install git://github.com/SomeGuy/my_awesome_plugin.git\n"
320
+ o.separator " Install a plugin and add a svn:externals entry to vendor/plugins"
321
+ o.separator " #{@script_name} plugin install -x my_svn_plugin\n"
322
+ end
323
+ end
324
+
325
+ def parse!(args=ARGV)
326
+ general, sub = split_args(args)
327
+ options.parse!(general)
328
+
329
+ command = general.shift
330
+ if command =~ /^(install|remove)$/
331
+ command = Commands.const_get(command.capitalize).new(self)
332
+ command.parse!(sub)
333
+ else
334
+ puts "Unknown command: #{command}" unless command.blank?
335
+ puts options
336
+ exit 1
337
+ end
338
+ end
339
+
340
+ def split_args(args)
341
+ left = []
342
+ left << args.shift while args[0] and args[0] =~ /^-/
343
+ left << args.shift if args[0]
344
+ [left, args]
345
+ end
346
+
347
+ def self.parse!(args=ARGV)
348
+ Plugin.new.parse!(args)
349
+ end
350
+ end
351
+
352
+ class Install
353
+ def initialize(base_command)
354
+ @base_command = base_command
355
+ @method = :http
356
+ @options = { :quiet => false, :revision => nil, :force => false }
357
+ end
358
+
359
+ def options
360
+ OptionParser.new do |o|
361
+ o.set_summary_indent(' ')
362
+ o.banner = "Usage: #{@base_command.script_name} install PLUGIN [PLUGIN [PLUGIN] ...]"
363
+ o.define_head "Install one or more plugins."
364
+ o.separator ""
365
+ o.separator "Options:"
366
+ o.on( "-x", "--externals",
367
+ "Use svn:externals to grab the plugin.",
368
+ "Enables plugin updates and plugin versioning.") { |v| @method = :externals }
369
+ o.on( "-o", "--checkout",
370
+ "Use svn checkout to grab the plugin.",
371
+ "Enables updating but does not add a svn:externals entry.") { |v| @method = :checkout }
372
+ o.on( "-e", "--export",
373
+ "Use svn export to grab the plugin.",
374
+ "Exports the plugin, allowing you to check it into your local repository. Does not enable updates or add an svn:externals entry.") { |v| @method = :export }
375
+ o.on( "-q", "--quiet",
376
+ "Suppresses the output from installation.",
377
+ "Ignored if -v is passed (rails plugin -v install ...)") { |v| @options[:quiet] = true }
378
+ o.on( "-r REVISION", "--revision REVISION",
379
+ "Checks out the given revision from subversion or git.",
380
+ "Ignored if subversion/git is not used.") { |v| @options[:revision] = v }
381
+ o.on( "-f", "--force",
382
+ "Reinstalls a plugin if it's already installed.") { |v| @options[:force] = true }
383
+ o.separator ""
384
+ o.separator "You can specify plugin names as given in 'plugin list' output or absolute URLs to "
385
+ o.separator "a plugin repository."
386
+ end
387
+ end
388
+
389
+ def determine_install_method
390
+ best = @base_command.environment.best_install_method
391
+ @method = :http if best == :http and @method == :export
392
+ case
393
+ when (best == :http and @method != :http)
394
+ msg = "Cannot install using subversion because `svn' cannot be found in your PATH"
395
+ when (best == :export and (@method != :export and @method != :http))
396
+ msg = "Cannot install using #{@method} because this project is not under subversion."
397
+ when (best != :externals and @method == :externals)
398
+ msg = "Cannot install using externals because vendor/plugins is not under subversion."
399
+ end
400
+ if msg
401
+ puts msg
402
+ exit 1
403
+ end
404
+ @method
405
+ end
406
+
407
+ def parse!(args)
408
+ options.parse!(args)
409
+ if args.blank?
410
+ puts options
411
+ exit 1
412
+ end
413
+ environment = @base_command.environment
414
+ install_method = determine_install_method
415
+ puts "Plugins will be installed using #{install_method}" if $verbose
416
+ args.each do |name|
417
+ ::Plugin.find(name).install(install_method, @options)
418
+ end
419
+ rescue StandardError => e
420
+ puts "Plugin not found: #{args.inspect}"
421
+ puts e.inspect if $verbose
422
+ exit 1
423
+ end
424
+ end
425
+
426
+ class Remove
427
+ def initialize(base_command)
428
+ @base_command = base_command
429
+ end
430
+
431
+ def options
432
+ OptionParser.new do |o|
433
+ o.set_summary_indent(' ')
434
+ o.banner = "Usage: #{@base_command.script_name} remove name [name]..."
435
+ o.define_head "Remove plugins."
436
+ end
437
+ end
438
+
439
+ def parse!(args)
440
+ options.parse!(args)
441
+ if args.blank?
442
+ puts options
443
+ exit 1
444
+ end
445
+ root = @base_command.environment.root
446
+ args.each do |name|
447
+ ::Plugin.new(name).uninstall
448
+ end
449
+ end
450
+ end
451
+
452
+ class Info
453
+ def initialize(base_command)
454
+ @base_command = base_command
455
+ end
456
+
457
+ def options
458
+ OptionParser.new do |o|
459
+ o.set_summary_indent(' ')
460
+ o.banner = "Usage: #{@base_command.script_name} info name [name]..."
461
+ o.define_head "Shows plugin info at {url}/about.yml."
462
+ end
463
+ end
464
+
465
+ def parse!(args)
466
+ options.parse!(args)
467
+ args.each do |name|
468
+ puts ::Plugin.find(name).info
469
+ puts
470
+ end
471
+ end
472
+ end
473
+ end
474
+ end
475
+
476
+ class RecursiveHTTPFetcher
477
+ attr_accessor :quiet
478
+ def initialize(urls_to_fetch, level = 1, cwd = ".")
479
+ @level = level
480
+ @cwd = cwd
481
+ @urls_to_fetch = RUBY_VERSION >= '1.9' ? urls_to_fetch.lines : urls_to_fetch.to_a
482
+ @quiet = false
483
+ end
484
+
485
+ def ls
486
+ @urls_to_fetch.collect do |url|
487
+ if url =~ /^svn(\+ssh)?:\/\/.*/
488
+ `svn ls #{url}`.split("\n").map {|entry| "/#{entry}"} rescue nil
489
+ else
490
+ open(url) do |stream|
491
+ links("", stream.read)
492
+ end rescue nil
493
+ end
494
+ end.flatten
495
+ end
496
+
497
+ def push_d(dir)
498
+ @cwd = File.join(@cwd, dir)
499
+ FileUtils.mkdir_p(@cwd)
500
+ end
501
+
502
+ def pop_d
503
+ @cwd = File.dirname(@cwd)
504
+ end
505
+
506
+ def links(base_url, contents)
507
+ links = []
508
+ contents.scan(/href\s*=\s*\"*[^\">]*/i) do |link|
509
+ link = link.sub(/href="/i, "")
510
+ next if link =~ /svnindex.xsl$/
511
+ next if link =~ /^(\w*:|)\/\// || link =~ /^\./
512
+ links << File.join(base_url, link)
513
+ end
514
+ links
515
+ end
516
+
517
+ def download(link)
518
+ puts "+ #{File.join(@cwd, File.basename(link))}" unless @quiet
519
+ open(link) do |stream|
520
+ File.open(File.join(@cwd, File.basename(link)), "wb") do |file|
521
+ file.write(stream.read)
522
+ end
523
+ end
524
+ end
525
+
526
+ def fetch(links = @urls_to_fetch)
527
+ links.each do |l|
528
+ (l =~ /\/$/ || links == @urls_to_fetch) ? fetch_dir(l) : download(l)
529
+ end
530
+ end
531
+
532
+ def fetch_dir(url)
533
+ @level += 1
534
+ push_d(File.basename(url)) if @level > 0
535
+ open(url) do |stream|
536
+ contents = stream.read
537
+ fetch(links(url, contents))
538
+ end
539
+ pop_d if @level > 0
540
+ @level -= 1
541
+ end
542
+ end
543
+
544
+ Rails::Commands::Plugin.parse!
@@ -0,0 +1,11 @@
1
+ require 'rubygems' if ARGV.include?("--dev")
2
+
3
+ if ARGV.first != "new"
4
+ ARGV[0] = "--help"
5
+ else
6
+ ARGV.shift
7
+ end
8
+
9
+ require 'rails/generators'
10
+ require 'rails/generators/rails/plugin_new/plugin_new_generator'
11
+ Rails::Generators::PluginNewGenerator.start