aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
Commit message (Collapse)AuthorAgeFilesLines
* Improve String#strip_heredocJuanito Fatas2015-09-121-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Saves about 6 MB, about 40% faster. **strip_heredoc.rb** ```ruby require "active_support/core_ext/object/try" require "get_process_mem" class String def strip_heredoc indent = scan(/^[ \t]*(?=\S)/).min.try(:size) || 0 gsub(/^[ \t]{#{indent}}/, '') end end if ENV["MEASURE_MEMORY"] == "yes" mem = GetProcessMem.new GC.start GC.disable 10000.times do <<-MSG.strip_heredoc xhr and xml_http_request methods are deprecated in favor of `get :index, xhr: true` and `post :create, xhr: true` MSG end before = mem.mb after = mem.mb GC.enable puts "Before: #{before} MiB" puts "After: #{after} MiB" puts "Diff: #{after - before} MiB" end ``` **patched_strip_heredoc.rb** ```ruby require "active_support/core_ext/object/try" require "get_process_mem" class String def patched_strip_heredoc gsub(/^#{scan(/^[ \t]*(?=\S)/).min}/, "".freeze) end end if ENV["MEASURE_MEMORY"] == "yes" mem = GetProcessMem.new GC.start GC.disable 10000.times do <<-MSG.patched_strip_heredoc xhr and xml_http_request methods are deprecated in favor of `get :index, xhr: true` and `post :create, xhr: true` MSG end before = mem.mb after = mem.mb GC.enable puts "Before: #{before} MiB" puts "After: #{after} MiB" puts "Diff: #{after - before} MiB" end ``` **Before** ``` $ MEASURE_MEMORY=yes ruby strip_heredoc.rb Before: 44.73828125 MiB After: 44.7734375 MiB Diff: 0.03515625 MiB ``` **After** ``` $ MEASURE_MEMORY=yes ruby patched_strip_heredoc.rb Before: 37.9765625 MiB After: 38.015625 MiB Diff: 0.0390625 MiB ``` `44.7734375 - 38.015625 = 6.75` => **Saves about 6.75 MiB** **benchmark.rb** ```ruby require "benchmark/ips" require_relative "./strip_heredoc" require_relative "./patched_strip_heredoc" def original <<-MSG.strip_heredoc xhr and xml_http_request methods are deprecated in favor of `get :index, xhr: true` and `post :create, xhr: true` MSG end def patched <<-MSG.patched_strip_heredoc xhr and xml_http_request methods are deprecated in favor of `get :index, xhr: true` and `post :create, xhr: true` MSG end Benchmark.ips do |x| x.report("original") { original } x.report(" patched") { patched } x.compare! end ``` ``` $ ruby -v benchmark.rb ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14] Calculating ------------------------------------- original 5.652k i/100ms patched 6.477k i/100ms ------------------------------------------------- original 54.076k (± 5.7%) i/s - 271.296k patched 74.557k (± 6.2%) i/s - 375.666k Comparison: patched: 74557.0 i/s original: 54076.4 i/s - 1.38x slower ``` => **About 38% faster** 1. Clone rails project `git clone git@github.com:rails/rails.git` 2. Apply this patch to `activesupport/lib/active_support/core_ext/string/strip.rb` 3. `cd activesupport` 4. run `rake` 5. And tests passed: ``` ➜ activesupport $ rake /Users/Juan/.rubies/ruby-2.2.2/bin/ruby -w -I"lib:test" "/Users/Juan/.rubies/ruby-2.2.2/lib/ruby/2.2.0/rake/rake_test_loader.rb" "test/**/*_test.rb" ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ........................................................................ ......................................................................S. SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS Finished in 15.343004s, 214.2344 runs/s, 24902.4898 assertions/s. 3287 runs, 382079 assertions, 0 failures, 0 errors, 48 skips You have skipped tests. Run with --verbose for details. ```
* Merge pull request #21567 from y-yagi/fix_inspect_docZachary Scott2015-09-091-1/+1
|\ | | | | fix wrong method used in the TimeWithZone#inspect method docs [ci skip]
| * fix wrong method used in the TimeWithZone#inspect method docs [ci skip]yuuji.yaginuma2015-09-101-1/+1
| |
* | Merge pull request #20921 from pboling/fix-sql-colors-in-log-subscriberRafael Mendonça França2015-09-091-1/+1
|\ \ | | | | | | | | | Fix and Improve sql logging coloration in `ActiveRecord::LogSubscriber`.
| * | Improve sql logging coloration in `ActiveRecord::LogSubscriber`.Peter Boling2015-07-171-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Improves coloring for statements like: # Become WHITE SELECT * FROM ( SELECT * FROM mytable FOR UPDATE ) ss WHERE col1 = 5; LOCK TABLE table_name IN ACCESS EXCLUSIVE MODE; # Becomes RED ROLLBACK - Reinstates the coloration of the `payload[:name]`. Instead of simple alternating colors, adds meaning: - `MAGENTA` for `"SQL"` or `blank?` payload names - `CYAN` for Model Load/Exists - Introduces specs for sql coloration. - Introduces specs for payload name coloration. GH#20885
* | | Rails documentation use american english.[ci skip]ravindra kumar kumawat2015-09-091-1/+1
| |/ |/|
* | Fixed Time conversion example for UTC time zone [ci skip]Ronak Jangir2015-09-081-1/+1
| |
* | Merge pull request #20534 from qnm/activesupport-require-issueYves Senn2015-09-071-0/+1
|\ \ | | | | | | Add require to ensure Time#advance works without implicit required
| * | Remove accidental ruby-versionRob Sharp2015-06-121-1/+0
| | |
| * | Add missing require to ensure #advance will work without being implicity ↵Rob Sharp2015-06-122-0/+2
| | | | | | | | | | | | required
* | | Merge pull request #21250 from ronakjangir47/safe_constYves Senn2015-09-071-0/+4
|\ \ \ | | | | | | | | | | | | safe_constantize - Added Object scoped missing test cases
| * | | safe_constantize - Added Object scoped missing test casesRonak Jangir2015-09-061-0/+2
| | | |
* | | | Removed Extra ‘the’ [ci skip]Ronak Jangir2015-09-061-1/+1
|/ / /
* | | Update Unicode Version to 8.0.0Anshul Sharma2015-09-043-1/+5
| | |
* | | docs, make `blank?` behavior clear. Closes #21468. [ci skip]Yves Senn2015-09-021-2/+2
| | |
* | | Merge pull request #21467 from yui-knk/doc/subscribeZachary Scott2015-09-021-2/+2
|\ \ \ | | | | | | | | [ci skip] Add description about which object
| * | | [ci skip] Add description about which objectyui-knk2015-09-021-2/+2
| | | | | | | | | | | | | | | | `ActiveSupport::Notifications.subscribe` expects as second parameter.
* | | | No need CHANGELOG entry for #21421 [ci skip]Rafael Mendonça França2015-09-011-6/+0
| | | |
* | | | ArrayInquirer to correctly find symbols or stringsLeigh Halliday2015-08-283-11/+22
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | The problem existed where if your ArrayInquirer values were strings but you checked them using any? with a symbol, it would not find the value. Now it will correctly check whether both the String form or the Symbol form are included in the Array. `
* | | Tiny documentation improvements [ci skip]Robin Dupret2015-08-281-5/+6
| | |
* | | - Extracted `DELIMITED_REGEX` to `delimited_regex` method and made use of ↵Vipul A M2015-08-284-2/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | user passed `options[:delimited_regex]` if available. Changed `DELIMITED_REGEX` to `DEFAULT)DELIMITED_REGEX` to signify what it means. - Added tests for number to delimited and number to currency in both actionview and activesupport. Changes Changes
* | | 10X speed improvements for AS::Dependencies.loadable_constants_for_pathJean Boussier2015-08-271-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the autoload_paths start to grows, this methods is quite a hotspot >> ActiveSupport::Dependencies.autoload_paths.size => 49 >> Benchmark.ips { |x| x.report('baseline') { ActiveSupport::Dependencies.loadable_constants_for_path(File.expand_path('app/models/shop')) }} Calculating ------------------------------------- baseline 90.000 i/100ms ------------------------------------------------- baseline 1.073k (±20.2%) i/s - 4.950k After the patch Calculating ------------------------------------- patched 883.000 i/100ms ------------------------------------------------- patched 11.050k (±19.7%) i/s - 50.331k
* | | Merge pull request #21387 from ronakjangir47/remove_dup_minitestKasper Timm Hansen2015-08-261-2/+0
|\ \ \ | | | | | | | | Removed duplicate require 'minitest/mock'
| * | | Removed duplicate requiring minitest/mock as it is already required in ↵Ronak Jangir2015-08-261-2/+0
| | | | | | | | | | | | | | | | method_call_assertions
* | | | Fixed to_datetime docs [ci skip]Ronak Jangir2015-08-261-2/+3
|/ / /
* | | Merge pull request #21257 from jdantonio/async-jobKasper Timm Hansen2015-08-251-1/+1
|\ \ \ | | | | | | | | Initial implementation of ActiveJob AsyncAdapter.
| * | | Initial implementation of ActiveJob AsyncAdapter.Jerry D'Antonio2015-08-251-1/+1
| | | |
* | | | Merge pull request #21281 from ronakjangir47/added_docsRafael Mendonça França2015-08-251-1/+10
|\ \ \ \ | |/ / / |/| | | Added docs for TimeWithZone [ci skip]
| * | | Added docs for TimeWithZone [ci skip]Ronak Jangir2015-08-181-1/+10
| | | |
* | | | use `caller_locations` instead of `caller`Aaron Patterson2015-08-242-3/+14
| | | | | | | | | | | | | | | | | | | | We have `caller_locations`, so we don't need to parse the strings in the callstack.
* | | | minor documentation improvement [ci skip]Sam Auciello2015-08-241-2/+2
| | | |
* | | | temp files are no more requireGaurav Sharma2015-08-251-2/+0
| | | | | | | | | | | | `:nail_care:`
* | | | Merge branch 'master' of github.com:rails/railsVijay Dev2015-08-2443-278/+884
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | Conflicts: guides/source/security.md
| * \ \ \ Merge pull request #16245 from byroot/more-atomic-writeMatthew Draper2015-08-211-27/+29
| |\ \ \ \ | | | | | | | | | | | | File renaming should be the last operation of an atomic write
| | * | | | File renaming should be the last operation of an atomic writeJean Boussier2015-08-201-27/+29
| | | | | |
| * | | | | Merge pull request #21300 from jonahb/cacheYves Senn2015-08-201-1/+1
| |\ \ \ \ \ | | | | | | | | | | | | | | Correct cache store superclass in comment [ci skip]
| | * | | | | Correct cache store superclass in commentJonah Burke2015-08-191-1/+1
| | | |/ / / | | |/| | |
| * | | | | Merge pull request #21279 from ronakjangir47/test_cleanupKasper Timm Hansen2015-08-202-2/+10
| |\ \ \ \ \ | | |/ / / / | |/| | | | Cleaned up generators tests using internal assertion helper
| | * | | | Cleaned up generators tests using internal assertion helperRonak Jangir2015-08-202-2/+10
| | |/ / /
| * / / / Use == 0 instead of .zero? in #tryJean Boussier2015-08-171-1/+1
| |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The perf gain is relatively minor but consistent: ``` Calculating ------------------------------------- 0.zero? 137.091k i/100ms 1.zero? 137.350k i/100ms 0 == 0 142.207k i/100ms 1 == 0 144.724k i/100ms ------------------------------------------------- 0.zero? 8.893M (± 6.5%) i/s - 44.280M 1.zero? 8.751M (± 6.4%) i/s - 43.677M 0 == 0 10.033M (± 7.0%) i/s - 49.915M 1 == 0 9.814M (± 8.0%) i/s - 48.772M ``` And try! is quite a big hotspot for us so every little gain is appreciable.
| * | | Replacing lambda with proc getting argument error because of it.Ronak Jangir2015-08-172-1/+7
| | | |
| * | | Merge pull request #20647 from twalpole/method_source_dependencyRafael Mendonça França2015-08-141-0/+1
| |\ \ \ | | | | | | | | | | Add method_source dependency to activesupport
| | * | | Add method_source dependency to activesupportThomas Walpole2015-07-291-0/+1
| | | | |
| * | | | Merge pull request #21025 from ronakjangir47/assertsKasper Timm Hansen2015-08-132-1/+18
| |\ \ \ \ | | | | | | | | | | | | Added helper methods to stub any instance
| | * | | | Added helper methods to stub any instanceRonak Jangir2015-08-132-1/+18
| | | | | |
| * | | | | Merge pull request #21219 from repinel/assert-human-size-prefix-deprecatedYves Senn2015-08-131-8/+10
| |\ \ \ \ \ | | | | | | | | | | | | | | Assert that the `:prefix` option of `number_to_human_size` is deprecated
| | * | | | | Assert that the `:prefix` option of `number_to_human_size` is deprecatedRoque Pinel2015-08-121-8/+10
| | | | | | |
| * | | | | | Merge pull request #21217 from myrridin/myrridin-documentation-updatesZachary Scott2015-08-122-4/+4
| |\ \ \ \ \ \ | | |/ / / / / | |/| | | | | [ci skip] Documentation: Switch around a common phrase for readability
| | * | | | | [ci skip] Switch around a common idiom for readabilityThomas Hart II2015-08-052-4/+4
| | | |/ / / | | |/| | |
| * | | | | [ci skip] Fix rdoc markupakihiro172015-08-121-1/+1
| | |/ / / | |/| | |