aboutsummaryrefslogtreecommitdiffstats
path: root/actionview/lib
Commit message (Collapse)AuthorAgeFilesLines
...
* remove LookupContext#with_layout_format by passing formats for layouts ↵Nick Sutterer2015-08-243-24/+11
| | | | explicitely.
* fix Docs [ci skip]amitkumarsuroliya2015-08-181-1/+1
|
* typo fix [ci skip]amitkumarsuroliya2015-08-181-2/+2
|
* Merge pull request #21135 from DropsOfSerenity/masterSean Griffin2015-08-172-9/+27
|\ | | | | make disable_with default in submit_tag
| * Make disable_with default in submit_tagJustin Schiff2015-08-112-9/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Prevents double submission by making disable_with the default. Default disable_with option will only be applied if user has not specified her/his own disable_with option, whether that is in the `data-disable-with` string form or the `:data => { :disable_with => "Saving..." }` hash form. disable_with will default to the value attribute. A configuration option was added to opt out of this functionality if the user so desires. `config.action_view.automatically_disable_submit_tag = false`
* | Add documentation for ActionView::Helpers::DateHelper :use_hidden option [ci ↵Vince Francesi2015-08-151-0/+1
|/ | | | skip]
* Sometimes you need a specific break sequence while using word wrap and as ↵Mauricio Gomez Aguinaga2015-08-111-5/+8
| | | | | | | | | | today the only option we have is "\n" and is hardcoded. With this change you will be able to specify any break sequence ("\r\n" for example) as an option. adding proper documentation for break_sequence in ActionView::Helpers::TextHelper.word_wrap adding some more documentation for word_wrap custom break sequence and making sure we use new hash syntax
* Merge pull request #21187 from arthurnn/method_missing_routes_avArthur Nogueira Neves2015-08-111-3/+9
|\ | | | | Dont try to call method missing in routes if thats not what we want
| * Dont try to call method missing in routes if thats not what we wantArthur Neves2015-08-101-3/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If, doing a test like this: ``` class BugTest < ActionView::TestCase def test_foo omg end ``` Will raise with: ``` RuntimeError: In order to use #url_for, you must include routing helpers explicitly. For instance, `include Rails.application.routes.url_helpers`. ``` Thats a bit confusing, as we are not calling url_for at all.
* | [ci skip] Fix simultaneous spellingKasper Timm Hansen2015-08-101-1/+1
| |
* | Update info on browser connection limits [ci skip]Derek Prior2015-08-101-11/+18
|/ | | | | | | Browsers have not been limited to two connections per host for quite some time now. With more connections allowed, the trade-off involved in asset host distribution isn't so clear and it becomes more important that developers measure actual performance before and after.
* Save a string allocation inside loopBenjamin Quorning2015-08-021-3/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In the `tag_options` method, strings are continuously added to the `output` string. Previously, we concatenated two strings and added the generated string to `output`. By adding each of the strings to `output`, one after the other, we will save the allocation of that concatenated string. Benchmark: require 'benchmark/ips' sep = " ".freeze Benchmark.ips do |x| x.report("string +") { output = "" output << sep + "foo" } x.report("string <<") { output = "" output << sep output << "foo" } x.compare! end Results (Ruby 2.2.2): Calculating ------------------------------------- string + 88.086k i/100ms string << 94.287k i/100ms ------------------------------------------------- string + 2.407M (± 5.8%) i/s - 12.068M string << 2.591M (± 7.0%) i/s - 12.917M Comparison: string <<: 2591482.4 i/s string +: 2406883.7 i/s - 1.08x slower
* zOMG 37 objects savedschneems2015-07-301-1/+1
|
* Don't allocate array when not necessaryschneems2015-07-301-5/+6
| | | | | | In the `tag_options` method an array is used to build up elements, then `Array#*` (which is an alias for `Array#join` is called to turn the array into a string. Instead of allocating an array to build a string, we can build the string we want from the beginning. Saved: 121,743 bytes 893 objects
* 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.
* Cut string ActionView template allocationsschneems2015-07-291-2/+7
| | | | | | The instrument method creates new strings, the most common action to instrument is "!render_template` so we can detect when that action is occurring and use a frozen string instead. This change buys us 113,714 bytes of memory and 1,790 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-275-11/+66
|\ | | | | Add wildcard template dependencies.
| * Add wildcard template dependencies.Kasper Timm Hansen2015-07-265-11/+66
| |
* | 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
| |
* | Merge pull request #20384 from kaspth/per-request-cacheDavid Heinemeier Hansson2015-07-202-4/+16
|\ \ | | | | | | Use digest cache in development.
| * | Make digest cache work in development.Kasper Timm Hansen2015-07-182-4/+16
| | | | | | | | | | | | | | | | | | Avoid computing the same fragment digest many times when looping over templates. The cache is cleared on every request so template changes are still picked up.
* | | Freeze string literals when not mutated.schneems2015-07-195-11/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-174-9/+10
| |/ |/| | | | | Various grammar corrections and wrap to 80 characters.
* | Make AC::Parameters not inherited from HashPrem Sichanugrist2015-07-151-0/+10
| | | | | | | | | | | | | | | | This is another take at #14384 as we decided to wait until `master` is targeting Rails 5.0. This commit is implementation-complete, as it guarantees that all the public methods on the hash-inherited Parameters are still working (based on test case). We can decide to follow-up later if we want to remove some methods out from Parameters.
* | Change AC::TestResponse to AD::TestResponsePrem Sichanugrist2015-07-141-1/+1
|/ | | | | ActionController::TestResponse was removed in d9fe10c and caused a test failure on Action View as its test case still refers to it.
* 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.
* | use new constructor. (Oops! :bomb:)Aaron Patterson2015-07-081-1/+1
| |
* | Support explicit defintion of resouce name for collection caching.Dov Murik2015-07-073-6/+37
|/ | | | | | | | | | | | | | 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-282-12/+14
| | | | | | | | | | | | | | | | | | 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.
* | Merge pull request #20417 from dubek/fix-template-cache-call-patternKasper Timm Hansen2015-06-261-1/+1
|\ \ | | | | | | Improve detection of partial templates eligible for collection caching.
| * | Improve detection of partial templates eligible for collection caching.Dov Murik2015-06-221-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The regular expression which was used to detect partial templates that begin with a `<% cache ... do %>` call missed some cases. This commits attempts to improve the detection for some cases such as multi-line comments at the beginning of the template. The different templates are listed in two new unit test methods. Note that specially crafted Ruby code can still evade such `cache`-call detection: for example, a user might have its own method which itself calls the Rails `cache` helper. In such a case, the template's code doesn't start with a literal `cache` string and therefore will not be eligible for collection caching.
* | | A few documentation fixes [ci skip]Robin Dupret2015-06-231-6/+6
|/ /
* | Merge pull request #20654 from repinel/remove-duplicate-privateRichard Schneeman2015-06-211-2/+0
|\ \ | | | | | | Remove duplicate private statement
| * | Remove duplicate private statementRoque Pinel2015-06-211-2/+0
| | |
* | | Merge branch 'master' of github.com:rails/docrailsVijay Dev2015-06-215-6/+6
|\ \ \ | |/ / |/| | | | | | | | Conflicts: guides/source/configuring.md
| * | [ci skip] Fix to Fixed-width Fontyui-knk2015-06-143-4/+4
| | | | | | | | | | | | LookupContext is class name
| * | [ci skip] Add '.'yui-knk2015-06-141-1/+1
| | |
| * | [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
* | | applies project style guidelinesXavier Noria2015-06-201-7/+7
| | | | | | | | | | | | Just saw these in passing while reading this file.
* | | removes unnecessary backslashes in regexpsXavier Noria2015-06-201-3/+3
| |/ |/| | | | | Colons are not metacharacters.
* | Nitpick :nail_care: [ci skip]Zachary Scott2015-06-181-1/+2
| |