aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test/core_ext
Commit message (Collapse)AuthorAgeFilesLines
* Add more rubocop rules about whitespacesRafael Mendonça França2016-10-2915-793/+793
|
* Fix copy_time_to: Copy nsec instead of usecJosua Schmid2016-10-201-1/+3
| | | | | | | | | | | | | `copy_time_to` is a helper function for date and time calculations. It's being used by `prev_week`, `next_week` and `prev_weekday` to keep the time fraction when jumping around between days. Previously the nanoseconds part was lost during the operation. This lead to problems in practice if you were using the `end_of_day` calculation. Resulting in the time fraction of `end_of_day` not being the same as next week's `end_of_day`. With this fix `copy_time_to` doesn't forget the `nsec` digits.
* Fixnum and Bignum are deprecated in Ruby trunkMatthew Draper2016-10-081-2/+2
| | | | https://bugs.ruby-lang.org/issues/12739
* Revert "Merge pull request #26677 from tbalthazar/26644"Andrew White2016-10-021-6/+0
| | | | | | | | Turns out trying to cache on localtime with arguments is too hard so we'll do it on DateAndTime::Compatibility#to_time instead. This reverts commit 9ce2d1b1a43fc4ef3db59849b7412d30583a4074, reversing changes made to 53ede1aff2025d4391d0e05ba471fdaf3110a99c.
* Fix `ActiveSupport::TimeWithZone#localtime`Thomas Balthazar2016-10-011-0/+6
| | | | | | | | | | | | | | | | | Previously memoization in `localtime` wasn't taking the `utc_offset` parameter into account when returning a cached value. It now caches the computed value depending on the `utc_offset` parameter, e.g: Time.zone = "US/Eastern" t = Time.zone.local(2016,5,2,11) # => Mon, 02 May 2016 11:00:00 EDT -04:00 t.localtime(-7200) # => 2016-05-02 13:00:00 -0200 t.localtime(-3600) # => 2016-05-02 14:00:00 -0100
* Fix ActiveSupport::TimeWithZone#inThomas Balthazar2016-09-241-1/+31
| | | | | | | | | | | | | | | Previously calls to `in` were being sent to the non-DST aware method `Time#since` via `method_missing`. It is now aliased to the DST aware `ActiveSupport::TimeWithZone#+` which handles transitions across DST boundaries, e.g: Time.zone = "US/Eastern" t = Time.zone.local(2016,11,6,1) # => Sun, 06 Nov 2016 01:00:00 EDT -05:00 t.in(1.hour) # => Sun, 06 Nov 2016 01:00:00 EST -05:00
* improve error message when include assertions failMichael Grosser2016-09-164-63/+63
| | | | | | assert [1, 3].includes?(2) fails with unhelpful "Asserting failed" message assert_includes [1, 3], 2 fails with "Expected [1, 3] to include 2" which makes it easier to debug and more obvious what went wrong
* RuboCop is 100% green :tada:Xavier Noria2016-09-021-1/+5
|
* 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`