aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support
Commit message (Collapse)AuthorAgeFilesLines
* String#truncate_bytes: limit to N bytes without breaking multibyte charsJeremy Daer2018-02-181-0/+41
| | | | | This faithfully preserves grapheme clusters (characters composed of other characters and combining marks) and other multibyte characters.
* `String#strip_heredoc` preserves frozennessJeremy Daer2018-02-171-1/+3
| | | | | | | | | | | | | | | | | | ```ruby "foo".freeze.strip_heredoc.frozen? # => true ``` Fixes the case where frozen string literals would inadvertently become unfrozen: ```ruby foo = <<-MSG.strip_heredoc la la la MSG foo.frozen? # => false !?? ```
* Fixes typosDharam Gollapudi2018-02-171-3/+3
| | | Fixes typos
* Rails 6 requires Ruby 2.4.1+Jeremy Daer2018-02-1710-58/+12
| | | | | | Skipping over 2.4.0 to sidestep the `"symbol_from_string".to_sym.dup` bug. References #32028
* Remove require Object#blank? monkey patchSean Collins2018-02-171-1/+0
| | | | | | | Object#blank? used to be used in this file, but it's not anymore. This avoids a monkey-patch, for those who want to use just this isolated feature of ActiveSupport.
* Remove extra conditions in HWIDA since Rails 6 does not support Ruby 2.2bogdanvlviv2018-02-171-15/+13
| | | | See https://github.com/ruby/ruby/blob/ruby_2_3/NEWS
* Rails 6 requires Ruby 2.3+Jeremy Daer2018-02-172-31/+17
|
* Define transform_keys! in HashWithIndifferentAccessRafael Mendonça França2018-02-161-0/+8
| | | | | | | Make sure that when transforming the keys of a HashWithIndifferentAccess we can still access with indifferent access in Ruby 2.5. Closes #32007.
* Remove usage of strip_heredoc in the framework in favor of <<~Rafael Mendonça França2018-02-161-2/+1
| | | | | Some places we can't remove because Ruby still don't have a method equivalent to strip_heredoc to be called in an already existent string.
* Add test parallelization to Railseileencodes2018-02-152-0/+188
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Provides both a forked process and threaded parallelization options. To use add `parallelize` to your test suite. Takes a `workers` argument that controls how many times the process is forked. For each process a new database will be created suffixed with the worker number; test-database-0 and test-database-1 respectively. If `ENV["PARALLEL_WORKERS"]` is set the workers argument will be ignored and the environment variable will be used instead. This is useful for CI environments, or other environments where you may need more workers than you do for local testing. If the number of workers is set to `1` or fewer, the tests will not be parallelized. The default parallelization method is to fork processes. If you'd like to use threads instead you can pass `with: :threads` to the `parallelize` method. Note the threaded parallelization does not create multiple database and will not work with system tests at this time. parallelize(workers: 2, with: :threads) The threaded parallelization uses Minitest's parallel exector directly. The processes paralleliztion uses a Ruby Drb server. For parallelization via threads a setup hook and cleanup hook are provided. ``` class ActiveSupport::TestCase parallelize_setup do |worker| # setup databases end parallelize_teardown do |worker| # cleanup database end parallelize(workers: 2) end ``` [Eileen M. Uchitelle, Aaron Patterson]
* PERF: symbolize ivar, to reduce dupesSam2018-02-151-1/+1
| | | | | | | | | | | | I noticed this in my memory profiler report. ``` 153 "@default_url_options" 152 /home/sam/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/activesupport-5.1.4/lib/active_support/core_ext/class/attribute.rb:84 ``` 152 copies of the string `@default_url_options` are retained on the heap in Discourse post boot. Since this is just used for ivar lookups there is no need to use a string.
* Merge pull request #31866 from fatkodima/redis_cache-connection_poolRafael Mendonça França2018-02-143-22/+48
|\ | | | | | | Add support for connection pooling on RedisCacheStore
| * Add support for connection pooling on RedisCacheStorefatkodima2018-02-013-22/+48
| |
* | Doc: fixes typo `cache:` -> `compress:`Joseph Page2018-02-121-1/+1
| | | | | | | | | | | | [ci skip] Closes #31967
* | Merge pull request #31923 from jdelStrother/duration-deserializationRafael França2018-02-071-0/+8
|\ \ | | | | | | Fix yaml deserialization of ActiveSupport::Duration
| * | Fix yaml deserialization of ActiveSupport::DurationJonathan del Strother2018-02-071-0/+8
| | | | | | | | | | | | | | | | | | This ensures the duration's @parts hash has a default value, to avoid this regression introduced in 5.1: YAML.load(YAML.dump(10.minutes)) + 1 # => NoMethodError: undefined method `+' for nil:NilClass
* | | Use Redis#mget for RedisCacheStore#fetch_multifatkodima2018-02-051-0/+8
| | |
* | | Add missing instrumentation to RedisCacheStore#read_multifatkodima2018-02-051-1/+5
| | |
* | | Redis cache store: consolidate serializationJeremy Daer2018-02-041-17/+21
| | | | | | | | | | | | Use `serialize_entry` throughout and introduce `serialize_entries`.
* | | RedisCacheStore: fix `#write_multi` mset serializationfatkodima2018-02-041-1/+8
| |/ |/| | | | | | | Closes #31886 Fixes #31884
* | Revert "Merge pull request #31447 from fatkodima/redis_cache-connection_pool"George Claghorn2018-01-313-71/+23
| | | | | | | | | | This reverts commit ac74e2c521f6ddc0eac02d74a1313261bcc1d60f, reversing changes made to ffdb06136152b3c5f7f4a93ca5928e16e755d228.
* | Update default deprecation horizonYuji Yaginuma2018-01-311-1/+1
| | | | | | | | Because the master branch is already 6.0.
* | Start Rails 6.0 development!!!Rafael Mendonça França2018-01-301-3/+3
| | | | | | | | :tada::tada::tada:
* | Merge pull request #31803 from rmosolgo/rm-dependenciesRafael França2018-01-261-0/+1
|\ \ | | | | | | Fix infinite loop when unloading autoloaded modules
| * | Remove duplicates after autoloading modulesRobert Mosolgo2018-01-261-0/+1
| | |
* | | Improve fault tolerance for redis cache storefatkodima2018-01-231-4/+11
| | |
* | | Add support for connection pooling on RedisCacheStorefatkodima2018-01-223-23/+71
|/ /
* | Merge pull request #31732 from ↵Matthew Draper2018-01-197-8/+8
|\ \ | | | | | | | | | | | | koic/enable_autocorrect_for_lint_end_alignment_cop Enable autocorrect for `Lint/EndAlignment` cop
| * | Enable autocorrect for `Lint/EndAlignment` copKoichi ITO2018-01-187-8/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ### Summary This PR changes .rubocop.yml. Regarding the code using `if ... else ... end`, I think the coding style that Rails expects is as follows. ```ruby var = if cond a else b end ``` However, the current .rubocop.yml setting does not offense for the following code. ```ruby var = if cond a else b end ``` I think that the above code expects offense to be warned. Moreover, the layout by autocorrect is unnatural. ```ruby var = if cond a else b end ``` This PR adds a setting to .rubocop.yml to make an offense warning and autocorrect as expected by the coding style. And this change also fixes `case ... when ... end` together. Also this PR itself is an example that arranges the layout using `rubocop -a`. ### Other Information Autocorrect of `Lint/EndAlignment` cop is `false` by default. https://github.com/bbatsov/rubocop/blob/v0.51.0/config/default.yml#L1443 This PR changes this value to `true`. Also this PR has changed it together as it is necessary to enable `Layout/ElseAlignment` cop to make this behavior.
* | | Support hash as first argument in `assert_difference`. (#31600)Julien Meichelbeck2018-01-181-7/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Support hash as first argument for `assert_difference`. This allows to specify multiple numeric differences in the same assertion. Example: assert_difference 'Article.count' => 1, 'Notification.count' => 2 do # post :create, params: { article: {...} } end * Support error message when passing a hash as a first parameter * Format CHANGELOG properly [Julien Meichelbeck + Rafael Mendonça França]
* | | Support for connection pooling on mem cache storeGabriel Sobrinho2018-01-181-9/+25
| | |
* | | Convert keys to binary in the Redis cache storeGeorge Claghorn2018-01-171-1/+1
|/ / | | | | | | Fix encoding errors when using the pure-Ruby Redis driver instead of Hiredis. Dodge incompatibilities between UTF-8 and arbitrary value encodings, which rear their heads when the Redis driver tries to build a single command string from incompatibly-encoded keys and values.
* | Fix constant referenceGeorge Claghorn2018-01-161-1/+1
| | | | | | | | Update the long key handling test so it triggers truncation in the Redis cache store.
* | Merge pull request #31651 from eugeneius/use_sha1_digestsSean Griffin2018-01-121-3/+4
|\ \ | | | | | | Use SHA-1 for non-sensitive digests by default
| * | Use SHA-1 for non-sensitive digests by defaultEugene Kenny2018-01-081-3/+4
| | | | | | | | | | | | | | | | | | Instead of providing a configuration option to set the hash function, switch to SHA-1 for new apps and allow upgrading apps to opt in later via `new_framework_defaults_5_2.rb`.
* | | Merge pull request #30268 from ignatiusreza/instrumentationRyuta Kamizono2018-01-112-43/+54
|\ \ \ | | | | | | | | | | | | add instrumentation for read_multi
| * | | add instrumentation for read_multiIgnatius Reza2017-12-292-43/+54
| | | | | | | | | | | | | | | | currently it's not possible to know what the hit rates are from read_multi
* | | | Merge pull request #31624 from y-yagi/fix_minitest_511Aaron Patterson2018-01-101-2/+4
|\ \ \ \ | | | | | | | | | | Add support for Minitest 5.11
| * | | | Use `Minitest::Result` for retain test resultyuuji.yaginuma2018-01-031-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Runnable.marshal_dump/load was removed in https://github.com/seattlerb/minitest/commit/00433fc0a4fdd0e6b302aace633384ba1312237 Instead, `Minitest::Result` is contained test result and the that can be marshalled.
* | | | | Fix "the the " [ci skip]Ryuta Kamizono2018-01-101-1/+1
| | | | |
* | | | | Merge pull request #29685 from ayanko/fix-slow-name-error-missing-nameRyuta Kamizono2018-01-101-0/+5
|\ \ \ \ \ | |_|_|/ / |/| | | | Fix performance issue with NameError#missing_name on ruby >= v2.3.0.
| * | | | Fix performance issue with NameError#missing_name on ruby >= v2.3.0.Andriy Yanko2017-07-101-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | Since ruby v2.3.0 `did_you_mean` gem shipped and ENABLED by default. It patches NameError#message with spell corrections which are SLOW.
* | | | | Remove meaningless checkyuuji.yaginuma2018-01-081-1/+1
| | | | | | | | | | | | | | | | | | | | `ActiveSupport::OrderedOptions` responds to any message.
* | | | | Allow use_authenticated_message_encryption to be set in ↵Eugene Kenny2018-01-072-5/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | new_framework_defaults_5_2.rb Enabling this option in new_framework_defaults_5_2.rb didn't work before, as railtie initializers run before application initializers. Using `respond_to?` to decide whether to set the option wasn't working either, as `ActiveSupport::OrderedOptions` responds to any message.
* | | | | Merge pull request #31049 from gwincr11/cg-blankRyuta Kamizono2018-01-041-1/+10
|\ \ \ \ \ | | | | | | | | | | | | Add support for multiple encodings in String.blank?
| * | | | | Add support for multiple encodings in String.blank?Cory Gwin @gwincr112017-11-171-1/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Motivation: - When strings are encoded with `.encode("UTF-16LE")` `.blank?` throws an `Encoding::CompatibilityError` exception. - We tested multiple implementation to see what the fastest implementation was, rescueing the execption seems to be the fastest option we could find. Related Issues: - #28953 Changes: - Add a rescue to catch the exception. - Added a `Concurrent::Map` to store a cache of encoded regex objects for requested encoding types. - Use the new `Concurrent::Map` cache to return the correct regex for the string being checked.
* | | | | | Merge pull request #31011 from ↵Ryuta Kamizono2018-01-041-5/+6
|\ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | danielma/dma/assert-changes-with-to-should-still-assert-change `assert_changes` should always assert some change
| * | | | | | `assert_changes` should always assert some changeDaniel Ma2017-11-131-5/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | While using `assert_changes`, I came across some unexpected behavior: if you provide a `to:` argument, and the expression matches but didn't actually change, the assertion will pass. The way `assert_changes` reads, I assumed that it would both assert that there was any change at all, _and_ that the expression changed to match my `to:` argument. In the case of just a `from:` argument, `assert_changes` does what I expect as well. It asserts that the before value `=== from` and that the after value changed. My key change is that `assert_changes` will now _always_ assert that expression changes, no matter what combination of `from:` and `to:` arguments
* | | | | | | Remove undefined `track_deletion` callback [ci skip]Ryuta Kamizono2018-01-031-3/+0
| |_|_|/ / / |/| | | | |
* | | | | | Merge pull request #31310 from kinnrot/duration-moduloRyuta Kamizono2018-01-011-1/+3
|\ \ \ \ \ \ | |_|_|_|/ / |/| | | | | Duration created with no parts will have a default seconds part eqaul to 0