aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
Commit message (Collapse)AuthorAgeFilesLines
* fixes remaining RuboCop issues [Vipul A M, Xavier Noria]Xavier Noria2016-09-017-18/+18
|
* Cache to_datetime for performanceAndrew White2016-09-011-1/+1
| | | | | | | As demonstrated in #25880 the to_time method converts the utc time instance to a local time instance which is an expensive operation. Since to_datetime involves similar expensive operations we should also cache it to speed up comparison with lots of values.
* Start passing cipher from EncryptedCookieJar since we use it to determine ↵Vipul A M2016-09-012-2/+9
| | | | key length
* Follow up of #25602Vipul A M2016-09-011-0/+10
| | | | | | | | | Since keys are truncated, ruby 2.4 doesn't accept keys greater than their lenghts. keys of same value but different lenght and greater than key size of cipher, produce the same results as reproduced at https://gist.github.com/rhenium/b81355fe816dcfae459cc5eadfc4f6f9 Since our default cipher is 'aes-256-cbc', key length for which is 32 bytes, limit the length of key being passed to Encryptor to 32 bytes. This continues to support backwards compat with any existing signed data, already encrupted and signed with 32+ byte keys. Also fixes the passing of this value in multiple tests.
* use `message` that specified in argument to error messageyuuji.yaginuma2016-08-312-1/+10
|
* Merge pull request #25880 from ↵Andrew White2016-08-301-1/+1
|\ | | | | | | | | ryandv/fix_performance_regression_in_timewithzone_to_time Fix performance regression in `TimeWithZone#to_time`
| * Memoize coerced TimeWithZone value in TimeWithZone#localtime.Ryan De Villa2016-08-231-7/+1
| |
| * Fix performance regression in `TimeWithZone#to_time`Ryan De Villa2016-08-231-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A performance regression was introduced by commit b79adc4323ff289aed3f5787fdfbb9542aa4f89f from Rails 4.0.0.beta1, in which `TimeWithZone#to_time` no longer returns a cached instance attribute but instead coerces the value to `Time`. This coerced value is not cached, and recomputation degrades the performance of comparisons between TimeWithZone objects. See https://github.com/rails/rails/commit/b79adc4323ff289aed3f5787fdfbb9542aa4f89f#diff-3497a506c921a3a3e40fd517e92e4fe3R322 for the change in question. The following benchmark, which reverts the change linked above, demonstrates the performance regression: require 'active_support/time' require 'benchmark/ips' utc = Time.utc(2000, 1, 1, 0) time_zone = ActiveSupport::TimeZone['Eastern Time (US & Canada)'] twz = ActiveSupport::TimeWithZone.new(utc, time_zone) twz2 = ActiveSupport::TimeWithZone.new(Time.utc(1999, 12, 31, 23, 59, 59), ActiveSupport::TimeZone['UTC']) patchedTimeWithZone = Class.new(ActiveSupport::TimeWithZone) do def to_time utc end end patched_twz = patchedTimeWithZone.new(utc, time_zone) patched_twz2 = patchedTimeWithZone.new(Time.utc(1999, 12, 31, 23, 59, 59), ActiveSupport::TimeZone['UTC']) Benchmark.ips do |x| x.report("comparison out of the box") { twz <=> twz2 } x.report("comparison reverting to_time") { patched_twz <=> patched_twz2 } x.compare! end The results, when run in rails-dev-box, are as follows: Warming up -------------------------------------- comparison out of the box 24.765k i/100ms comparison reverting to_time 57.237k i/100ms Calculating ------------------------------------- comparison out of the box 517.245k (± 4.7%) i/s - 2.600M in 5.038700s comparison reverting to_time 2.624M (± 5.0%) i/s - 13.050M in 4.985808s Comparison: comparison reverting to_time: 2624266.1 i/s comparison out of the box: 517244.6 i/s - 5.07x slower The change made to run the benchmark, however, is not possible, as it would undo the intent to standardize the return value of `to_time` to `Time` in the system timezone. Our proposed solution is to restore the caching behaviour of `to_time` as it existed prior to the change linked above. Benchmark of our solution: require 'active_support/time' require 'benchmark/ips' patchedTimeWithZone = Class.new(ActiveSupport::TimeWithZone) do def to_time @to_time ||= super end end utc = Time.utc(2000, 1, 1, 0) time_zone = ActiveSupport::TimeZone['Eastern Time (US & Canada)'] twz = ActiveSupport::TimeWithZone.new(utc, time_zone) twz2 = ActiveSupport::TimeWithZone.new(Time.utc(1999, 12, 31, 23, 59, 59), ActiveSupport::TimeZone['UTC']) patched_twz = patchedTimeWithZone.new(utc, time_zone) patched_twz2 = patchedTimeWithZone.new(Time.utc(1999, 12, 31, 23, 59, 59), ActiveSupport::TimeZone['UTC']) Benchmark.ips do |x| x.report("TimeWithZone comparison - existing implementation") { twz <=> twz2 } x.report("TimeWithZone comparison - caching implementation") { patched_twz <=> patched_twz2 } x.compare! end Results in rails-dev-box: Warming up -------------------------------------- TimeWithZone comparison - existing implementation 26.629k i/100ms TimeWithZone comparison - caching implementation 59.144k i/100ms Calculating ------------------------------------- TimeWithZone comparison - existing implementation 489.757k (± 4.2%) i/s - 2.450M in 5.011639s TimeWithZone comparison - caching implementation 2.802M (± 5.3%) i/s - 13.958M in 4.996116s Comparison: TimeWithZone comparison - caching implementation: 2801519.1 i/s TimeWithZone comparison - existing implementation: 489756.7 i/s - 5.72x slower
* | use `inspect` for show `from` valueyuuji.yaginuma2016-08-292-1/+10
| | | | | | | | If `from` is nil, in order to avoid the blank is showed.
* | Fix typo in Delegation#delegate_missing_to doc [skip ci]Anton Davydov2016-08-271-1/+1
| |
* | Move custom assertion to its proper placeSantosh Wadghule2016-08-272-11/+11
|/ | | | | | | | ActiveSupport::Testing::Assertions. We have a separate module in which have defined Rails' own custom assertions. So it would be good to keep all custom Rails' assertions in one place i.e. in this module.
* Merge pull request #25628 from ysksn/optionsRafael Mendonça França2016-08-174-5/+11
|\ | | | | | | Remove parameter "options = nil" for #clear
| * Update CHANGELOG.md for #25628 [ci skip]Yosuke Kabuto2016-07-024-5/+11
| | | | | | | | | | | | Move new CHANGELOG entry top [ci skip] Remove parameter "options = nil" for #clear
* | Merge pull request #25863 from mechanicles/remove-duplicate-testRafael França2016-08-161-5/+0
|\ \ | | | | | | Remove duplicate test.
| * | Remove duplicate test.Santosh Wadghule2016-07-171-5/+0
| | | | | | | | | | | | | | | We already test similar stuff in `test_really_long_keys` so removing this extra and duplicated test.
* | | Add three new rubocop rulesRafael Mendonça França2016-08-1664-301/+301
| | | | | | | | | | | | | | | | | | | | | | | | Style/SpaceBeforeBlockBraces Style/SpaceInsideBlockBraces Style/SpaceInsideHashLiteralBraces Fix all violations in the repository.
* | | Merge pull request #25570 from y-yagi/remove_useless_parameterEileen M. Uchitelle2016-08-151-3/+3
|\ \ \ | | | | | | | | remove useless parameter
| * | | remove useless parameteryuuji.yaginuma2016-06-291-4/+4
| | | |
* | | | Add documentation about `ActiveSupport.on_load`mrageh2016-08-131-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | [ci skip] This commit adds some docs that explain how `LazyLoadHooks.on_load` method works.
* | | | Merge pull request #26100 from vipulnsward/changelogsRafael França2016-08-121-3/+3
|\ \ \ \ | | | | | | | | | | Pass over changelogs
| * | | | Pass over changelogs [ci skip]Vipul A M2016-08-101-3/+3
| | | | |
* | | | | prefer __dir__ over __FILE__ in File.expand_pathXavier Noria2016-08-111-1/+3
|/ / / / | | | | | | | | | | | | | | | | | | | | Thinking .. relative to files is not natural, we are used to think "parent of a directory", and we have __dir__ nowadays.
* | | | let instance thread_mattr_* methods delegate to the class-level onesXavier Noria2016-08-081-4/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This code has too much duplication and the rationale for the concatenation may not be obvious to the reader. You define the ones at class-level, explain why does the code concatenates there, and then the convenience ones at instance-level just delegate.
* | | | Merge pull request #25681 from willnet/fix-thread_mattr_accessorYves Senn2016-08-083-4/+48
|\ \ \ \ | | | | | | | | | | | | | | | Fix `thread_mattr_accessor` share variable superclass with subclass
| * | | | Fix `thread_mattr_accessor` share variable superclass with subclasswillnet2016-08-043-8/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The current implementation of `thread_mattr_accessor` set variable sharing superclass with subclass. So the method doesn't work as documented. Precondition class Account thread_mattr_accessor :user end class Customer < Account end Account.user = "DHH" Account.user #=> "DHH" Customer.user = "Rafael" Customer.user # => "Rafael" Documented behavior Account.user # => "DHH" Actual behavior Account.user # => "Rafael" Current implementation set variable statically likes `Thread[:attr_Account_user]`, and customer also use it. Make variable name dynamic to use own thread-local variable.
* | | | | damn typos [ci skip]Xavier Noria2016-08-081-1/+1
| | | | |
* | | | | explain why aliasing uses explicit selfs [ci skip]Xavier Noria2016-08-081-0/+3
| | | | |
* | | | | code gardening: removes redundant selfsXavier Noria2016-08-0815-28/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A few have been left for aesthetic reasons, but have made a pass and removed most of them. Note that if the method `foo` returns an array, `foo << 1` is a regular push, nothing to do with assignments, so no self required.
* | | | | Add `Style/EmptyLines` in `.rubocop.yml` and remove extra empty linesRyuta Kamizono2016-08-0717-23/+0
| | | | |
* | | | | applies remaining conventions across the projectXavier Noria2016-08-0636-132/+102
| | | | |
* | | | | normalizes indentation and whitespace across the projectXavier Noria2016-08-0672-1595/+1587
| | | | |
* | | | | remove redundant curlies from hash argumentsXavier Noria2016-08-0611-40/+40
| | | | |
* | | | | modernizes hash syntax in activesupportXavier Noria2016-08-0657-1040/+1040
| | | | |
* | | | | applies new string literal convention to the rest of the projectXavier Noria2016-08-062-19/+19
| | | | | | | | | | | | | | | | | | | | | | | | | The current code base is not uniform. After some discussion, we have chosen to go with double quotes by default.
* | | | | applies new string literal convention in the gemspecsXavier Noria2016-08-061-16/+16
| | | | | | | | | | | | | | | | | | | | | | | | | The current code base is not uniform. After some discussion, we have chosen to go with double quotes by default.
* | | | | applies new string literal convention in activesupport/testXavier Noria2016-08-06141-2632/+2632
| | | | | | | | | | | | | | | | | | | | | | | | | The current code base is not uniform. After some discussion, we have chosen to go with double quotes by default.
* | | | | applies new string literal convention in activesupport/libXavier Noria2016-08-06176-705/+705
|/ / / / | | | | | | | | | | | | | | | | The current code base is not uniform. After some discussion, we have chosen to go with double quotes by default.
* | | | Add :weeks to the list of variable duration partsAndrew White2016-08-033-1/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since 434df00 week durations are no longer converted to days. This means we need to add :weeks to the parts that ActiveSupport::TimeWithZone will consider being of variable duration to take account of DST transitions. Fixes #26039.
* | | | Add documentation for ActiveSupport::StringInquirer [ci skip]kyatul2016-08-031-0/+6
| | | |
* | | | Revert "Adds `not_in?` onto Object"David Heinemeier Hansson2016-07-294-81/+0
| | | |
* | | | Add rationale for manually checking auth_tag length, which got lost when ↵Bart de Water2016-07-271-0/+4
| | | | | | | | | | | | | | | | #25874 was squashed before merging [skip ci]
* | | | Merge pull request #25914 from jmccartie/jm/not_inRafael França2016-07-224-0/+81
|\ \ \ \ | | | | | | | | | | Adds `not_in?` onto Object
| * | | | Adds `not_in?` onto ObjectJon McCartie2016-07-214-0/+81
| | | | |
* | | | | revises a regexpXavier Noria2016-07-221-1/+1
| | | | | | | | | | | | | | | | | | | | The exclamation mark is not a metacharacter.
* | | | | systematic revision of =~ usage in ASXavier Noria2016-07-2217-29/+43
| | | | | | | | | | | | | | | | | | | | | | | | | Where appropriate prefer the more concise Regexp#match?, String#include?, String#start_with?, and String#end_with?
* | | | | adds require for Regexp#match?Xavier Noria2016-07-221-0/+2
| | | | |
* | | | | revises styleXavier Noria2016-07-221-1/+1
| | | | |
* | | | | the infamous typo only seen in GitHub's diff [ci skip]Xavier Noria2016-07-221-1/+1
|/ / / /
* | | | performance boost for String#blank? in Ruby 2.4Xavier Noria2016-07-221-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Some casual benchmarks showed a 2x factor. All credit goes to @nurse.
* | | | define Range#match? if Ruby < 2.4Xavier Noria2016-07-223-2/+36
| | | | | | | | | | | | | | | | | | | | | | | | See the rationale in the documentation included in this patch. We are going to gradually introduce this predicate in the code base.