aboutsummaryrefslogtreecommitdiffstats
path: root/actionview/lib/action_view/helpers
Commit message (Collapse)AuthorAgeFilesLines
...
* Cut string allocations in content_tag_stringschneems2015-07-296-20/+20
| | | | | | content_tag's first argument is will generate a string with an html tag so `:a` will generate: `<a></a>`. When this happens, the symbol is implicitly `to_s`-d so a new string is allocated. We can get around that by using a frozen string instead which This change buys us 74,236 bytes of memory and 1,855 fewer objects per request.
* Optimize hash keyschneems2015-07-291-1/+1
| | | | | | No idea why on earth this hash key isn't already optimized by MRI, but it isn't. :shit: This change buys us 74,077 bytes of memory and 1,852 fewer objects per request.
* Decrease string allocation in content_tag_stringschneems2015-07-291-6/+7
| | | | | | | | | | When an unknonwn key is passed to the hash in `PRE_CONTENT_STRINGS` it returns nil, when you call "#{nil}" it allocates a new empty string. We can get around this allocation by using a default value `Hash.new { "".freeze }`. We can avoid the `to_sym` call by pre-populating the hash with a symbol key in addition to a string key. We can freeze some strings when using Array#* to reduce allocations. Array#join can take frozen strings. This change buys us 86,600 bytes of memory and 1,857 fewer objects per request.
* Merge pull request #20904 from kaspth/wildcard-template-dependenciesKasper Timm Hansen2015-07-271-1/+13
|\ | | | | Add wildcard template dependencies.
| * Add wildcard template dependencies.Kasper Timm Hansen2015-07-261-1/+13
| |
* | Encode the email address as prescribed in RFC 6068 section 2.Clayton Smith2015-07-231-1/+2
|/
* Merge pull request #20895 from brian-davis/brian-davisSean Griffin2015-07-201-1/+1
|\ | | | | grammar fix to content_for method documentation in capture_helper.rb [ci skip]
| * grammar fix to content_for method documentation in capture_helper.rbBrian Davis2015-07-151-1/+1
| |
* | Freeze string literals when not mutated.schneems2015-07-192-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I wrote a utility that helps find areas where you could optimize your program using a frozen string instead of a string literal, it's called [let_it_go](https://github.com/schneems/let_it_go). After going through the output and adding `.freeze` I was able to eliminate the creation of 1,114 string objects on EVERY request to [codetriage](codetriage.com). How does this impact execution? To look at memory: ```ruby require 'get_process_mem' mem = GetProcessMem.new GC.start GC.disable 1_114.times { " " } before = mem.mb after = mem.mb GC.enable puts "Diff: #{after - before} mb" ``` Creating 1,114 string objects results in `Diff: 0.03125 mb` of RAM allocated on every request. Or 1mb every 32 requests. To look at raw speed: ```ruby require 'benchmark/ips' number_of_objects_reduced = 1_114 Benchmark.ips do |x| x.report("freeze") { number_of_objects_reduced.times { " ".freeze } } x.report("no-freeze") { number_of_objects_reduced.times { " " } } end ``` We get the results ``` Calculating ------------------------------------- freeze 1.428k i/100ms no-freeze 609.000 i/100ms ------------------------------------------------- freeze 14.363k (± 8.5%) i/s - 71.400k no-freeze 6.084k (± 8.1%) i/s - 30.450k ``` Now we can do some maths: ```ruby ips = 6_226k # iterations / 1 second call_time_before = 1.0 / ips # seconds per iteration ips = 15_254 # iterations / 1 second call_time_after = 1.0 / ips # seconds per iteration diff = call_time_before - call_time_after number_of_objects_reduced * diff * 100 # => 0.4530373333993266 miliseconds saved per request ``` So we're shaving off 1 second of execution time for every 220 requests. Is this going to be an insane speed boost to any Rails app: nope. Should we merge it: yep. p.s. If you know of a method call that doesn't modify a string input such as [String#gsub](https://github.com/schneems/let_it_go/blob/b0e2da69f0cca87ab581022baa43291cdf48638c/lib/let_it_go/core_ext/string.rb#L37) please [give me a pull request to the appropriate file](https://github.com/schneems/let_it_go/blob/b0e2da69f0cca87ab581022baa43291cdf48638c/lib/let_it_go/core_ext/string.rb#L37), or open an issue in LetItGo so we can track and freeze more strings. Keep those strings Frozen ![](https://www.dropbox.com/s/z4dj9fdsv213r4v/let-it-go.gif?dl=1)
* | Stop using deprecated `render :text` in testPrem Sichanugrist2015-07-171-1/+1
| | | | | | | | | | | | | | | | | | This will silence deprecation warnings. Most of the test can be changed from `render :text` to render `:plain` or `render :body` right away. However, there are some tests that needed to be fixed by hand as they actually assert the default Content-Type returned from `render :body`.
* | [skip ci] Lookup can be a noun but it is not a verbJon Atack2015-07-171-1/+1
|/ | | | Various grammar corrections and wrap to 80 characters.
* Merge pull request #20813 from noniq/locale-argument-for-pluralize-helperKasper Timm Hansen2015-07-091-2/+10
|\ | | | | Allow `pluralize` helper to take a locale.
| * Allow `pluralize` helper to take a locale.Stefan Daschek2015-07-091-2/+10
| | | | | | | | This is already supported in `ActiveSupport::Inflector#pluralize` and `String#pluralize`, so we just forward the locale.
* | Support explicit defintion of resouce name for collection caching.Dov Murik2015-07-071-0/+15
|/ | | | | | | | | | | | | | If a template includes `# Template Collection: ...` anywhere in its source, that name will be used as the cache name for the partial that is rendered for the collection. This allows users to enable collection caching even if the template doesn't start with `<% cache ... do %>`. Moreover, the `# Template Collection: ...` notation is recognized in all template types (and template types other than ERB can define a resource_cache_call_pattern method to allow the `cache ... do` pattern to be recognized too).
* changes names in guides to better reflect diversity [ci-skip]Thomas Osborn2015-07-021-6/+6
|
* Merge pull request #20669 from akolomiychuk/image-pathYves Senn2015-06-291-0/+2
|\ | | | | | | Passing nil to image_tag
| * Add nil check in asset_pathAnton Kolomiychuk2015-06-291-0/+2
| |
* | Fix cache issue when different partials use the same collectionRoque Pinel2015-06-281-11/+13
| | | | | | | | | | | | | | | | | | Adds the `virtual_path` option to `cache_fragment_name` so it can be provided when needed. That allows `cache_collection_render` to get the appropriate cache key with the digest generated based on the template and prevent collision with other templates that cache the same collection.
* | A few documentation fixes [ci skip]Robin Dupret2015-06-231-6/+6
| |
* | Merge branch 'master' of github.com:rails/docrailsVijay Dev2015-06-211-1/+1
|\ \ | |/ |/| | | | | Conflicts: guides/source/configuring.md
| * [ci skip] Fix minutes to seconds in `select_second`yui-knk2015-06-091-1/+1
| | | | | | | | This is same type commit of https://github.com/rails/rails/pull/20463
* | Nitpick :nail_care: [ci skip]Zachary Scott2015-06-181-1/+2
| |
* | Merge pull request #20549 from maurogeorge/distance_of_time_in_words-rdocZachary Scott2015-06-181-0/+20
|\ \ | | | | | | Add RDoc about scope option on distance_of_time_in_words
| * | Add RDoc about scope option on distance_of_time_in_wordsMauro George2015-06-181-0/+20
| | | | | | | | | | | | [ci skip]
* | | Merge pull request #20108 from akshay-vishnoi/button-tagArthur Nogueira Neves2015-06-151-2/+15
|\ \ \ | | | | | | | | Add missing spec and documentation for button_tag helper
| * | | Add missing spec and documentation for button_tag helperAkshay Vishnoi2015-05-241-2/+15
| | | |
* | | | Add gotcha to RDoc of collection_check_boxesMauro George2015-06-131-0/+21
| |/ / |/| | | | | | | | [ci skip]
* | | Tiny documentation edits [ci skip]Robin Dupret2015-06-091-7/+7
| | |
* | | Raise an ArgumentError when `include_blank` is false for a required field inGrey Baker2015-06-081-3/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `Tags::Base#select_content_tag`. Previously, passing a falsey value to `include_blank` would be ignored if the field was required, and a blank line would still be inserted. The following will now raise instead of quietly failing: `select("post", "category", %w(a required field), { include_blank: false }, required: 'required')`
* | | [ci skip] Fix hours to minutes in `select_minute`yui-knk2015-06-071-1/+1
| |/ |/|
* | Merge branch 'master' of github.com:rails/docrailsVijay Dev2015-06-051-1/+1
|\ \
| * | [ci skip] Fix typo you/yourclaudiob2015-05-231-1/+1
| | |
* | | Fix docs markup for option_groups_from_collection_for_select [ci skip]Carlos Antonio da Silva2015-05-191-1/+1
| |/ |/|
* | Better formatted documents [ci skip]Gourav Tiwari2015-05-081-8/+12
|/
* Merge branch 'master' of github.com:rails/docrailsVijay Dev2015-05-081-0/+1
|\
| * [ci skip] Add an example to ActionView::Helpers::FormBuilder#labelyui-knk2015-05-081-0/+1
| |
* | Updated dynamic value of id in comments [ci skip]Gourav Tiwari2015-05-071-1/+1
| | | | | | | | In help text for method, dynamic value makes it hard to understand, so replaced with static value matching with example above
* | Example updated [ci skip]Ankit Gupta2015-05-071-1/+1
| | | | | | | | Should be ApplicationController not ApplicationController::Base
* | Remove :rescue_format option for translate helper since it's no longer ↵Bernard Potocki2015-05-041-2/+2
| | | | | | | | supported by I18n.
* | Merge pull request #19998 from imanel/fix-missing-translationMatthew Draper2015-05-051-4/+4
|\ \ | | | | | | Handle raise flag in translate when both main and default translation is missing.
| * | Handle raise flag in translate when both main and default translation is ↵Bernard Potocki2015-05-041-4/+4
| | | | | | | | | | | | missing. Fixes #19967
* | | Merge pull request #18783 from mikestone14/actionview-image-tag-overrideRafael Mendonça França2015-05-031-0/+7
|\ \ \ | | | | | | | | Actionview image tag size option override
| * | | image_tag raises an error if size is passed with height and/or widthMike Stone2015-04-241-0/+7
| | | |
* | | | Use ruby 1.9 lambda syntax in documentations [ci skip]Mehmet Emin İNAÇ2015-05-031-1/+1
| |/ / |/| |
* | | [ci skip] Fix example codes of form_for methodyui-knk2015-05-021-26/+36
| | |
* | | Revert "Merge pull request #19844 from ↵Yves Senn2015-05-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | stevenspiel/link_to_if_block_helper_addition" This reverts commit d459b001b43d25053e7982e96eb8383538a6e358, reversing changes made to 4d4950fae9e2a6970b5f1793aadc56a0b44e28a3. :sweat: The block is not supposed to be passed to `link_to`. It's used for a customized behavior of the `condtion = false` case. The docs illustrate that like so: ``` <%= link_to_if(@current_user.nil?, "Login", { controller: "sessions", action: "new" }) do link_to(@current_user.login, { controller: "accounts", action: "show", id: @current_user }) end %> ```
* | | Merge pull request #19844 from stevenspiel/link_to_if_block_helper_additionYves Senn2015-05-011-1/+1
|\ \ \ | | | | | | | | | | | | Update url_helper.rb
| * | | Update url_helper.rbSteven Spiel2015-04-211-1/+1
| |/ / | | | | | | add block to link_to_if when condition is true
* | | Make ActionMailer #cache helper a no-op, not an exceptionJavan Makhmali2015-04-281-1/+1
| | |
* | | Correct translate helper docs [ci skip]Derek Prior2015-04-241-23/+36
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The documentation previously stated that calling `translate(".foo")` was equivalent to calling `I18n.translate("people.index.foo")` which is incorrect due to the various other functions of the `translate` view helper. This has been fixed. Additionally, a note about forcing the view helper to re-raise exceptions was added to the section detailing the handling of missing translations. Other cleanup includes: * Consistent formatting of code * Stop indenting bulleted list as a code sample * Tighten some of the language * Wrap at 80 characters.