aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test/core_ext
Commit message (Collapse)AuthorAgeFilesLines
* Add three new rubocop rulesRafael Mendonça França2016-08-1613-102/+102
| | | | | | | | Style/SpaceBeforeBlockBraces Style/SpaceInsideBlockBraces Style/SpaceInsideHashLiteralBraces Fix all violations in the repository.
* Merge pull request #25681 from willnet/fix-thread_mattr_accessorYves Senn2016-08-081-0/+16
|\ | | | | | | Fix `thread_mattr_accessor` share variable superclass with subclass
| * Fix `thread_mattr_accessor` share variable superclass with subclasswillnet2016-08-041-4/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | code gardening: removes redundant selfsXavier Noria2016-08-081-8/+8
| | | | | | | | | | | | | | | | | | 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-074-5/+0
| |
* | applies remaining conventions across the projectXavier Noria2016-08-062-4/+0
| |
* | normalizes indentation and whitespace across the projectXavier Noria2016-08-067-16/+15
| |
* | remove redundant curlies from hash argumentsXavier Noria2016-08-064-18/+18
| |
* | modernizes hash syntax in activesupportXavier Noria2016-08-0612-536/+536
| |
* | applies new string literal convention in activesupport/testXavier Noria2016-08-0655-1204/+1204
|/ | | | | 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-0/+32
| | | | | | | | 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.
* Revert "Adds `not_in?` onto Object"David Heinemeier Hansson2016-07-291-53/+0
|
* Adds `not_in?` onto ObjectJon McCartie2016-07-211-0/+53
|
* define Range#match? if Ruby < 2.4Xavier Noria2016-07-221-0/+24
| | | | | | See the rationale in the documentation included in this patch. We are going to gradually introduce this predicate in the code base.
* Added :fallback_string option to Array#to_sentenceoss922016-07-131-1/+6
|
* AS::Duration should serialize empty values correctly. (#25656)Paul Sadauskas2016-07-111-0/+1
| | | | | | | | | | | | | 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.
* existant => existentAbhishek Jain2016-06-091-1/+1
|
* Improve Hash#compact! documentation and testsIgor Pstyga2016-06-031-0/+8
| | | | | | | Make it clear what should be returned when no changes were made to the hash. { c: true }.compact! # => nil
* Don't blank pad day of the month when formatting datesSean Griffin2016-06-021-0/+11
| | | | | | | | | | | 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.
* 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
|
* Don't delegate to private methods of the targerRafael Mendonça França2016-05-241-0/+14
| | | | And make sure that it doesn't even try to call the method in the target.
* Merge pull request #23930 from gsamokovarov/module-delegate-missing-toRafael Mendonça França2016-05-241-0/+22
|\ | | | | | | Introduce Module#delegate_missing_to
| * Introduce Module#delegate_missing_toGenadi Samokovarov2016-02-271-0/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | Revert "Add default exceptions affected by suppress (#25099)"Rafael Mendonça França2016-05-231-9/+0
| | | | | | | | | | | | | | This reverts commit 28492204ee59a5aca2f3bc7b161d45724552686d. Reason: `suppress` without an argument doesn't actually tell what is supressing. Also, it can be confused with ActiveRecord::Base#suppress.
* | Add default exceptions affected by suppress (#25099)Alexey Zapparov2016-05-231-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Add default exceptions affected by suppress suppress { do_something_that_might_fail } # instead of begin do_something_that_might_fail rescue end # or do_something_that_might_fail rescue nil * Do not add default exceptions list constant [Rafael Mendonça França + Alexey Zapparov]
* | Support for unified Integer class in Ruby 2.4+Jeremy Daer2016-05-187-42/+36
| | | | | | | | | | | | | | | | Ruby 2.4 unifies Fixnum and Bignum into Integer: https://bugs.ruby-lang.org/issues/12005 * Forward compat with new unified Integer class in Ruby 2.4+. * Backward compat with separate Fixnum/Bignum in Ruby 2.2 & 2.3. * Drops needless Fixnum distinction in docs, preferring Integer.
* | Merge pull request #24930 from henrik/date-all-daySean Griffin2016-05-161-0/+17
|\ \ | | | | | | Introduce Date#all_day
| * | Introduce Date#all_dayHenrik Nyh2016-05-111-0/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | Useful for queries like: Item.where(created_at: Date.current.all_day) There was already a Time#all_day with the same behaviour, but for queries like the above, Date is more convenient.
* | | Add some assertions for BigDecimal#to_sYosuke Kabuto2016-05-151-0/+2
|/ /
* | Fix tests when preserving timezonesAndrew White2016-05-052-6/+19
| | | | | | | | | | | | These two tests are explicitly testing that to_time is returning times with the sytem timezone's UTC offset, therefore they will fail when running them with `ActiveSupport.to_time_preserves_timezone = true`.
* | Fix to_yaml test when run individuallyAndrew White2016-05-051-0/+1
| | | | | | | | | | | | | | | | | | The to_yaml method is undefined when running the test as: $ ruby -I lib:test test/core_ext/string_ext_test.rb Doesn't fail when running rake test:isolated presumably because something else has required 'yaml' already.
* | Fix some typos in comments.Joe Rafaniello2016-05-041-1/+1
| | | | | | | | [ci skip]
* | Fix initial value effects for sum along to ruby 2.4Kenta Murata2016-04-301-0/+78
| | | | | | | | Signed-off-by: Jeremy Daer <jeremydaer@gmail.com>
* | Change 1.week to create 1 week durations instead of 7 days durations.Andrey Novikov2016-04-281-2/+12
| | | | | | | | This is just to remove astonishment from getting `3600 seconds` from typing `1.hour`.
* | Revert "Change 1.week to create 1 week durations instead of 7 days durations."Jeremy Daer2016-04-271-3/+2
| | | | | | | | | | | | Regression: adding minutes/hours to a time would change its time zone This reverts commit 1bf9fe75a6473cb7501cae544cab772713e68cef.
* | Little perfomance fix for Array#split.lvl0nax2016-04-261-0/+8
| | | | | | | | | | | | | | | | | | Calculating ------------------------------------- before 40.770k i/100ms after 58.464k i/100ms ------------------------------------------------- before 629.568k (± 5.0%) i/s - 3.180M after 1.159M (± 4.5%) i/s - 5.788M
* | Make getlocal and getutc always return instances of TimeAndrew White2016-04-233-1/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously these methods could return either a DateTime or a Time depending on how the ActiveSupport::TimeWithZone instance had been constructed. Changing to always return an instance of Time eliminates a possible stack level too deep error in to_time where it was wrapping a DateTime instance. As a consequence of this the internal time value is now always an instance of Time in the UTC timezone, whether that's as the UTC time directly or a representation of the local time in the timezone. There should be no consequences of this internal change and if there are it's a bug due to leaky abstractions.
* | Add DateTime#subsecAndrew White2016-04-231-0/+5
| | | | | | | | | | Mirrors the Time#subsec method by returning the fraction of the second as a Rational.
* | Change Time#sec_fraction to use subsecAndrew White2016-04-231-0/+14
| | | | | | | | Time instances can have fractional parts smaller than a nanosecond.
* | Add compatibility for Ruby 2.4 `to_time` changesAndrew White2016-04-232-0/+118
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In Ruby 2.4 the `to_time` method for both `DateTime` and `Time` will preserve the timezone of the receiver when converting to an instance of `Time`. Since Rails 5.0 will support Ruby 2.2, 2.3 and later we need to introduce a compatibility layer so that apps that upgrade do not break. New apps will have a config initializer file that defaults to match the new Ruby 2.4 behavior going forward. For information about the changes to Ruby see: https://bugs.ruby-lang.org/issues/12189 https://bugs.ruby-lang.org/issues/12271 Fixes #24617.
* | Merge pull request #24552 from yui-knk/raise_argument_errorJeremy Daer2016-04-191-0/+4
|\ \ | | | | | | | | | Raise `ArgumentError` when an invalid form is passed to `Date#to_time`
| * | Raise `ArgumentError` when an invalid form is passed to `Date#to_time`yui-knk2016-04-171-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | Before this commit `NoMethodError: undefined method `form_name' for Time:Class` is raised when an invalid argument is passed. It is better to raise `ArgumentError` and show list of valid arguments to developers.
* | | Ruby 2.4: compat with new Array#sumJeremy Daer2016-04-181-3/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ruby 2.4 introduces `Array#sum`, but it only supports numeric elements, breaking our `Enumerable#sum` which supports arbitrary `Object#+`. To fix, override `Array#sum` with our compatible implementation. Native Ruby 2.4: %w[ a b ].sum # => TypeError: String can't be coerced into Fixnum With `Enumerable#sum` shim: %w[ a b ].sum # => 'ab' We tried shimming the fast path and falling back to the compatible path if it fails, but that ends up slower even in simple causes due to the cost of exception handling. Our only choice is to override the native `Array#sum` with our `Enumerable#sum`.
* | | `ActiveSupport::Duration` supports ISO8601 formatting and parsing.Arnau Siches, Andrey Novikov2016-04-181-0/+85
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ```ruby ActiveSupport::Duration.parse('P3Y6M4DT12H30M5S') (3.years + 3.days).iso8601 ``` Inspired by Arnau Siches' [ISO8601 gem](https://github.com/arnau/ISO8601/) and rewritten by Andrey Novikov with suggestions from Andrew White. Test data from the ISO8601 gem redistributed under MIT license. (Will be used to support the PostgreSQL interval data type.)
* | | Change 1.week to create 1 week durations instead of 7 days durations.Andrey Novikov2016-04-181-2/+3
| | | | | | | | | | | | This is just to remove astonishment from getting `3600 seconds` from typing `1.hour`.
* | | Restore Hash#transform_keys behavior to always return a Hash instanceEmily2016-04-121-0/+16
|/ /
* | Merge pull request #24345 from ↵Rafael França2016-04-051-3/+18
|\ \ | | | | | | | | | | | | mtsmfm/fix-marshal-with-autoloading-for-nested-class Fix marshal with autoloading for nested class/module
| * | Fix marshal with autoloading for nested class/moduleFumiaki MATSUSHIMA2016-03-281-3/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | #24150 break autoloading for nested class/module. There is test for nested class but it doesn't work correctly. Following code will autoload `ClassFolder::ClassFolderSubclass` before `Marshal.load`: `assert_kind_of ClassFolder::ClassFolderSubclass, Marshal.load(dumped)`
* | | Match `String#to_time`'s behaviour to rubySiim Liiser2016-04-041-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | Previously `String#to_time` returned the midnight of the current date in some cases where there was no relavant information in the string. Now the method returns `nil` instead in those cases. Fixes #22958.