aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
Commit message (Collapse)AuthorAgeFilesLines
...
* | | 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-012-7/+22
|/ / / | | | | | | | | | | | | | | | 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-273-9/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* | | Clearify CHANGELOG for #23011 [ci skip]Godfrey Chan2016-06-271-2/+6
| | |
* | | Define `Pathname#as_json`Ryunosuke Sato2016-06-252-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-252-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-253-7/+25
|\ \ \ | | | | | | | | | | | | Use correct timezone when parsing date in json
| * | | Use correct timezone when parsing date in jsonGrzegorz Witek2016-01-223-7/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
| | | |
* | | | Update changelog for #25341Kevin McPhillips2016-06-221-0/+6
| | | |
* | | | 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-172-6/+87
|\ \ \ \ | | | | | | | | | | | | | | | | | | | | 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
| | | | |
| * | | | Test how evented file checker handles forksschneems2016-06-081-1/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Pretty proud of this. We are testing distributed processes synchronized via pipes which makes it deterministic. Pretty cool. We boot a listener in the parent process we then fork. Before we touch the file we verify the fork is booted using pipes. Then the parent process will touch the file while the fork waits on a pipe. Once the parent process signals that the file has been touched we continue inside of the fork.
| * | | | 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-062-6/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-132-1/+3
| | | | |
* | | | | Remove deprecated arguments in assert_nothing_raisedRafael Mendonça França2016-06-132-6/+5
| | | | |
* | | | | 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-102-4/+6
| | | | |
* | | | | Merge pull request #25341 from kmcphillips/masterRafael França2016-06-103-34/+124
|\ \ \ \ \ | | | | | | | | | | | | Broadcast #silence on ActiveSupport::Logger
| * | | | | Be explicit about what Logger class is expectedKevin McPhillips2016-06-091-3/+3
| | | | | |
| * | | | | Broadcast #silence on logger. Rewrite tests.Kevin McPhillips2016-06-092-31/+121
| | |_|_|/ | |/| | |
* | | | | Merge pull request #25352 from Shopify/optimized-delegateRafael França2016-06-101-2/+2
|\ \ \ \ \ | | | | | | | | | | | | Replace Kernel#caller by the faster Kernel#caller_locations
| * | | | | Replace Kernel#caller by the faster Kernel#caller_locationsJean Boussier2016-06-101-2/+2
| |/ / / /
* / / / / [ci skip] `define_model_callbacks` only exist in active model:Edouard CHIN2016-06-101-1/+6
|/ / / / | | | | | | | | | | | | - Also added a note when calling multiple time `define_callbacks`
* | | | existant => existentAbhishek Jain2016-06-091-1/+1
| | | |
* | | | Merge pull request #25265 from opti/improve/hash_compactKasper Timm Hansen2016-06-072-5/+16
|\ \ \ \ | | | | | | | | | | Improve Hash#compact! documentation and tests
| * | | | Improve Hash#compact! documentation and testsIgor Pstyga2016-06-032-5/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make it clear what should be returned when no changes were made to the hash. { c: true }.compact! # => nil
* | | | | Change doc for race_condition_ttl option of ↵Dimitris Zorbas2016-06-061-2/+2
| |/ / / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ActiveSupport::Cache::Store#fetch [ci skip] The related option of this method, `expires_in` is documented as expecting an `ActiveSupport::Duration` value. To minimize any sort of ambiguity between duration options, this change also documents `race_condition_ttl` accepting `ActiveSupport::Duration`.
* | | | Merge pull request #25263 from abhishekjain16/doc_accessor_threadEileen M. Uchitelle2016-06-031-2/+2
|\ \ \ \ | | | | | | | | | | [skip ci] Fix grammar
| * | | | [skip ci] Fix grammarAbhishek Jain2016-06-031-2/+2
| |/ / /
* | | | Merge branch 'master' of github.com:rails/docrailsVijay Dev2016-06-031-1/+1
|\ \ \ \ | |/ / / |/| | | | | | | | | | | Conflicts: guides/source/action_cable_overview.md
| * | | `behaviour` --> `behavior`Jon Moss2016-05-271-1/+1
| | | | | | | | | | | | | | | | http://edgeguides.rubyonrails.org/api_documentation_guidelines.html#english
* | | | Don't blank pad day of the month when formatting datesSean Griffin2016-06-023-3/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We are currently using `%e` which adds a space before the result if the digit is a single number. This leads to strings like `February 2, 2016` which is undesireable. I've opted to replace with 0 padding instead of removing the padding entirely, to preserve compatibility for those relying on the fact that the width is constant, and to be consistent with time formatting. Fixes #25251.
* | | | use OpenSSL::Cipher instead of deprecated OpenSSL::Cipher::Cipher for cipher ↵Vipul A M2016-05-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | creation. Based on https://github.com/rails/rails/pull/25192#discussion_r65018222 and http://ruby-doc.org/stdlib-1.9.3/libdoc/openssl/rdoc/OpenSSL/Cipher/Cipher.html
* | | | Add test for `delegate_missing_to` where method doesn't existJon Moss2016-05-261-0/+8
| | | |
* | | | Add tests for keyword arg to: for Module#delegateYosuke Kabuto2016-05-251-0/+15
| | | |
* | | | Normalize whitespace for Hash#compact documentation [ci skip]Mark Lee2016-05-241-6/+6
| | | | | | | | | | | | | | | | This is a similar change that occurred for Hash#except in #21087.
* | | | Don't delegate to private methods of the targerRafael Mendonça França2016-05-242-1/+19
| | | | | | | | | | | | | | | | And make sure that it doesn't even try to call the method in the target.
* | | | Merge pull request #25119 from javan/actioncable/blade-buildRafael França2016-05-241-1/+0
|\ \ \ \ | | | | | | | | | | Build action_cable.js with Blade
| * | | | Remove package:clean taskJavan Makhmali2016-05-241-1/+0
| | | | | | | | | | | | | | | | | | | | Introduced in d6f2000a67cc63aa67414c75ce77de671824ec52 and was only used by Action Cable. Now handled by Action Cable’s assets:compile task.
* | | | | Merge pull request #23930 from gsamokovarov/module-delegate-missing-toRafael Mendonça França2016-05-243-1/+129
|\ \ \ \ \ | |/ / / / |/| | | | | | | | | Introduce Module#delegate_missing_to
| * | | | Introduce Module#delegate_missing_toGenadi Samokovarov2016-02-273-1/+129
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When building decorators, a common pattern may emerge: class Partition def initialize(first_event) @events = [ first_event ] end def people if @events.first.detail.people.any? @events.collect { |e| Array(e.detail.people) }.flatten.uniq else @events.collect(&:creator).uniq end end private def respond_to_missing?(name, include_private = false) @events.respond_to?(name, include_private) end def method_missing(method, *args, &block) @events.send(method, *args, &block) end end With `Module#delegate_missing_to`, the above is condensed to: class Partition delegate_missing_to :@events def initialize(first_event) @events = [ first_event ] end def people if @events.first.detail.people.any? @events.collect { |e| Array(e.detail.people) }.flatten.uniq else @events.collect(&:creator).uniq end end end David suggested it in #23824.