rails 4.1.4 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (284) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +24 -18
  3. metadata +51 -304
  4. data/guides/CHANGELOG.md +0 -41
  5. data/guides/Rakefile +0 -77
  6. data/guides/assets/images/akshaysurve.jpg +0 -0
  7. data/guides/assets/images/belongs_to.png +0 -0
  8. data/guides/assets/images/book_icon.gif +0 -0
  9. data/guides/assets/images/bullet.gif +0 -0
  10. data/guides/assets/images/chapters_icon.gif +0 -0
  11. data/guides/assets/images/check_bullet.gif +0 -0
  12. data/guides/assets/images/credits_pic_blank.gif +0 -0
  13. data/guides/assets/images/csrf.png +0 -0
  14. data/guides/assets/images/edge_badge.png +0 -0
  15. data/guides/assets/images/favicon.ico +0 -0
  16. data/guides/assets/images/feature_tile.gif +0 -0
  17. data/guides/assets/images/footer_tile.gif +0 -0
  18. data/guides/assets/images/fxn.png +0 -0
  19. data/guides/assets/images/getting_started/article_with_comments.png +0 -0
  20. data/guides/assets/images/getting_started/challenge.png +0 -0
  21. data/guides/assets/images/getting_started/confirm_dialog.png +0 -0
  22. data/guides/assets/images/getting_started/forbidden_attributes_for_new_article.png +0 -0
  23. data/guides/assets/images/getting_started/form_with_errors.png +0 -0
  24. data/guides/assets/images/getting_started/index_action_with_edit_link.png +0 -0
  25. data/guides/assets/images/getting_started/new_article.png +0 -0
  26. data/guides/assets/images/getting_started/rails_welcome.png +0 -0
  27. data/guides/assets/images/getting_started/routing_error_no_controller.png +0 -0
  28. data/guides/assets/images/getting_started/routing_error_no_route_matches.png +0 -0
  29. data/guides/assets/images/getting_started/show_action_for_articles.png +0 -0
  30. data/guides/assets/images/getting_started/template_is_missing_articles_new.png +0 -0
  31. data/guides/assets/images/getting_started/unknown_action_create_for_articles.png +0 -0
  32. data/guides/assets/images/getting_started/unknown_action_new_for_articles.png +0 -0
  33. data/guides/assets/images/grey_bullet.gif +0 -0
  34. data/guides/assets/images/habtm.png +0 -0
  35. data/guides/assets/images/has_many.png +0 -0
  36. data/guides/assets/images/has_many_through.png +0 -0
  37. data/guides/assets/images/has_one.png +0 -0
  38. data/guides/assets/images/has_one_through.png +0 -0
  39. data/guides/assets/images/header_backdrop.png +0 -0
  40. data/guides/assets/images/header_tile.gif +0 -0
  41. data/guides/assets/images/i18n/demo_html_safe.png +0 -0
  42. data/guides/assets/images/i18n/demo_localized_pirate.png +0 -0
  43. data/guides/assets/images/i18n/demo_translated_en.png +0 -0
  44. data/guides/assets/images/i18n/demo_translated_pirate.png +0 -0
  45. data/guides/assets/images/i18n/demo_translation_missing.png +0 -0
  46. data/guides/assets/images/i18n/demo_untranslated.png +0 -0
  47. data/guides/assets/images/icons/README +0 -5
  48. data/guides/assets/images/icons/callouts/1.png +0 -0
  49. data/guides/assets/images/icons/callouts/10.png +0 -0
  50. data/guides/assets/images/icons/callouts/11.png +0 -0
  51. data/guides/assets/images/icons/callouts/12.png +0 -0
  52. data/guides/assets/images/icons/callouts/13.png +0 -0
  53. data/guides/assets/images/icons/callouts/14.png +0 -0
  54. data/guides/assets/images/icons/callouts/15.png +0 -0
  55. data/guides/assets/images/icons/callouts/2.png +0 -0
  56. data/guides/assets/images/icons/callouts/3.png +0 -0
  57. data/guides/assets/images/icons/callouts/4.png +0 -0
  58. data/guides/assets/images/icons/callouts/5.png +0 -0
  59. data/guides/assets/images/icons/callouts/6.png +0 -0
  60. data/guides/assets/images/icons/callouts/7.png +0 -0
  61. data/guides/assets/images/icons/callouts/8.png +0 -0
  62. data/guides/assets/images/icons/callouts/9.png +0 -0
  63. data/guides/assets/images/icons/caution.png +0 -0
  64. data/guides/assets/images/icons/example.png +0 -0
  65. data/guides/assets/images/icons/home.png +0 -0
  66. data/guides/assets/images/icons/important.png +0 -0
  67. data/guides/assets/images/icons/next.png +0 -0
  68. data/guides/assets/images/icons/note.png +0 -0
  69. data/guides/assets/images/icons/prev.png +0 -0
  70. data/guides/assets/images/icons/tip.png +0 -0
  71. data/guides/assets/images/icons/up.png +0 -0
  72. data/guides/assets/images/icons/warning.png +0 -0
  73. data/guides/assets/images/nav_arrow.gif +0 -0
  74. data/guides/assets/images/oscardelben.jpg +0 -0
  75. data/guides/assets/images/polymorphic.png +0 -0
  76. data/guides/assets/images/radar.png +0 -0
  77. data/guides/assets/images/rails4_features.png +0 -0
  78. data/guides/assets/images/rails_guides_kindle_cover.jpg +0 -0
  79. data/guides/assets/images/rails_guides_logo.gif +0 -0
  80. data/guides/assets/images/rails_logo_remix.gif +0 -0
  81. data/guides/assets/images/session_fixation.png +0 -0
  82. data/guides/assets/images/tab_grey.gif +0 -0
  83. data/guides/assets/images/tab_info.gif +0 -0
  84. data/guides/assets/images/tab_note.gif +0 -0
  85. data/guides/assets/images/tab_red.gif +0 -0
  86. data/guides/assets/images/tab_yellow.gif +0 -0
  87. data/guides/assets/images/tab_yellow.png +0 -0
  88. data/guides/assets/images/vijaydev.jpg +0 -0
  89. data/guides/assets/javascripts/guides.js +0 -53
  90. data/guides/assets/javascripts/jquery.min.js +0 -4
  91. data/guides/assets/javascripts/responsive-tables.js +0 -43
  92. data/guides/assets/javascripts/syntaxhighlighter/shBrushAS3.js +0 -59
  93. data/guides/assets/javascripts/syntaxhighlighter/shBrushAppleScript.js +0 -75
  94. data/guides/assets/javascripts/syntaxhighlighter/shBrushBash.js +0 -59
  95. data/guides/assets/javascripts/syntaxhighlighter/shBrushCSharp.js +0 -65
  96. data/guides/assets/javascripts/syntaxhighlighter/shBrushColdFusion.js +0 -100
  97. data/guides/assets/javascripts/syntaxhighlighter/shBrushCpp.js +0 -97
  98. data/guides/assets/javascripts/syntaxhighlighter/shBrushCss.js +0 -91
  99. data/guides/assets/javascripts/syntaxhighlighter/shBrushDelphi.js +0 -55
  100. data/guides/assets/javascripts/syntaxhighlighter/shBrushDiff.js +0 -41
  101. data/guides/assets/javascripts/syntaxhighlighter/shBrushErlang.js +0 -52
  102. data/guides/assets/javascripts/syntaxhighlighter/shBrushGroovy.js +0 -67
  103. data/guides/assets/javascripts/syntaxhighlighter/shBrushJScript.js +0 -52
  104. data/guides/assets/javascripts/syntaxhighlighter/shBrushJava.js +0 -57
  105. data/guides/assets/javascripts/syntaxhighlighter/shBrushJavaFX.js +0 -58
  106. data/guides/assets/javascripts/syntaxhighlighter/shBrushPerl.js +0 -72
  107. data/guides/assets/javascripts/syntaxhighlighter/shBrushPhp.js +0 -88
  108. data/guides/assets/javascripts/syntaxhighlighter/shBrushPlain.js +0 -33
  109. data/guides/assets/javascripts/syntaxhighlighter/shBrushPowerShell.js +0 -74
  110. data/guides/assets/javascripts/syntaxhighlighter/shBrushPython.js +0 -64
  111. data/guides/assets/javascripts/syntaxhighlighter/shBrushRuby.js +0 -55
  112. data/guides/assets/javascripts/syntaxhighlighter/shBrushSass.js +0 -94
  113. data/guides/assets/javascripts/syntaxhighlighter/shBrushScala.js +0 -51
  114. data/guides/assets/javascripts/syntaxhighlighter/shBrushSql.js +0 -66
  115. data/guides/assets/javascripts/syntaxhighlighter/shBrushVb.js +0 -56
  116. data/guides/assets/javascripts/syntaxhighlighter/shBrushXml.js +0 -69
  117. data/guides/assets/javascripts/syntaxhighlighter/shCore.js +0 -17
  118. data/guides/assets/stylesheets/fixes.css +0 -16
  119. data/guides/assets/stylesheets/kindle.css +0 -11
  120. data/guides/assets/stylesheets/main.css +0 -710
  121. data/guides/assets/stylesheets/print.css +0 -52
  122. data/guides/assets/stylesheets/reset.css +0 -43
  123. data/guides/assets/stylesheets/responsive-tables.css +0 -50
  124. data/guides/assets/stylesheets/style.css +0 -13
  125. data/guides/assets/stylesheets/syntaxhighlighter/shCore.css +0 -226
  126. data/guides/assets/stylesheets/syntaxhighlighter/shCoreDefault.css +0 -328
  127. data/guides/assets/stylesheets/syntaxhighlighter/shCoreDjango.css +0 -331
  128. data/guides/assets/stylesheets/syntaxhighlighter/shCoreEclipse.css +0 -339
  129. data/guides/assets/stylesheets/syntaxhighlighter/shCoreEmacs.css +0 -324
  130. data/guides/assets/stylesheets/syntaxhighlighter/shCoreFadeToGrey.css +0 -328
  131. data/guides/assets/stylesheets/syntaxhighlighter/shCoreMDUltra.css +0 -324
  132. data/guides/assets/stylesheets/syntaxhighlighter/shCoreMidnight.css +0 -324
  133. data/guides/assets/stylesheets/syntaxhighlighter/shCoreRDark.css +0 -324
  134. data/guides/assets/stylesheets/syntaxhighlighter/shThemeDefault.css +0 -117
  135. data/guides/assets/stylesheets/syntaxhighlighter/shThemeDjango.css +0 -120
  136. data/guides/assets/stylesheets/syntaxhighlighter/shThemeEclipse.css +0 -128
  137. data/guides/assets/stylesheets/syntaxhighlighter/shThemeEmacs.css +0 -113
  138. data/guides/assets/stylesheets/syntaxhighlighter/shThemeFadeToGrey.css +0 -117
  139. data/guides/assets/stylesheets/syntaxhighlighter/shThemeMDUltra.css +0 -113
  140. data/guides/assets/stylesheets/syntaxhighlighter/shThemeMidnight.css +0 -113
  141. data/guides/assets/stylesheets/syntaxhighlighter/shThemeRDark.css +0 -113
  142. data/guides/assets/stylesheets/syntaxhighlighter/shThemeRailsGuides.css +0 -116
  143. data/guides/bug_report_templates/action_controller_gem.rb +0 -47
  144. data/guides/bug_report_templates/action_controller_master.rb +0 -53
  145. data/guides/bug_report_templates/active_record_gem.rb +0 -40
  146. data/guides/bug_report_templates/active_record_master.rb +0 -49
  147. data/guides/code/getting_started/Gemfile +0 -40
  148. data/guides/code/getting_started/Gemfile.lock +0 -125
  149. data/guides/code/getting_started/README.rdoc +0 -28
  150. data/guides/code/getting_started/Rakefile +0 -6
  151. data/guides/code/getting_started/app/assets/javascripts/application.js +0 -15
  152. data/guides/code/getting_started/app/assets/javascripts/comments.js.coffee +0 -3
  153. data/guides/code/getting_started/app/assets/javascripts/posts.js.coffee +0 -3
  154. data/guides/code/getting_started/app/assets/javascripts/welcome.js.coffee +0 -3
  155. data/guides/code/getting_started/app/assets/stylesheets/application.css +0 -13
  156. data/guides/code/getting_started/app/assets/stylesheets/comments.css.scss +0 -3
  157. data/guides/code/getting_started/app/assets/stylesheets/posts.css.scss +0 -3
  158. data/guides/code/getting_started/app/assets/stylesheets/welcome.css.scss +0 -3
  159. data/guides/code/getting_started/app/controllers/application_controller.rb +0 -5
  160. data/guides/code/getting_started/app/controllers/comments_controller.rb +0 -23
  161. data/guides/code/getting_started/app/controllers/posts_controller.rb +0 -53
  162. data/guides/code/getting_started/app/controllers/welcome_controller.rb +0 -4
  163. data/guides/code/getting_started/app/helpers/application_helper.rb +0 -2
  164. data/guides/code/getting_started/app/helpers/comments_helper.rb +0 -2
  165. data/guides/code/getting_started/app/helpers/posts_helper.rb +0 -2
  166. data/guides/code/getting_started/app/helpers/welcome_helper.rb +0 -2
  167. data/guides/code/getting_started/app/models/comment.rb +0 -3
  168. data/guides/code/getting_started/app/models/post.rb +0 -7
  169. data/guides/code/getting_started/app/views/comments/_comment.html.erb +0 -15
  170. data/guides/code/getting_started/app/views/comments/_form.html.erb +0 -13
  171. data/guides/code/getting_started/app/views/layouts/application.html.erb +0 -14
  172. data/guides/code/getting_started/app/views/posts/_form.html.erb +0 -27
  173. data/guides/code/getting_started/app/views/posts/edit.html.erb +0 -5
  174. data/guides/code/getting_started/app/views/posts/index.html.erb +0 -21
  175. data/guides/code/getting_started/app/views/posts/new.html.erb +0 -5
  176. data/guides/code/getting_started/app/views/posts/show.html.erb +0 -18
  177. data/guides/code/getting_started/app/views/welcome/index.html.erb +0 -4
  178. data/guides/code/getting_started/bin/bundle +0 -4
  179. data/guides/code/getting_started/bin/rails +0 -4
  180. data/guides/code/getting_started/bin/rake +0 -4
  181. data/guides/code/getting_started/config/application.rb +0 -18
  182. data/guides/code/getting_started/config/boot.rb +0 -4
  183. data/guides/code/getting_started/config/database.yml +0 -25
  184. data/guides/code/getting_started/config/environment.rb +0 -5
  185. data/guides/code/getting_started/config/environments/development.rb +0 -30
  186. data/guides/code/getting_started/config/environments/production.rb +0 -80
  187. data/guides/code/getting_started/config/environments/test.rb +0 -36
  188. data/guides/code/getting_started/config/initializers/backtrace_silencers.rb +0 -7
  189. data/guides/code/getting_started/config/initializers/filter_parameter_logging.rb +0 -4
  190. data/guides/code/getting_started/config/initializers/inflections.rb +0 -16
  191. data/guides/code/getting_started/config/initializers/locale.rb +0 -9
  192. data/guides/code/getting_started/config/initializers/mime_types.rb +0 -5
  193. data/guides/code/getting_started/config/initializers/secret_token.rb +0 -12
  194. data/guides/code/getting_started/config/initializers/session_store.rb +0 -3
  195. data/guides/code/getting_started/config/initializers/wrap_parameters.rb +0 -14
  196. data/guides/code/getting_started/config/locales/en.yml +0 -23
  197. data/guides/code/getting_started/config/routes.rb +0 -7
  198. data/guides/code/getting_started/config.ru +0 -4
  199. data/guides/code/getting_started/db/migrate/20130122042648_create_posts.rb +0 -10
  200. data/guides/code/getting_started/db/migrate/20130122045842_create_comments.rb +0 -11
  201. data/guides/code/getting_started/db/schema.rb +0 -33
  202. data/guides/code/getting_started/db/seeds.rb +0 -7
  203. data/guides/code/getting_started/public/404.html +0 -60
  204. data/guides/code/getting_started/public/422.html +0 -60
  205. data/guides/code/getting_started/public/500.html +0 -59
  206. data/guides/code/getting_started/public/favicon.ico +0 -0
  207. data/guides/code/getting_started/public/robots.txt +0 -5
  208. data/guides/code/getting_started/test/controllers/comments_controller_test.rb +0 -7
  209. data/guides/code/getting_started/test/controllers/posts_controller_test.rb +0 -7
  210. data/guides/code/getting_started/test/controllers/welcome_controller_test.rb +0 -9
  211. data/guides/code/getting_started/test/fixtures/comments.yml +0 -11
  212. data/guides/code/getting_started/test/fixtures/posts.yml +0 -9
  213. data/guides/code/getting_started/test/helpers/comments_helper_test.rb +0 -4
  214. data/guides/code/getting_started/test/helpers/posts_helper_test.rb +0 -4
  215. data/guides/code/getting_started/test/helpers/welcome_helper_test.rb +0 -4
  216. data/guides/code/getting_started/test/models/comment_test.rb +0 -7
  217. data/guides/code/getting_started/test/models/post_test.rb +0 -7
  218. data/guides/code/getting_started/test/test_helper.rb +0 -12
  219. data/guides/rails_guides/generator.rb +0 -248
  220. data/guides/rails_guides/helpers.rb +0 -53
  221. data/guides/rails_guides/indexer.rb +0 -68
  222. data/guides/rails_guides/kindle.rb +0 -119
  223. data/guides/rails_guides/levenshtein.rb +0 -31
  224. data/guides/rails_guides/markdown/renderer.rb +0 -82
  225. data/guides/rails_guides/markdown.rb +0 -163
  226. data/guides/rails_guides.rb +0 -63
  227. data/guides/source/2_2_release_notes.md +0 -435
  228. data/guides/source/2_3_release_notes.md +0 -621
  229. data/guides/source/3_0_release_notes.md +0 -611
  230. data/guides/source/3_1_release_notes.md +0 -556
  231. data/guides/source/3_2_release_notes.md +0 -565
  232. data/guides/source/4_0_release_notes.md +0 -276
  233. data/guides/source/4_1_release_notes.md +0 -731
  234. data/guides/source/_license.html.erb +0 -2
  235. data/guides/source/_welcome.html.erb +0 -25
  236. data/guides/source/action_controller_overview.md +0 -1175
  237. data/guides/source/action_mailer_basics.md +0 -689
  238. data/guides/source/action_view_overview.md +0 -1610
  239. data/guides/source/active_model_basics.md +0 -200
  240. data/guides/source/active_record_basics.md +0 -373
  241. data/guides/source/active_record_callbacks.md +0 -410
  242. data/guides/source/active_record_querying.md +0 -1773
  243. data/guides/source/active_record_validations.md +0 -1169
  244. data/guides/source/active_support_core_extensions.md +0 -3864
  245. data/guides/source/active_support_instrumentation.md +0 -496
  246. data/guides/source/api_documentation_guidelines.md +0 -315
  247. data/guides/source/asset_pipeline.md +0 -1163
  248. data/guides/source/association_basics.md +0 -2229
  249. data/guides/source/caching_with_rails.md +0 -354
  250. data/guides/source/command_line.md +0 -603
  251. data/guides/source/configuring.md +0 -942
  252. data/guides/source/contributing_to_ruby_on_rails.md +0 -544
  253. data/guides/source/credits.html.erb +0 -80
  254. data/guides/source/debugging_rails_applications.md +0 -707
  255. data/guides/source/development_dependencies_install.md +0 -278
  256. data/guides/source/documents.yaml +0 -193
  257. data/guides/source/engines.md +0 -1391
  258. data/guides/source/form_helpers.md +0 -1001
  259. data/guides/source/generators.md +0 -663
  260. data/guides/source/getting_started.md +0 -1947
  261. data/guides/source/i18n.md +0 -1043
  262. data/guides/source/index.html.erb +0 -27
  263. data/guides/source/initialization.md +0 -657
  264. data/guides/source/kindle/copyright.html.erb +0 -1
  265. data/guides/source/kindle/layout.html.erb +0 -27
  266. data/guides/source/kindle/rails_guides.opf.erb +0 -52
  267. data/guides/source/kindle/toc.html.erb +0 -24
  268. data/guides/source/kindle/toc.ncx.erb +0 -64
  269. data/guides/source/kindle/welcome.html.erb +0 -5
  270. data/guides/source/layout.html.erb +0 -146
  271. data/guides/source/layouts_and_rendering.md +0 -1226
  272. data/guides/source/maintenance_policy.md +0 -56
  273. data/guides/source/migrations.md +0 -1109
  274. data/guides/source/nested_model_forms.md +0 -225
  275. data/guides/source/plugins.md +0 -444
  276. data/guides/source/rails_application_templates.md +0 -248
  277. data/guides/source/rails_on_rack.md +0 -333
  278. data/guides/source/routing.md +0 -1115
  279. data/guides/source/ruby_on_rails_guides_guidelines.md +0 -128
  280. data/guides/source/security.md +0 -1018
  281. data/guides/source/testing.md +0 -1052
  282. data/guides/source/upgrading_ruby_on_rails.md +0 -899
  283. data/guides/source/working_with_javascript_in_rails.md +0 -405
  284. data/guides/w3c_validator.rb +0 -95
