rails 2.2.2 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rails might be problematic. Click here for more details.

Files changed (336) hide show
  1. data/bin/rails +8 -18
  2. metadata +118 -452
  3. data/CHANGELOG +0 -2071
  4. data/MIT-LICENSE +0 -20
  5. data/README +0 -256
  6. data/Rakefile +0 -411
  7. data/bin/about +0 -4
  8. data/bin/console +0 -3
  9. data/bin/dbconsole +0 -3
  10. data/bin/destroy +0 -3
  11. data/bin/generate +0 -3
  12. data/bin/performance/benchmarker +0 -3
  13. data/bin/performance/profiler +0 -3
  14. data/bin/performance/request +0 -3
  15. data/bin/plugin +0 -3
  16. data/bin/process/inspector +0 -3
  17. data/bin/process/reaper +0 -3
  18. data/bin/process/spawner +0 -3
  19. data/bin/runner +0 -3
  20. data/bin/server +0 -3
  21. data/builtin/rails_info/rails/info.rb +0 -125
  22. data/builtin/rails_info/rails/info_controller.rb +0 -9
  23. data/builtin/rails_info/rails/info_helper.rb +0 -2
  24. data/builtin/rails_info/rails_info_controller.rb +0 -2
  25. data/config.ru +0 -17
  26. data/configs/apache.conf +0 -40
  27. data/configs/databases/frontbase.yml +0 -28
  28. data/configs/databases/ibm_db.yml +0 -62
  29. data/configs/databases/mysql.yml +0 -57
  30. data/configs/databases/oracle.yml +0 -39
  31. data/configs/databases/postgresql.yml +0 -51
  32. data/configs/databases/sqlite2.yml +0 -19
  33. data/configs/databases/sqlite3.yml +0 -22
  34. data/configs/empty.log +0 -0
  35. data/configs/initializers/inflections.rb +0 -10
  36. data/configs/initializers/mime_types.rb +0 -5
  37. data/configs/initializers/new_rails_defaults.rb +0 -17
  38. data/configs/lighttpd.conf +0 -54
  39. data/configs/locales/en.yml +0 -5
  40. data/configs/routes.rb +0 -43
  41. data/dispatches/dispatch.fcgi +0 -24
  42. data/dispatches/dispatch.rb +0 -10
  43. data/dispatches/gateway.cgi +0 -97
  44. data/doc/README_FOR_APP +0 -5
  45. data/doc/guides/html/2_2_release_notes.html +0 -1185
  46. data/doc/guides/html/actioncontroller_basics.html +0 -1270
  47. data/doc/guides/html/activerecord_validations_callbacks.html +0 -749
  48. data/doc/guides/html/association_basics.html +0 -2585
  49. data/doc/guides/html/authors.html +0 -240
  50. data/doc/guides/html/benchmarking_and_profiling.html +0 -1018
  51. data/doc/guides/html/caching_with_rails.html +0 -583
  52. data/doc/guides/html/command_line.html +0 -434
  53. data/doc/guides/html/configuring.html +0 -438
  54. data/doc/guides/html/creating_plugins.html +0 -1594
  55. data/doc/guides/html/debugging_rails_applications.html +0 -1175
  56. data/doc/guides/html/finders.html +0 -1090
  57. data/doc/guides/html/form_helpers.html +0 -638
  58. data/doc/guides/html/getting_started_with_rails.html +0 -2066
  59. data/doc/guides/html/index.html +0 -349
  60. data/doc/guides/html/layouts_and_rendering.html +0 -1406
  61. data/doc/guides/html/migrations.html +0 -921
  62. data/doc/guides/html/routing_outside_in.html +0 -2213
  63. data/doc/guides/html/security.html +0 -1346
  64. data/doc/guides/html/testing_rails_applications.html +0 -1859
  65. data/doc/guides/source/2_2_release_notes.txt +0 -435
  66. data/doc/guides/source/actioncontroller_basics/changelog.txt +0 -5
  67. data/doc/guides/source/actioncontroller_basics/cookies.txt +0 -34
  68. data/doc/guides/source/actioncontroller_basics/csrf.txt +0 -32
  69. data/doc/guides/source/actioncontroller_basics/filters.txt +0 -119
  70. data/doc/guides/source/actioncontroller_basics/http_auth.txt +0 -24
  71. data/doc/guides/source/actioncontroller_basics/index.txt +0 -40
  72. data/doc/guides/source/actioncontroller_basics/introduction.txt +0 -9
  73. data/doc/guides/source/actioncontroller_basics/methods.txt +0 -39
  74. data/doc/guides/source/actioncontroller_basics/parameter_filtering.txt +0 -14
  75. data/doc/guides/source/actioncontroller_basics/params.txt +0 -93
  76. data/doc/guides/source/actioncontroller_basics/request_response_objects.txt +0 -43
  77. data/doc/guides/source/actioncontroller_basics/rescue.txt +0 -67
  78. data/doc/guides/source/actioncontroller_basics/session.txt +0 -187
  79. data/doc/guides/source/actioncontroller_basics/streaming.txt +0 -91
  80. data/doc/guides/source/actioncontroller_basics/verification.txt +0 -40
  81. data/doc/guides/source/active_record_basics.txt +0 -181
  82. data/doc/guides/source/activerecord_validations_callbacks.txt +0 -404
  83. data/doc/guides/source/association_basics.txt +0 -1840
  84. data/doc/guides/source/authors.txt +0 -39
  85. data/doc/guides/source/benchmarking_and_profiling/appendix.txt +0 -95
  86. data/doc/guides/source/benchmarking_and_profiling/digging_deeper.txt +0 -105
  87. data/doc/guides/source/benchmarking_and_profiling/edge_rails_features.txt +0 -185
  88. data/doc/guides/source/benchmarking_and_profiling/gameplan.txt +0 -27
  89. data/doc/guides/source/benchmarking_and_profiling/index.txt +0 -242
  90. data/doc/guides/source/benchmarking_and_profiling/rubyprof.txt +0 -179
  91. data/doc/guides/source/benchmarking_and_profiling/statistics.txt +0 -57
  92. data/doc/guides/source/caching_with_rails.txt +0 -367
  93. data/doc/guides/source/command_line.txt +0 -147
  94. data/doc/guides/source/configuring.txt +0 -225
  95. data/doc/guides/source/creating_plugins/acts_as_yaffle.txt +0 -191
  96. data/doc/guides/source/creating_plugins/appendix.txt +0 -46
  97. data/doc/guides/source/creating_plugins/controllers.txt +0 -59
  98. data/doc/guides/source/creating_plugins/core_ext.txt +0 -123
  99. data/doc/guides/source/creating_plugins/custom_route.txt +0 -69
  100. data/doc/guides/source/creating_plugins/gem.txt +0 -1
  101. data/doc/guides/source/creating_plugins/generator_method.txt +0 -89
  102. data/doc/guides/source/creating_plugins/helpers.txt +0 -51
  103. data/doc/guides/source/creating_plugins/index.txt +0 -52
  104. data/doc/guides/source/creating_plugins/migration_generator.txt +0 -156
  105. data/doc/guides/source/creating_plugins/models.txt +0 -76
  106. data/doc/guides/source/creating_plugins/odds_and_ends.txt +0 -69
  107. data/doc/guides/source/creating_plugins/test_setup.txt +0 -230
  108. data/doc/guides/source/debugging_rails_applications.txt +0 -733
  109. data/doc/guides/source/finders.txt +0 -668
  110. data/doc/guides/source/form_helpers.txt +0 -345
  111. data/doc/guides/source/getting_started_with_rails.txt +0 -1256
  112. data/doc/guides/source/images/belongs_to.png +0 -0
  113. data/doc/guides/source/images/bullet.gif +0 -0
  114. data/doc/guides/source/images/csrf.png +0 -0
  115. data/doc/guides/source/images/habtm.png +0 -0
  116. data/doc/guides/source/images/has_many.png +0 -0
  117. data/doc/guides/source/images/has_many_through.png +0 -0
  118. data/doc/guides/source/images/has_one.png +0 -0
  119. data/doc/guides/source/images/has_one_through.png +0 -0
  120. data/doc/guides/source/images/header_backdrop.png +0 -0
  121. data/doc/guides/source/images/icons/README +0 -5
  122. data/doc/guides/source/images/icons/callouts/1.png +0 -0
  123. data/doc/guides/source/images/icons/callouts/10.png +0 -0
  124. data/doc/guides/source/images/icons/callouts/11.png +0 -0
  125. data/doc/guides/source/images/icons/callouts/12.png +0 -0
  126. data/doc/guides/source/images/icons/callouts/13.png +0 -0
  127. data/doc/guides/source/images/icons/callouts/14.png +0 -0
  128. data/doc/guides/source/images/icons/callouts/15.png +0 -0
  129. data/doc/guides/source/images/icons/callouts/2.png +0 -0
  130. data/doc/guides/source/images/icons/callouts/3.png +0 -0
  131. data/doc/guides/source/images/icons/callouts/4.png +0 -0
  132. data/doc/guides/source/images/icons/callouts/5.png +0 -0
  133. data/doc/guides/source/images/icons/callouts/6.png +0 -0
  134. data/doc/guides/source/images/icons/callouts/7.png +0 -0
  135. data/doc/guides/source/images/icons/callouts/8.png +0 -0
  136. data/doc/guides/source/images/icons/callouts/9.png +0 -0
  137. data/doc/guides/source/images/icons/caution.png +0 -0
  138. data/doc/guides/source/images/icons/example.png +0 -0
  139. data/doc/guides/source/images/icons/home.png +0 -0
  140. data/doc/guides/source/images/icons/important.png +0 -0
  141. data/doc/guides/source/images/icons/next.png +0 -0
  142. data/doc/guides/source/images/icons/note.png +0 -0
  143. data/doc/guides/source/images/icons/prev.png +0 -0
  144. data/doc/guides/source/images/icons/tip.png +0 -0
  145. data/doc/guides/source/images/icons/up.png +0 -0
  146. data/doc/guides/source/images/icons/warning.png +0 -0
  147. data/doc/guides/source/images/polymorphic.png +0 -0
  148. data/doc/guides/source/images/rails_logo_remix.gif +0 -0
  149. data/doc/guides/source/images/ruby_on_rails_by_mike_rundle2.gif +0 -0
  150. data/doc/guides/source/images/session_fixation.png +0 -0
  151. data/doc/guides/source/index.txt +0 -118
  152. data/doc/guides/source/layouts_and_rendering.txt +0 -982
  153. data/doc/guides/source/migrations/anatomy_of_a_migration.txt +0 -85
  154. data/doc/guides/source/migrations/changelog.txt +0 -5
  155. data/doc/guides/source/migrations/creating_a_migration.txt +0 -109
  156. data/doc/guides/source/migrations/foreign_keys.txt +0 -8
  157. data/doc/guides/source/migrations/index.txt +0 -22
  158. data/doc/guides/source/migrations/rakeing_around.txt +0 -111
  159. data/doc/guides/source/migrations/scheming.txt +0 -47
  160. data/doc/guides/source/migrations/using_models_in_migrations.txt +0 -46
  161. data/doc/guides/source/migrations/writing_a_migration.txt +0 -159
  162. data/doc/guides/source/routing_outside_in.txt +0 -986
  163. data/doc/guides/source/security.txt +0 -984
  164. data/doc/guides/source/stylesheets/base.css +0 -358
  165. data/doc/guides/source/stylesheets/forms.css +0 -35
  166. data/doc/guides/source/stylesheets/more.css +0 -82
  167. data/doc/guides/source/templates/guides.html.erb +0 -97
  168. data/doc/guides/source/templates/inline.css +0 -165
  169. data/doc/guides/source/testing_rails_applications.txt +0 -995
  170. data/environments/boot.rb +0 -109
  171. data/environments/development.rb +0 -17
  172. data/environments/environment.rb +0 -75
  173. data/environments/production.rb +0 -24
  174. data/environments/test.rb +0 -22
  175. data/fresh_rakefile +0 -10
  176. data/helpers/application.rb +0 -15
  177. data/helpers/application_helper.rb +0 -3
  178. data/helpers/performance_test.rb +0 -9
  179. data/helpers/test_helper.rb +0 -38
  180. data/html/404.html +0 -30
  181. data/html/422.html +0 -30
  182. data/html/500.html +0 -33
  183. data/html/favicon.ico +0 -0
  184. data/html/images/rails.png +0 -0
  185. data/html/index.html +0 -274
  186. data/html/javascripts/application.js +0 -2
  187. data/html/javascripts/controls.js +0 -963
  188. data/html/javascripts/dragdrop.js +0 -973
  189. data/html/javascripts/effects.js +0 -1128
  190. data/html/javascripts/prototype.js +0 -4320
  191. data/html/robots.txt +0 -5
  192. data/lib/code_statistics.rb +0 -107
  193. data/lib/commands.rb +0 -17
  194. data/lib/commands/about.rb +0 -3
  195. data/lib/commands/console.rb +0 -45
  196. data/lib/commands/dbconsole.rb +0 -67
  197. data/lib/commands/destroy.rb +0 -6
  198. data/lib/commands/generate.rb +0 -6
  199. data/lib/commands/ncgi/listener +0 -86
  200. data/lib/commands/ncgi/tracker +0 -69
  201. data/lib/commands/performance/benchmarker.rb +0 -24
  202. data/lib/commands/performance/profiler.rb +0 -50
  203. data/lib/commands/performance/request.rb +0 -6
  204. data/lib/commands/plugin.rb +0 -967
  205. data/lib/commands/process/inspector.rb +0 -68
  206. data/lib/commands/process/reaper.rb +0 -149
  207. data/lib/commands/process/spawner.rb +0 -219
  208. data/lib/commands/process/spinner.rb +0 -57
  209. data/lib/commands/runner.rb +0 -48
  210. data/lib/commands/server.rb +0 -49
  211. data/lib/commands/servers/base.rb +0 -31
  212. data/lib/commands/servers/lighttpd.rb +0 -94
  213. data/lib/commands/servers/mongrel.rb +0 -69
  214. data/lib/commands/servers/new_mongrel.rb +0 -16
  215. data/lib/commands/servers/thin.rb +0 -25
  216. data/lib/commands/servers/webrick.rb +0 -66
  217. data/lib/commands/update.rb +0 -4
  218. data/lib/console_app.rb +0 -30
  219. data/lib/console_sandbox.rb +0 -6
  220. data/lib/console_with_helpers.rb +0 -26
  221. data/lib/dispatcher.rb +0 -24
  222. data/lib/fcgi_handler.rb +0 -237
  223. data/lib/initializer.rb +0 -1038
  224. data/lib/performance_test_help.rb +0 -5
  225. data/lib/rails/gem_builder.rb +0 -21
  226. data/lib/rails/gem_dependency.rb +0 -251
  227. data/lib/rails/mongrel_server/commands.rb +0 -342
  228. data/lib/rails/mongrel_server/handler.rb +0 -55
  229. data/lib/rails/plugin.rb +0 -124
  230. data/lib/rails/plugin/loader.rb +0 -152
  231. data/lib/rails/plugin/locator.rb +0 -100
  232. data/lib/rails/rack.rb +0 -6
  233. data/lib/rails/rack/logger.rb +0 -28
  234. data/lib/rails/rack/static.rb +0 -35
  235. data/lib/rails/vendor_gem_source_index.rb +0 -140
  236. data/lib/rails/version.rb +0 -9
  237. data/lib/rails_generator.rb +0 -43
  238. data/lib/rails_generator/base.rb +0 -263
  239. data/lib/rails_generator/commands.rb +0 -616
  240. data/lib/rails_generator/generated_attribute.rb +0 -46
  241. data/lib/rails_generator/generators/applications/app/USAGE +0 -9
  242. data/lib/rails_generator/generators/applications/app/app_generator.rb +0 -184
  243. data/lib/rails_generator/generators/components/controller/USAGE +0 -29
  244. data/lib/rails_generator/generators/components/controller/controller_generator.rb +0 -37
  245. data/lib/rails_generator/generators/components/controller/templates/controller.rb +0 -7
  246. data/lib/rails_generator/generators/components/controller/templates/functional_test.rb +0 -8
  247. data/lib/rails_generator/generators/components/controller/templates/helper.rb +0 -2
  248. data/lib/rails_generator/generators/components/controller/templates/view.html.erb +0 -2
  249. data/lib/rails_generator/generators/components/integration_test/USAGE +0 -8
  250. data/lib/rails_generator/generators/components/integration_test/integration_test_generator.rb +0 -16
  251. data/lib/rails_generator/generators/components/integration_test/templates/integration_test.rb +0 -10
  252. data/lib/rails_generator/generators/components/mailer/USAGE +0 -16
  253. data/lib/rails_generator/generators/components/mailer/mailer_generator.rb +0 -30
  254. data/lib/rails_generator/generators/components/mailer/templates/fixture.erb +0 -3
  255. data/lib/rails_generator/generators/components/mailer/templates/fixture.rhtml +0 -0
  256. data/lib/rails_generator/generators/components/mailer/templates/mailer.rb +0 -15
  257. data/lib/rails_generator/generators/components/mailer/templates/unit_test.rb +0 -20
  258. data/lib/rails_generator/generators/components/mailer/templates/view.erb +0 -3
  259. data/lib/rails_generator/generators/components/mailer/templates/view.rhtml +0 -0
  260. data/lib/rails_generator/generators/components/migration/USAGE +0 -29
  261. data/lib/rails_generator/generators/components/migration/migration_generator.rb +0 -20
  262. data/lib/rails_generator/generators/components/migration/templates/migration.rb +0 -11
  263. data/lib/rails_generator/generators/components/model/USAGE +0 -27
  264. data/lib/rails_generator/generators/components/model/model_generator.rb +0 -45
  265. data/lib/rails_generator/generators/components/model/templates/fixtures.yml +0 -19
  266. data/lib/rails_generator/generators/components/model/templates/migration.rb +0 -16
  267. data/lib/rails_generator/generators/components/model/templates/model.rb +0 -5
  268. data/lib/rails_generator/generators/components/model/templates/unit_test.rb +0 -8
  269. data/lib/rails_generator/generators/components/observer/USAGE +0 -13
  270. data/lib/rails_generator/generators/components/observer/observer_generator.rb +0 -16
  271. data/lib/rails_generator/generators/components/observer/templates/observer.rb +0 -2
  272. data/lib/rails_generator/generators/components/observer/templates/unit_test.rb +0 -8
  273. data/lib/rails_generator/generators/components/performance_test/USAGE +0 -8
  274. data/lib/rails_generator/generators/components/performance_test/performance_test_generator.rb +0 -16
  275. data/lib/rails_generator/generators/components/performance_test/templates/performance_test.rb +0 -9
  276. data/lib/rails_generator/generators/components/plugin/USAGE +0 -25
  277. data/lib/rails_generator/generators/components/plugin/plugin_generator.rb +0 -39
  278. data/lib/rails_generator/generators/components/plugin/templates/MIT-LICENSE +0 -20
  279. data/lib/rails_generator/generators/components/plugin/templates/README +0 -13
  280. data/lib/rails_generator/generators/components/plugin/templates/Rakefile +0 -23
  281. data/lib/rails_generator/generators/components/plugin/templates/USAGE +0 -8
  282. data/lib/rails_generator/generators/components/plugin/templates/generator.rb +0 -8
  283. data/lib/rails_generator/generators/components/plugin/templates/init.rb +0 -1
  284. data/lib/rails_generator/generators/components/plugin/templates/install.rb +0 -1
  285. data/lib/rails_generator/generators/components/plugin/templates/plugin.rb +0 -1
  286. data/lib/rails_generator/generators/components/plugin/templates/tasks.rake +0 -4
  287. data/lib/rails_generator/generators/components/plugin/templates/test_helper.rb +0 -3
  288. data/lib/rails_generator/generators/components/plugin/templates/uninstall.rb +0 -1
  289. data/lib/rails_generator/generators/components/plugin/templates/unit_test.rb +0 -8
  290. data/lib/rails_generator/generators/components/resource/USAGE +0 -23
  291. data/lib/rails_generator/generators/components/resource/resource_generator.rb +0 -74
  292. data/lib/rails_generator/generators/components/resource/templates/controller.rb +0 -2
  293. data/lib/rails_generator/generators/components/resource/templates/functional_test.rb +0 -8
  294. data/lib/rails_generator/generators/components/resource/templates/helper.rb +0 -2
  295. data/lib/rails_generator/generators/components/scaffold/USAGE +0 -29
  296. data/lib/rails_generator/generators/components/scaffold/scaffold_generator.rb +0 -100
  297. data/lib/rails_generator/generators/components/scaffold/templates/controller.rb +0 -85
  298. data/lib/rails_generator/generators/components/scaffold/templates/functional_test.rb +0 -45
  299. data/lib/rails_generator/generators/components/scaffold/templates/helper.rb +0 -2
  300. data/lib/rails_generator/generators/components/scaffold/templates/layout.html.erb +0 -17
  301. data/lib/rails_generator/generators/components/scaffold/templates/style.css +0 -54
  302. data/lib/rails_generator/generators/components/scaffold/templates/view_edit.html.erb +0 -18
  303. data/lib/rails_generator/generators/components/scaffold/templates/view_index.html.erb +0 -24
  304. data/lib/rails_generator/generators/components/scaffold/templates/view_new.html.erb +0 -17
  305. data/lib/rails_generator/generators/components/scaffold/templates/view_show.html.erb +0 -10
  306. data/lib/rails_generator/generators/components/session_migration/USAGE +0 -10
  307. data/lib/rails_generator/generators/components/session_migration/session_migration_generator.rb +0 -18
  308. data/lib/rails_generator/generators/components/session_migration/templates/migration.rb +0 -16
  309. data/lib/rails_generator/lookup.rb +0 -249
  310. data/lib/rails_generator/manifest.rb +0 -53
  311. data/lib/rails_generator/options.rb +0 -150
  312. data/lib/rails_generator/scripts.rb +0 -89
  313. data/lib/rails_generator/scripts/destroy.rb +0 -29
  314. data/lib/rails_generator/scripts/generate.rb +0 -7
  315. data/lib/rails_generator/scripts/update.rb +0 -12
  316. data/lib/rails_generator/secret_key_generator.rb +0 -22
  317. data/lib/rails_generator/simple_logger.rb +0 -46
  318. data/lib/rails_generator/spec.rb +0 -44
  319. data/lib/railties_path.rb +0 -1
  320. data/lib/ruby_version_check.rb +0 -17
  321. data/lib/rubyprof_ext.rb +0 -35
  322. data/lib/source_annotation_extractor.rb +0 -102
  323. data/lib/tasks/annotations.rake +0 -20
  324. data/lib/tasks/databases.rake +0 -416
  325. data/lib/tasks/documentation.rake +0 -95
  326. data/lib/tasks/framework.rake +0 -118
  327. data/lib/tasks/gems.rake +0 -80
  328. data/lib/tasks/log.rake +0 -9
  329. data/lib/tasks/misc.rake +0 -56
  330. data/lib/tasks/rails.rb +0 -8
  331. data/lib/tasks/routes.rake +0 -17
  332. data/lib/tasks/statistics.rake +0 -18
  333. data/lib/tasks/testing.rake +0 -139
  334. data/lib/tasks/tmp.rake +0 -37
  335. data/lib/test_help.rb +0 -27
  336. data/lib/webrick_server.rb +0 -156
