aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib
Commit message (Collapse)AuthorAgeFilesLines
* 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-031-1/+1
| | | | | | | | 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-292-16/+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-222-0/+16
|\ | | | | Adds `not_in?` onto Object
| * Adds `not_in?` onto ObjectJon McCartie2016-07-212-0/+16
| |
* | revises a regexpXavier Noria2016-07-221-1/+1
| | | | | | | | The exclamation mark is not a metacharacter.
* | systematic revision of =~ usage in ASXavier Noria2016-07-2211-17/+25
| | | | | | | | | | 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
|/
* 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-221-0/+4
| | | | | | See the rationale in the documentation included in this patch. We are going to gradually introduce this predicate in the code base.
* Allow MessageEncryptor to take advantage of authenticated encryption modesBart de Water2016-07-211-4/+37
| | | | | | AEAD modes like `aes-256-gcm` provide both confidentiality and data authenticity, eliminating the need to use MessageVerifier to check if the encrypted data has been tampered with. Signed-off-by: Jeremy Daer <jeremydaer@gmail.com>
* Introduce `assert_changes` and `assert_no_changes`Genadi Samokovarov2016-07-171-0/+89
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Those are assertions that I really do miss from the standard `ActiveSupport::TestCase`. Think of those as a more general version of `assert_difference` and `assert_no_difference` (those can be implemented by assert_changes, should this change be accepted). Why do we need those? They are useful when you want to check a side-effect of an operation. `assert_difference` do cover a really common case, but we `assert_changes` gives us more control. Having a global error flag? You can test it easily with `assert_changes`. In fact, you can be really specific about the initial state and the terminal one. ```ruby error = Error.new(:bad) assert_changes -> { Error.current }, from: nil, to: error do expected_bad_operation end ``` `assert_changes` follows `assert_difference` and a string can be given for evaluation as well. ```ruby error = Error.new(:bad) assert_changes 'Error.current', from: nil, to: error do expected_bad_operation end ``` Check out the test cases if you wanna see more examples. :beers:
* Added :fallback_string option to Array#to_sentenceoss922016-07-131-2/+8
|
* Merge pull request #25790 from mrageh/wrap-lazy-load-hooks-in-moduleRafael França2016-07-131-18/+26
|\ | | | | Wrap module around lazy load hooks
| * Wrap module around lazy load hooksmrageh2016-07-121-18/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | Fix for issue https://github.com/rails/rails/issues/25784 Prior to this commit the lazy_load_hooks.rb file contained important lazy load hooks. Since [7c90d91](https://github.com/rails/rails/commit/7c90d91c3c43bdbba25d38589aed0e2940af3bc8) the [documentation](http://api.rubyonrails.org/files/activesupport/lib/active_support/lazy_load_hooks_rb.html) did not display the comments in this file as the docs for load hooks. This commit wraps the code within this file in a module so we can display the documentation for `ActiveSupport` load hooks. By extending `ActiveSupport` with this module, all the methods within it should still be accessible through `ActiveSupport`.
* | Missing require 'active_support/multibyte/unicode'Akira Matsuda2016-07-121-0/+1
| |
* | Raise ArgumentError for bad strptime argumentsJohn Gesimondo2016-07-111-0/+1
|/
* AS::Duration should serialize empty values correctly. (#25656)Paul Sadauskas2016-07-111-1/+3
| | | | | | | | | | | | | The current implementation serializes zero-length durations incorrectly (it serializes as `"-P"`), and cannot un-serialize itself: ``` [1] pry(main)> ActiveSupport::Duration.parse(0.minutes.iso8601) ActiveSupport::Duration::ISO8601Parser::ParsingError: Invalid ISO 8601 duration: "-P" is empty duration from /Users/rando/.gem/ruby/2.3.1/gems/activesupport-5.0.0/lib/active_support/duration/iso8601_parser.rb:96:in `raise_parsing_error' ``` Postgres empty intervals are serialized as `"PT0S"`, which is also parseable by the Duration deserializer, so I've modified the `ISO8601Serializer` to do the same. Additionally, the `#normalize` function returned a negative sign if `parts` was blank (all zero). Even though this fix does not rely on the sign, I've gone ahead and corrected that, too, in case a future refactoring of `#serialize` uses it.
* Update class_attribute docsJohn Gesimondo2016-07-101-1/+1
|
* `travel/travel_to` travel time helpers, now raise on nested calls,Vipul A M2016-07-021-8/+43
| | | | | | | | | | | | | | | | | | | | | | | | | as this can lead to confusing time stubbing. Instead of: travel_to 2.days.from_now do # 2 days from today travel_to 3.days.from_now do # 5 days from today end end preferred way to achieve above is: travel_to 2.days.from_now # 2 days from today travel_back travel_to 5.days.from_now # 5 days from today Closes #24690 Fixes #24689
* Merge pull request #25344 from matthewd/debug-locksMatthew Draper2016-07-022-5/+49
|\ | | | | ActionDispatch::DebugLocks
| * Provide a middleware to debug misbehaving locksMatthew Draper2016-06-102-5/+49
| | | | | | | | | | Only intended to be enabled when in use; by necessity, it sits above any reasonable access control.
* | Merge pull request #24146 from matthewd/latch-as-proxyMatthew Draper2016-07-021-5/+12
|\ \ | | | | | | Don't inherit from Concurrent::CountDownLatch
| * | Don't inherit from Concurrent::CountDownLatchMatthew Draper2016-03-111-5/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | That class mangles .new, which interferes with our deprecation warning. More generally, it suggests we shouldn't be subclassing without a very good reason, and avoiding one allocation doesn't seem to meet that criteria. In passing, recommend the simpler Concurrent::Event for the common count=1 case.
* | | Merge pull request #25600 from pan/constantize-docfixVipul A M2016-07-011-4/+4
|\ \ \ | | | | | | | | fix ActiveSupport::Infector.constantize usage API doc [ci skip]
| * | | fix ActiveSupport::Infector.constantize usage API doc [ci skip]Pan GaoYong2016-06-301-4/+4
| | | |
* | | | Partially revert #25192Matthew Draper2016-07-011-6/+6
|/ / / | | | | | | | | | | | | | | | KeyGenerator is used in other contexts, and we cannot change its output... even if it does accidentally default to generating excess key material for our primary internal usage.
* | | We default to using aes-256-cbc as our verification/signing cipher. It can ↵Vipul A M2016-06-271-6/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | accept key lengths of 128, 192 or 256-bit, whereas currently we were providing twice the acceptable value. ruby < 2.4 allowed accepting these values, as extra key bits were ignored. Since https://github.com/ruby/ruby/commit/ce635262f53b760284d56bb1027baebaaec175d1 this now has a strict checking on key length. Default to key length 32 bytes, to match the compatible length for aes-256-cbc Fixes #25185
* | | Define `Pathname#as_json`Ryunosuke Sato2016-06-251-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the Pathname object is converted as JSON, it should be a string that means itself. Expected: ``` >> Pathname.new('/path/to/somewhere.txt').as_json "/path/to/somewhere.txt" ``` Actual: ``` >> Pathname.new('/path/to/somewhere.txt').as_json {"path"=>"/path/to/somewhere.txt"} ```
* | | Define `URI::Generic#as_json`Ryunosuke Sato2016-06-251-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When the URI object is converted as JSON, it is expected that it is a string that means its URI. Expected: ``` >> URI.parse('http://example.com').as_json "http://example.com" ``` Actual: ``` >> URI.parse('http://example.com').as_json {"scheme"=>"http", "user"=>nil, "password"=>nil, "host"=>"example.com", "port"=>80, "path"=>"", "query"=>nil, "opaque"=>nil, "fragment"=>nil, "parser"=> {"regexp"=> {"SCHEME"=>"(?-mix:\\A[A-Za-z][A-Za-z0-9+\\-.]*\\z)", "USERINFO"=>"(?-mix:\\A(?:%\\h\\h|[!$&-.0-;=A-Z_a-z~])*\\z)", "HOST"=> "(?-mix:\\A(?:(?<IP-literal>\\[(?:(?<IPv6address>(?:\\h{1,4}:){6}(?<ls32>\\h{1,4}:\\h{1,4}|(?<IPv4address>(?<dec-octet>[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5]|\\d)\\.\\g<dec-octet>\\.\\g<dec-octet>\\.\\g<dec-octet>))|::(?:\\h{1,4}:){5}\\g<ls32>|\\h{,4}::(?:\\h{1,4}:){4}\\g<ls32>|(?:(?:\\h{1,4}:)?\\h{1,4})?::(?:\\h{1,4}:){3}\\g<ls32>|(?:(?:\\h{1,4}:){,2}\\h{1,4})?::(?:\\h{1,4}:){2}\\g<ls32>|(?:(?:\\h{1,4}:){,3}\\h{1,4})?::\\h{1,4}:\\g<ls32>|(?:(?:\\h{1,4}:){,4}\\h{1,4})?::\\g<ls32>|(?:(?:\\h{1,4}:){,5}\\h{1,4})?::\\h{1,4}|(?:(?:\\h{1,4}:){,6}\\h{1,4})?::)|(?<IPvFuture>v\\h+\\.[!$&-.0-;=A-Z_a-z~]+))\\])|\\g<IPv4address>|(?<reg-name>(?:%\\h\\h|[!$&-.0-9;=A-Z_a-z~])*))\\z)", "ABS_PATH"=> "(?-mix:\\A\\/(?:%\\h\\h|[!$&-.0-;=@-Z_a-z~])*(?:\\/(?:%\\h\\h|[!$&-.0-;=@-Z_a-z~])*)*\\z)", "REL_PATH"=> "(?-mix:\\A(?:%\\h\\h|[!$&-.0-;=@-Z_a-z~])+(?:\\/(?:%\\h\\h|[!$&-.0-;=@-Z_a-z~])*)*\\z)", "QUERY"=>"(?-mix:\\A(?:%\\h\\h|[!$&-.0-;=@-Z_a-z~\\/?])*\\z)", "FRAGMENT"=>"(?-mix:\\A(?:%\\h\\h|[!$&-.0-;=@-Z_a-z~\\/?])*\\z)", "OPAQUE"=>"(?-mix:\\A(?:[^\\/].*)?\\z)", "PORT"=> "(?-mix:\\A[\\x09\\x0a\\x0c\\x0d ]*\\d*[\\x09\\x0a\\x0c\\x0d ]*\\z)"}}} ```
* | | Merge pull request #23011 from arnvald/bugfix/correctly_parse_dateGodfrey Chan2016-06-251-2/+9
|\ \ \ | | | | | | | | | | | | Use correct timezone when parsing date in json
| * | | Use correct timezone when parsing date in jsonGrzegorz Witek2016-01-221-2/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes https://github.com/rails/rails/issues/22171 Time specified in ISO 8601 format without `Z` should be considered as local time, yet until now it was treated as UTC. This commit fixes problem by parsing time using timezone specified in application config. The downside of this solution is performance hit (`Time.zone.parse` is ~ 1.6x slower than `Time.parse`), so maybe there's a better solution.
* | | | [ci skip] Add link to method referenced in ActiveSupport::PerThreadRegistryAlex Kitchens2016-06-241-1/+1
| | | |
* | | | Create times in rails timezone not system timezone [ci skip]aarongray2016-06-211-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | Time.new is a Ruby method that uses system timezone. Traveling in time using it is a recipe for confusion. Instead, Time.zone.local should be used since it uses the Rails timezone.
* | | | Merge pull request #25302 from ↵Sean Griffin2016-06-171-5/+44
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | schneems/schneems/evented-file-boot-at-check-time-master EventedFileUpdateChecker boots once per process
| * | | | Lock the whole boot step, get rid of unneeded hashschneems2016-06-131-5/+9
| | | | |
| * | | | Listen earlier in EventedFileUpdateCheckerschneems2016-06-061-6/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some files like routes.rb may be very large and vary between the initialization of the app and the first request. In these scenarios if we are using a forked process we cannot rely on the files to be unchanged between when the code is booted and the listener is started. For that reason we start a listener on the main process immediately, when we detect that a process does not have a listener started we force the updated state to be true, so we are guaranteed to catch any changes made between the code initialization and the fork.
| * | | | [ci skip] document EventedFileUpdateCheckerschneems2016-06-061-0/+28
| | | | |
| * | | | EventedFileUpdateChecker boots once per processschneems2016-06-061-5/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We need one file checker booted per process as talked about in #24990. Before we do a check to see if any updates have been registered by the listener we first check to make sure that the current process has booted a listener. We are intentionally not starting a listener when the checker is created. This way we can avoid #25259 in which puma warns of multiple threads created before fork. As written the listener for each process will be invoked by the `ActionDispatch::Executor` middleware when the `updated?` method is called. This is the first middleware on the stack and will be invoked before application code is read into memory. The downside of this approach is that the API is a little less obvious. I.e. that you have to call `updated?` to get the listener to start is not intuitive. We could make `boot!` not private if we want to make the API a little nicer. Alternatively we could boot when the checker is initialized however this reintroduces the puma threads warning, and also means that in cases of `rails server` or when using `preload!` that we have extra threads notifying of changes on a process that we don't care about. [close #24990] [close #25259]
* | | | | Change AS::Callback to ActiveSupport::Callbacks in doc [ci skip]Alex Kitchens2016-06-141-1/+1
| | | | |
* | | | | Fix missing requires for object/blankRafael Mendonça França2016-06-131-0/+2
| | | | |
* | | | | Remove deprecated arguments in assert_nothing_raisedRafael Mendonça França2016-06-131-6/+1
| | | | |
* | | | | Remove an unused require in ActiveSupport::TestCaseGenadi Samokovarov2016-06-131-2/+0
| | | | | | | | | | | | | | | | | | | | We used to have `assert_blank` and `assert_presence`. [ci skip]
* | | | | Remove `_run_class_setup`Jon Moss2016-06-101-11/+0
| | | | | | | | | | | | | | | | | | | | Should have been removed by 3073c531983de243219fb55be93fbcebfdd9c44e.
* | | | | Make sure the yielded variable is the loggerRafael Mendonça França2016-06-101-2/+2
| | | | |
* | | | | Merge pull request #25341 from kmcphillips/masterRafael França2016-06-101-0/+18
|\ \ \ \ \ | | | | | | | | | | | | Broadcast #silence on ActiveSupport::Logger
| * | | | | Broadcast #silence on logger. Rewrite tests.Kevin McPhillips2016-06-091-0/+18
| | |_|_|/ | |/| | |