- 19 9月, 2015 2 次提交
-
-
由 Jerry D'Antonio 提交于
The thread_safe gem is being deprecated and all its code has been merged into the concurrent-ruby gem. The new class, Concurrent::Map, is exactly the same as its predecessor except for fixes to two bugs discovered during the merge.
-
由 Kir Shatrov 提交于
-
- 17 9月, 2015 2 次提交
-
-
由 shingo.nakanishi 提交于
-
由 shingo.nakanishi 提交于
-
- 13 9月, 2015 1 次提交
-
-
由 amitkumarsuroliya 提交于
`intance` should be `instance`
-
- 06 9月, 2015 1 次提交
-
-
由 Aaron Patterson 提交于
`hfvalue` parts should always be percent encoded, so lets do that! Revert "use path escaping for email addresses" This reverts commit 21ffef38.
-
- 05 9月, 2015 2 次提交
-
-
由 Aaron Patterson 提交于
Due to e25fdad2, we are correctly using path escaping for email addresses. This commit fixes the tests to expect path escaping.
-
由 Bernerd Schaefer 提交于
The `url_for` methods in `actionpack` and `actionview` now make a copy of the provided options before generating polymorphic paths or URLs. The bug in the previous behavior is most noticeable in a case like: url_options = [:new, :post, param: 'value'] if current_page?(url_options) css_class = "active" end link_to "New Post", url_options, class: css_class
-
- 03 9月, 2015 1 次提交
-
-
由 amitkumarsuroliya 提交于
-
- 28 8月, 2015 1 次提交
-
-
由 Lachlan Sylvester 提交于
-
- 27 8月, 2015 2 次提交
-
-
由 Aaron Patterson 提交于
`render` is the only possible source for the `plain` option. Pulling the conditional up to the `render` method removes far away conditionals
-
由 Aaron Patterson 提交于
We don't need to pass the full hash just to pull one value out. It's better to just pass the value that the method needs to know about so that we can abstract it away from "options"
-
- 25 8月, 2015 4 次提交
-
-
由 Rafael Mendonça França 提交于
-
由 Rafael Mendonça França 提交于
Before we were changing the state of the lookup_context for the duration of the with_layout_format block, but since we already know the formats we can just pass it explicitly. Related with 8d7ce0f2
-
由 Nick Sutterer 提交于
-
由 Nick Sutterer 提交于
-
- 18 8月, 2015 2 次提交
-
-
由 amitkumarsuroliya 提交于
-
由 amitkumarsuroliya 提交于
-
- 16 8月, 2015 1 次提交
-
-
由 Vince Francesi 提交于
-
- 12 8月, 2015 2 次提交
-
-
由 Justin Schiff 提交于
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`
-
由 Mauricio Gomez Aguinaga 提交于
Sometimes you need a specific break sequence while using word wrap and as 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
-
- 11 8月, 2015 3 次提交
-
-
由 Arthur Neves 提交于
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.
-
由 Kasper Timm Hansen 提交于
-
由 Derek Prior 提交于
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.
-
- 02 8月, 2015 1 次提交
-
-
由 Benjamin Quorning 提交于
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
-
- 31 7月, 2015 2 次提交
-
-
由 schneems 提交于
-
由 schneems 提交于
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
-
- 30 7月, 2015 4 次提交
-
-
由 schneems 提交于
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.
-
由 schneems 提交于
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.
-
由 schneems 提交于
No idea why on earth this hash key isn't already optimized by MRI, but it isn't.
💩 This change buys us 74,077 bytes of memory and 1,852 fewer objects per request. -
由 schneems 提交于
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.
-
- 27 7月, 2015 1 次提交
-
-
由 Kasper Timm Hansen 提交于
-
- 24 7月, 2015 1 次提交
-
-
由 Clayton Smith 提交于
-
- 20 7月, 2015 1 次提交
-
-
由 schneems 提交于
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)
-
- 19 7月, 2015 1 次提交
-
-
由 Kasper Timm Hansen 提交于
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.
-
- 18 7月, 2015 2 次提交
-
-
由 Prem Sichanugrist 提交于
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`.
-
由 Jon Atack 提交于
Various grammar corrections and wrap to 80 characters.
-
- 16 7月, 2015 1 次提交
-
-
由 Brian Davis 提交于
-
- 15 7月, 2015 1 次提交
-
-
由 Prem Sichanugrist 提交于
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.
-
- 14 7月, 2015 1 次提交
-
-
由 Prem Sichanugrist 提交于
ActionController::TestResponse was removed in d9fe10cb and caused a test failure on Action View as its test case still refers to it.
-