@@ -1,59 +0,0 @@
1
- == Add a controller ==
2
-
3
- This section describes how to add a controller named 'woodpeckers' to your plugin that will behave the same as a controller in your main app. This is very similar to adding a model.
4
-
5
- You can test your plugin's controller as you would test any other controller:
6
-
7
- *vendor/plugins/yaffle/yaffle/woodpeckers_controller_test.rb:*
8
-
9
- [source, ruby]
10
- ----------------------------------------------
11
- require File.dirname(__FILE__) + '/test_helper.rb'
12
- require 'woodpeckers_controller'
13
- require 'action_controller/test_process'
14
-
15
- class WoodpeckersController; def rescue_action(e) raise e end; end
16
-
17
- class WoodpeckersControllerTest < Test::Unit::TestCase
18
- def setup
19
- @controller = WoodpeckersController.new
20
- @request = ActionController::TestRequest.new
21
- @response = ActionController::TestResponse.new
22
- end
23
-
24
- def test_index
25
- get :index
26
- assert_response :success
27
- end
28
- end
29
- ----------------------------------------------
30
-
31
- This is just a simple test to make sure the controller is being loaded correctly. After watching it fail with `rake`, you can make it pass like so:
32
-
33
- *vendor/plugins/yaffle/lib/yaffle.rb:*
34
-
35
- [source, ruby]
36
- ----------------------------------------------
37
- %w{ models controllers }.each do |dir|
38
- path = File.join(File.dirname(__FILE__), 'app', dir)
39
- $LOAD_PATH << path
40
- ActiveSupport::Dependencies.load_paths << path
41
- ActiveSupport::Dependencies.load_once_paths.delete(path)
42
- end
43
- ----------------------------------------------
44
-
45
-
46
- *vendor/plugins/yaffle/lib/app/controllers/woodpeckers_controller.rb:*
47
-
48
- [source, ruby]
49
- ----------------------------------------------
50
- class WoodpeckersController < ActionController::Base
51
-
52
- def index
53
- render :text => "Squawk!"
54
- end
55
-
56
- end
57
- ----------------------------------------------
58
-
59
- Now your test should be passing, and you should be able to use the Woodpeckers controller in your app. If you add a route for the woodpeckers controller you can start up your server and go to http://localhost:3000/woodpeckers to see your controller in action.
@@ -1,123 +0,0 @@
1
- == Extending core classes ==
2
-
3
- This section will explain how to add a method to String that will be available anywhere in your rails app by:
4
-
5
- * Writing tests for the desired behavior
6
- * Creating and requiring the correct files
7
-
8
- === Creating the test ===
9
-
10
- In this example you will add a method to String named `to_squawk`. To begin, create a new test file with a few assertions:
11
-
12
- *vendor/plugins/yaffle/test/core_ext_test.rb*
13
-
14
- [source, ruby]
15
- --------------------------------------------------------
16
- require File.dirname(__FILE__) + '/test_helper.rb'
17
-
18
- class CoreExtTest < Test::Unit::TestCase
19
- def test_to_squawk_prepends_the_word_squawk
20
- assert_equal "squawk! Hello World", "Hello World".to_squawk
21
- end
22
- end
23
- --------------------------------------------------------
24
-
25
- Navigate to your plugin directory and run `rake test`:
26
-
27
- --------------------------------------------------------
28
- cd vendor/plugins/yaffle
29
- rake test
30
- --------------------------------------------------------
31
-
32
- The test above should fail with the message:
33
-
34
- --------------------------------------------------------
35
- 1) Error:
36
- test_to_squawk_prepends_the_word_squawk(CoreExtTest):
37
- NoMethodError: undefined method `to_squawk' for "Hello World":String
38
- ./test/core_ext_test.rb:5:in `test_to_squawk_prepends_the_word_squawk'
39
- --------------------------------------------------------
40
-
41
- Great - now you are ready to start development.
42
-
43
- === Organize your files ===
44
-
45
- A common pattern in rails plugins is to set up the file structure like this:
46
-
47
- --------------------------------------------------------
48
- |-- lib
49
- | |-- yaffle
50
- | | `-- core_ext.rb
51
- | `-- yaffle.rb
52
- --------------------------------------------------------
53
-
54
- The first thing we need to to is to require our 'lib/yaffle.rb' file from 'rails/init.rb':
55
-
56
- *vendor/plugins/yaffle/rails/init.rb*
57
-
58
- [source, ruby]
59
- --------------------------------------------------------
60
- require 'yaffle'
61
- --------------------------------------------------------
62
-
63
- Then in 'lib/yaffle.rb' require 'lib/core_ext.rb':
64
-
65
- *vendor/plugins/yaffle/lib/yaffle.rb*
66
-
67
- [source, ruby]
68
- --------------------------------------------------------
69
- require "yaffle/core_ext"
70
- --------------------------------------------------------
71
-
72
- Finally, create the 'core_ext.rb' file and add the 'to_squawk' method:
73
-
74
- *vendor/plugins/yaffle/lib/yaffle/core_ext.rb*
75
-
76
- [source, ruby]
77
- --------------------------------------------------------
78
- String.class_eval do
79
- def to_squawk
80
- "squawk! #{self}".strip
81
- end
82
- end
83
- --------------------------------------------------------
84
-
85
- To test that your method does what it says it does, run the unit tests with `rake` from your plugin directory. To see this in action, fire up a console and start squawking:
86
-
87
- --------------------------------------------------------
88
- $ ./script/console
89
- >> "Hello World".to_squawk
90
- => "squawk! Hello World"
91
- --------------------------------------------------------
92
-
93
- === Working with init.rb ===
94
-
95
- When rails loads plugins it looks for the file named init.rb. However, when the plugin is initialized, 'init.rb' is invoked via `eval` (not `require`) so it has slightly different behavior.
96
-
97
- Under certain circumstances if you reopen classes or modules in 'init.rb' you may inadvertently create a new class, rather than reopening an existing class. A better alternative is to reopen the class in a different file, and require that file from `init.rb`, as shown above.
98
-
99
- If you must reopen a class in `init.rb` you can use `module_eval` or `class_eval` to avoid any issues:
100
-
101
- *vendor/plugins/yaffle/init.rb*
102
-
103
- [source, ruby]
104
- ---------------------------------------------------
105
- Hash.class_eval do
106
- def is_a_special_hash?
107
- true
108
- end
109
- end
110
- ---------------------------------------------------
111
-
112
- Another way is to explicitly define the top-level module space for all modules and classes, like `::Hash`:
113
-
114
- *vendor/plugins/yaffle/init.rb*
115
-
116
- [source, ruby]
117
- ---------------------------------------------------
118
- class ::Hash
119
- def is_a_special_hash?
120
- true
121
- end
122
- end
123
- ---------------------------------------------------
@@ -1,69 +0,0 @@
1
- == Add a Custom Route ==
2
-
3
- Testing routes in plugins can be complex, especially if the controllers are also in the plugin itself. Jamis Buck showed a great example of this in http://weblog.jamisbuck.org/2006/10/26/monkey-patching-rails-extending-routes-2.
4
-
5
- *vendor/plugins/yaffle/test/routing_test.rb*
6
-
7
- [source, ruby]
8
- --------------------------------------------------------
9
- require "#{File.dirname(__FILE__)}/test_helper"
10
-
11
- class RoutingTest < Test::Unit::TestCase
12
-
13
- def setup
14
- ActionController::Routing::Routes.draw do |map|
15
- map.yaffles
16
- end
17
- end
18
-
19
- def test_yaffles_route
20
- assert_recognition :get, "/yaffles", :controller => "yaffles_controller", :action => "index"
21
- end
22
-
23
- private
24
-
25
- # yes, I know about assert_recognizes, but it has proven problematic to
26
- # use in these tests, since it uses RouteSet#recognize (which actually
27
- # tries to instantiate the controller) and because it uses an awkward
28
- # parameter order.
29
- def assert_recognition(method, path, options)
30
- result = ActionController::Routing::Routes.recognize_path(path, :method => method)
31
- assert_equal options, result
32
- end
33
- end
34
- --------------------------------------------------------
35
-
36
- *vendor/plugins/yaffle/init.rb*
37
-
38
- [source, ruby]
39
- --------------------------------------------------------
40
- require "routing"
41
- ActionController::Routing::RouteSet::Mapper.send :include, Yaffle::Routing::MapperExtensions
42
- --------------------------------------------------------
43
-
44
- *vendor/plugins/yaffle/lib/routing.rb*
45
-
46
- [source, ruby]
47
- --------------------------------------------------------
48
- module Yaffle #:nodoc:
49
- module Routing #:nodoc:
50
- module MapperExtensions
51
- def yaffles
52
- @set.add_route("/yaffles", {:controller => "yaffles_controller", :action => "index"})
53
- end
54
- end
55
- end
56
- end
57
- --------------------------------------------------------
58
-
59
- *config/routes.rb*
60
-
61
- [source, ruby]
62
- --------------------------------------------------------
63
- ActionController::Routing::Routes.draw do |map|
64
- ...
65
- map.yaffles
66
- end
67
- --------------------------------------------------------
68
-
69
- You can also see if your routes work by running `rake routes` from your app directory.
@@ -1 +0,0 @@
1
- http://www.mbleigh.com/2008/6/11/gemplugins-a-brief-introduction-to-the-future-of-rails-plugins
@@ -1,89 +0,0 @@
1
- == Add a custom generator command ==
2
-
3
- You may have noticed above that you can used one of the built-in rails migration commands `migration_template`. If your plugin needs to add and remove lines of text from existing files you will need to write your own generator methods.
4
-
5
- This section describes how you you can create your own commands to add and remove a line of text from 'routes.rb'. This example creates a very simple method that adds or removes a text file.
6
-
7
- To start, add the following test method:
8
-
9
- *vendor/plugins/yaffle/test/generator_test.rb*
10
-
11
- [source, ruby]
12
- -----------------------------------------------------------
13
- def test_generates_definition
14
- Rails::Generator::Scripts::Generate.new.run(["yaffle", "bird"], :destination => fake_rails_root)
15
- definition = File.read(File.join(fake_rails_root, "definition.txt"))
16
- assert_match /Yaffle\:/, definition
17
- end
18
- -----------------------------------------------------------
19
-
20
- Run `rake` to watch the test fail, then make the test pass add the following:
21
-
22
- *vendor/plugins/yaffle/generators/yaffle/templates/definition.txt*
23
-
24
- -----------------------------------------------------------
25
- Yaffle: A bird
26
- -----------------------------------------------------------
27
-
28
- *vendor/plugins/yaffle/lib/yaffle.rb*
29
-
30
- [source, ruby]
31
- -----------------------------------------------------------
32
- require "yaffle/commands"
33
- -----------------------------------------------------------
34
-
35
- *vendor/plugins/yaffle/lib/commands.rb*
36
-
37
- [source, ruby]
38
- -----------------------------------------------------------
39
- require 'rails_generator'
40
- require 'rails_generator/commands'
41
-
42
- module Yaffle #:nodoc:
43
- module Generator #:nodoc:
44
- module Commands #:nodoc:
45
- module Create
46
- def yaffle_definition
47
- file("definition.txt", "definition.txt")
48
- end
49
- end
50
-
51
- module Destroy
52
- def yaffle_definition
53
- file("definition.txt", "definition.txt")
54
- end
55
- end
56
-
57
- module List
58
- def yaffle_definition
59
- file("definition.txt", "definition.txt")
60
- end
61
- end
62
-
63
- module Update
64
- def yaffle_definition
65
- file("definition.txt", "definition.txt")
66
- end
67
- end
68
- end
69
- end
70
- end
71
-
72
- Rails::Generator::Commands::Create.send :include, Yaffle::Generator::Commands::Create
73
- Rails::Generator::Commands::Destroy.send :include, Yaffle::Generator::Commands::Destroy
74
- Rails::Generator::Commands::List.send :include, Yaffle::Generator::Commands::List
75
- Rails::Generator::Commands::Update.send :include, Yaffle::Generator::Commands::Update
76
- -----------------------------------------------------------
77
-
78
- Finally, call your new method in the manifest:
79
-
80
- *vendor/plugins/yaffle/generators/yaffle/yaffle_generator.rb*
81
-
82
- [source, ruby]
83
- -----------------------------------------------------------
84
- class YaffleGenerator < Rails::Generator::NamedBase
85
- def manifest
86
- m.yaffle_definition
87
- end
88
- end
89
- -----------------------------------------------------------
@@ -1,51 +0,0 @@
1
- == Add a helper ==
2
-
3
- This section describes how to add a helper named 'WoodpeckersHelper' to your plugin that will behave the same as a helper in your main app. This is very similar to adding a model and a controller.
4
-
5
- You can test your plugin's helper as you would test any other helper:
6
-
7
- *vendor/plugins/yaffle/test/woodpeckers_helper_test.rb*
8
-
9
- [source, ruby]
10
- ---------------------------------------------------------------
11
- require File.dirname(__FILE__) + '/test_helper.rb'
12
- include WoodpeckersHelper
13
-
14
- class WoodpeckersHelperTest < Test::Unit::TestCase
15
- def test_tweet
16
- assert_equal "Tweet! Hello", tweet("Hello")
17
- end
18
- end
19
- ---------------------------------------------------------------
20
-
21
- This is just a simple test to make sure the helper is being loaded correctly. After watching it fail with `rake`, you can make it pass like so:
22
-
23
- *vendor/plugins/yaffle/lib/yaffle.rb:*
24
-
25
- [source, ruby]
26
- ----------------------------------------------
27
- %w{ models controllers helpers }.each do |dir|
28
- path = File.join(File.dirname(__FILE__), 'app', dir)
29
- $LOAD_PATH << path
30
- ActiveSupport::Dependencies.load_paths << path
31
- ActiveSupport::Dependencies.load_once_paths.delete(path)
32
- end
33
-
34
- ActionView::Base.send :include, WoodpeckersHelper
35
- ----------------------------------------------
36
-
37
-
38
- *vendor/plugins/yaffle/lib/app/helpers/woodpeckers_helper.rb:*
39
-
40
- [source, ruby]
41
- ----------------------------------------------
42
- module WoodpeckersHelper
43
-
44
- def tweet(text)
45
- "Tweet! #{text}"
46
- end
47
-
48
- end
49
- ----------------------------------------------
50
-
51
- Now your test should be passing, and you should be able to use the Woodpeckers helper in your app.
@@ -1,52 +0,0 @@
1
- The Basics of Creating Rails Plugins
2
- ====================================
3
-
4
- A Rails plugin is either an extension or a modification of the core framework. Plugins provide:
5
-
6
- * a way for developers to share bleeding-edge ideas without hurting the stable code base
7
- * a segmented architecture so that units of code can be fixed or updated on their own release schedule
8
- * an outlet for the core developers so that they don’t have to include every cool new feature under the sun
9
-
10
- After reading this guide you should be familiar with:
11
-
12
- * Creating a plugin from scratch
13
- * Writing and running tests for the plugin
14
- * Storing models, views, controllers, helpers and even other plugins in your plugins
15
- * Writing generators
16
- * Writing custom Rake tasks in your plugin
17
- * Generating RDoc documentation for your plugin
18
- * Avoiding common pitfalls with 'init.rb'
19
-
20
- This guide describes how to build a test-driven plugin that will:
21
-
22
- * Extend core ruby classes like Hash and String
23
- * Add methods to ActiveRecord::Base in the tradition of the 'acts_as' plugins
24
- * Add a view helper that can be used in erb templates
25
- * Add a new generator that will generate a migration
26
- * Add a custom generator command
27
- * A custom route method that can be used in routes.rb
28
-
29
- For the purpose of this guide pretend for a moment that you are an avid bird watcher. Your favorite bird is the Yaffle, and you want to create a plugin that allows other developers to share in the Yaffle goodness. First, you need to get setup for development.
30
-
31
-
32
- include::test_setup.txt[]
33
-
34
- include::core_ext.txt[]
35
-
36
- include::acts_as_yaffle.txt[]
37
-
38
- include::migration_generator.txt[]
39
-
40
- include::generator_method.txt[]
41
-
42
- include::models.txt[]
43
-
44
- include::controllers.txt[]
45
-
46
- include::helpers.txt[]
47
-
48
- include::custom_route.txt[]
49
-
50
- include::odds_and_ends.txt[]
51
-
52
- include::appendix.txt[]