@@ -1,496 +0,0 @@
1
- Active Support Instrumentation
2
- ==============================
3
-
4
- Active Support is a part of core Rails that provides Ruby language extensions, utilities and other things. One of the things it includes is an instrumentation API that can be used inside an application to measure certain actions that occur within Ruby code, such as that inside a Rails application or the framework itself. It is not limited to Rails, however. It can be used independently in other Ruby scripts if it is so desired.
5
-
6
- In this guide, you will learn how to use the instrumentation API inside of Active Support to measure events inside of Rails and other Ruby code.
7
-
8
- After reading this guide, you will know:
9
-
10
- * What instrumentation can provide.
11
- * The hooks inside the Rails framework for instrumentation.
12
- * Adding a subscriber to a hook.
13
- * Building a custom instrumentation implementation.
14
-
15
- --------------------------------------------------------------------------------
16
-
17
- Introduction to instrumentation
18
- -------------------------------
19
-
20
- The instrumentation API provided by Active Support allows developers to provide hooks which other developers may hook into. There are several of these within the Rails framework, as described below in <TODO: link to section detailing each hook point>. With this API, developers can choose to be notified when certain events occur inside their application or another piece of Ruby code.
21
-
22
- For example, there is a hook provided within Active Record that is called every time Active Record uses an SQL query on a database. This hook could be **subscribed** to, and used to track the number of queries during a certain action. There's another hook around the processing of an action of a controller. This could be used, for instance, to track how long a specific action has taken.
23
-
24
- You are even able to create your own events inside your application which you can later subscribe to.
25
-
26
- Rails framework hooks
27
- ---------------------
28
-
29
- Within the Ruby on Rails framework, there are a number of hooks provided for common events. These are detailed below.
30
-
31
- Action Controller
32
- -----------------
33
-
34
- ### write_fragment.action_controller
35
-
36
- | Key | Value |
37
- | ------ | ---------------- |
38
- | `:key` | The complete key |
39
-
40
- ```ruby
41
- {
42
- key: 'posts/1-dashboard-view'
43
- }
44
- ```
45
-
46
- ### read_fragment.action_controller
47
-
48
- | Key | Value |
49
- | ------ | ---------------- |
50
- | `:key` | The complete key |
51
-
52
- ```ruby
53
- {
54
- key: 'posts/1-dashboard-view'
55
- }
56
- ```
57
-
58
- ### expire_fragment.action_controller
59
-
60
- | Key | Value |
61
- | ------ | ---------------- |
62
- | `:key` | The complete key |
63
-
64
- ```ruby
65
- {
66
- key: 'posts/1-dashboard-view'
67
- }
68
- ```
69
-
70
- ### exist_fragment?.action_controller
71
-
72
- | Key | Value |
73
- | ------ | ---------------- |
74
- | `:key` | The complete key |
75
-
76
- ```ruby
77
- {
78
- key: 'posts/1-dashboard-view'
79
- }
80
- ```
81
-
82
- ### write_page.action_controller
83
-
84
- | Key | Value |
85
- | ------- | ----------------- |
86
- | `:path` | The complete path |
87
-
88
- ```ruby
89
- {
90
- path: '/users/1'
91
- }
92
- ```
93
-
94
- ### expire_page.action_controller
95
-
96
- | Key | Value |
97
- | ------- | ----------------- |
98
- | `:path` | The complete path |
99
-
100
- ```ruby
101
- {
102
- path: '/users/1'
103
- }
104
- ```
105
-
106
- ### start_processing.action_controller
107
-
108
- | Key | Value |
109
- | ------------- | --------------------------------------------------------- |
110
- | `:controller` | The controller name |
111
- | `:action` | The action |
112
- | `:params` | Hash of request parameters without any filtered parameter |
113
- | `:format` | html/js/json/xml etc |
114
- | `:method` | HTTP request verb |
115
- | `:path` | Request path |
116
-
117
- ```ruby
118
- {
119
- controller: "PostsController",
120
- action: "new",
121
- params: { "action" => "new", "controller" => "posts" },
122
- format: :html,
123
- method: "GET",
124
- path: "/posts/new"
125
- }
126
- ```
127
-
128
- ### process_action.action_controller
129
-
130
- | Key | Value |
131
- | --------------- | --------------------------------------------------------- |
132
- | `:controller` | The controller name |
133
- | `:action` | The action |
134
- | `:params` | Hash of request parameters without any filtered parameter |
135
- | `:format` | html/js/json/xml etc |
136
- | `:method` | HTTP request verb |
137
- | `:path` | Request path |
138
- | `:view_runtime` | Amount spent in view in ms |
139
-
140
- ```ruby
141
- {
142
- controller: "PostsController",
143
- action: "index",
144
- params: {"action" => "index", "controller" => "posts"},
145
- format: :html,
146
- method: "GET",
147
- path: "/posts",
148
- status: 200,
149
- view_runtime: 46.848,
150
- db_runtime: 0.157
151
- }
152
- ```
153
-
154
- ### send_file.action_controller
155
-
156
- | Key | Value |
157
- | ------- | ------------------------- |
158
- | `:path` | Complete path to the file |
159
-
160
- INFO. Additional keys may be added by the caller.
161
-
162
- ### send_data.action_controller
163
-
164
- `ActionController` does not had any specific information to the payload. All options are passed through to the payload.
165
-
166
- ### redirect_to.action_controller
167
-
168
- | Key | Value |
169
- | ----------- | ------------------ |
170
- | `:status` | HTTP response code |
171
- | `:location` | URL to redirect to |
172
-
173
- ```ruby
174
- {
175
- status: 302,
176
- location: "http://localhost:3000/posts/new"
177
- }
178
- ```
179
-
180
- ### halted_callback.action_controller
181
-
182
- | Key | Value |
183
- | --------- | ----------------------------- |
184
- | `:filter` | Filter that halted the action |
185
-
186
- ```ruby
187
- {
188
- filter: ":halting_filter"
189
- }
190
- ```
191
-
192
- Action View
193
- -----------
194
-
195
- ### render_template.action_view
196
-
197
- | Key | Value |
198
- | ------------- | --------------------- |
199
- | `:identifier` | Full path to template |
200
- | `:layout` | Applicable layout |
201
-
202
- ```ruby
203
- {
204
- identifier: "/Users/adam/projects/notifications/app/views/posts/index.html.erb",
205
- layout: "layouts/application"
206
- }
207
- ```
208
-
209
- ### render_partial.action_view
210
-
211
- | Key | Value |
212
- | ------------- | --------------------- |
213
- | `:identifier` | Full path to template |
214
-
215
- ```ruby
216
- {
217
- identifier: "/Users/adam/projects/notifications/app/views/posts/_form.html.erb",
218
- }
219
- ```
220
-
221
- Active Record
222
- ------------
223
-
224
- ### sql.active_record
225
-
226
- | Key | Value |
227
- | ------------ | --------------------- |
228
- | `:sql` | SQL statement |
229
- | `:name` | Name of the operation |
230
- | `:object_id` | `self.object_id` |
231
-
232
- INFO. The adapters will add their own data as well.
233
-
234
- ```ruby
235
- {
236
- sql: "SELECT \"posts\".* FROM \"posts\" ",
237
- name: "Post Load",
238
- connection_id: 70307250813140,
239
- binds: []
240
- }
241
- ```
242
-
243
- ### identity.active_record
244
-
245
- | Key | Value |
246
- | ---------------- | ----------------------------------------- |
247
- | `:line` | Primary Key of object in the identity map |
248
- | `:name` | Record's class |
249
- | `:connection_id` | `self.object_id` |
250
-
251
- Action Mailer
252
- -------------
253
-
254
- ### receive.action_mailer
255
-
256
- | Key | Value |
257
- | ------------- | -------------------------------------------- |
258
- | `:mailer` | Name of the mailer class |
259
- | `:message_id` | ID of the message, generated by the Mail gem |
260
- | `:subject` | Subject of the mail |
261
- | `:to` | To address(es) of the mail |
262
- | `:from` | From address of the mail |
263
- | `:bcc` | BCC addresses of the mail |
264
- | `:cc` | CC addresses of the mail |
265
- | `:date` | Date of the mail |
266
- | `:mail` | The encoded form of the mail |
267
-
268
- ```ruby
269
- {
270
- mailer: "Notification",
271
- message_id: "4f5b5491f1774_181b23fc3d4434d38138e5@mba.local.mail",
272
- subject: "Rails Guides",
273
- to: ["users@rails.com", "ddh@rails.com"],
274
- from: ["me@rails.com"],
275
- date: Sat, 10 Mar 2012 14:18:09 +0100,
276
- mail: "..." # omitted for brevity
277
- }
278
- ```
279
-
280
- ### deliver.action_mailer
281
-
282
- | Key | Value |
283
- | ------------- | -------------------------------------------- |
284
- | `:mailer` | Name of the mailer class |
285
- | `:message_id` | ID of the message, generated by the Mail gem |
286
- | `:subject` | Subject of the mail |
287
- | `:to` | To address(es) of the mail |
288
- | `:from` | From address of the mail |
289
- | `:bcc` | BCC addresses of the mail |
290
- | `:cc` | CC addresses of the mail |
291
- | `:date` | Date of the mail |
292
- | `:mail` | The encoded form of the mail |
293
-
294
- ```ruby
295
- {
296
- mailer: "Notification",
297
- message_id: "4f5b5491f1774_181b23fc3d4434d38138e5@mba.local.mail",
298
- subject: "Rails Guides",
299
- to: ["users@rails.com", "ddh@rails.com"],
300
- from: ["me@rails.com"],
301
- date: Sat, 10 Mar 2012 14:18:09 +0100,
302
- mail: "..." # omitted for brevity
303
- }
304
- ```
305
-
306
- ActiveResource
307
- --------------
308
-
309
- ### request.active_resource
310
-
311
- | Key | Value |
312
- | -------------- | -------------------- |
313
- | `:method` | HTTP method |
314
- | `:request_uri` | Complete URI |
315
- | `:result` | HTTP response object |
316
-
317
- Active Support
318
- --------------
319
-
320
- ### cache_read.active_support
321
-
322
- | Key | Value |
323
- | ------------------ | ------------------------------------------------- |
324
- | `:key` | Key used in the store |
325
- | `:hit` | If this read is a hit |
326
- | `:super_operation` | :fetch is added when a read is used with `#fetch` |
327
-
328
- ### cache_generate.active_support
329
-
330
- This event is only used when `#fetch` is called with a block.
331
-
332
- | Key | Value |
333
- | ------ | --------------------- |
334
- | `:key` | Key used in the store |
335
-
336
- INFO. Options passed to fetch will be merged with the payload when writing to the store
337
-
338
- ```ruby
339
- {
340
- key: 'name-of-complicated-computation'
341
- }
342
- ```
343
-
344
-
345
- ### cache_fetch_hit.active_support
346
-
347
- This event is only used when `#fetch` is called with a block.
348
-
349
- | Key | Value |
350
- | ------ | --------------------- |
351
- | `:key` | Key used in the store |
352
-
353
- INFO. Options passed to fetch will be merged with the payload.
354
-
355
- ```ruby
356
- {
357
- key: 'name-of-complicated-computation'
358
- }
359
- ```
360
-
361
- ### cache_write.active_support
362
-
363
- | Key | Value |
364
- | ------ | --------------------- |
365
- | `:key` | Key used in the store |
366
-
367
- INFO. Cache stores my add their own keys
368
-
369
- ```ruby
370
- {
371
- key: 'name-of-complicated-computation'
372
- }
373
- ```
374
-
375
- ### cache_delete.active_support
376
-
377
- | Key | Value |
378
- | ------ | --------------------- |
379
- | `:key` | Key used in the store |
380
-
381
- ```ruby
382
- {
383
- key: 'name-of-complicated-computation'
384
- }
385
- ```
386
-
387
- ### cache_exist?.active_support
388
-
389
- | Key | Value |
390
- | ------ | --------------------- |
391
- | `:key` | Key used in the store |
392
-
393
- ```ruby
394
- {
395
- key: 'name-of-complicated-computation'
396
- }
397
- ```
398
-
399
- Railties
400
- --------
401
-
402
- ### load_config_initializer.railties
403
-
404
- | Key | Value |
405
- | -------------- | ----------------------------------------------------- |
406
- | `:initializer` | Path to loaded initializer from `config/initializers` |
407
-
408
- Rails
409
- -----
410
-
411
- ### deprecation.rails
412
-
413
- | Key | Value |
414
- | ------------ | ------------------------------- |
415
- | `:message` | The deprecation warning |
416
- | `:callstack` | Where the deprecation came from |
417
-
418
- Subscribing to an event
419
- -----------------------
420
-
421
- Subscribing to an event is easy. Use `ActiveSupport::Notifications.subscribe` with a block to
422
- listen to any notification.
423
-
424
- The block receives the following arguments:
425
-
426
- * The name of the event
427
- * Time when it started
428
- * Time when it finished
429
- * An unique ID for this event
430
- * The payload (described in previous sections)
431
-
432
- ```ruby
433
- ActiveSupport::Notifications.subscribe "process_action.action_controller" do |name, started, finished, unique_id, data|
434
- # your own custom stuff
435
- Rails.logger.info "#{name} Received!"
436
- end
437
- ```
438
-
439
- Defining all those block arguments each time can be tedious. You can easily create an `ActiveSupport::Notifications::Event`
440
- from block arguments like this:
441
-
442
- ```ruby
443
- ActiveSupport::Notifications.subscribe "process_action.action_controller" do |*args|
444
- event = ActiveSupport::Notifications::Event.new *args
445
-
446
- event.name # => "process_action.action_controller"
447
- event.duration # => 10 (in milliseconds)
448
- event.payload # => {:extra=>information}
449
-
450
- Rails.logger.info "#{event} Received!"
451
- end
452
- ```
453
-
454
- Most times you only care about the data itself. Here is a shortcut to just get the data.
455
-
456
- ```ruby
457
- ActiveSupport::Notifications.subscribe "process_action.action_controller" do |*args|
458
- data = args.extract_options!
459
- data # { extra: :information }
460
- ```
461
-
462
- You may also subscribe to events matching a regular expression. This enables you to subscribe to
463
- multiple events at once. Here's you could subscribe to everything from `ActionController`.
464
-
465
- ```ruby
466
- ActiveSupport::Notifications.subscribe /action_controller/ do |*args|
467
- # inspect all ActionController events
468
- end
469
- ```
470
-
471
- Creating custom events
472
- ----------------------
473
-
474
- Adding your own events is easy as well. `ActiveSupport::Notifications` will take care of
475
- all the heavy lifting for you. Simply call `instrument` with a `name`, `payload` and a block.
476
- The notification will be sent after the block returns. `ActiveSupport` will generate the start and end times
477
- as well as the unique ID. All data passed into the `instrument` call will make it into the payload.
478
-
479
- Here's an example:
480
-
481
- ```ruby
482
- ActiveSupport::Notifications.instrument "my.custom.event", this: :data do
483
- # do your custom stuff here
484
- end
485
- ```
486
-
487
- Now you can listen to this event with:
488
-
489
- ```ruby
490
- ActiveSupport::Notifications.subscribe "my.custom.event" do |name, started, finished, unique_id, data|
491
- puts data.inspect # {:this=>:data}
492
- end
493
- ```
494
-
495
- You should follow Rails conventions when defining your own events. The format is: `event.library`.
496
- If you application is sending Tweets, you should create an event named `tweet.twitter`.