Issue #15298 has been reported by gollahon (Daniel Gollahon).

----------------------------------------
Misc #15298: Inconsistent date errors
https://bugs.ruby-lang.org/issues/15298

* Author: gollahon (Daniel Gollahon)
* Status: Open
* Priority: Normal
* Assignee: 
----------------------------------------
When using Date, if you initialize an invalid date you'll get an `ArgumentError`:

```ruby
Date.new(1999, 1, 32)   # => ArgumentError: invalid date
```

This is as expected.

If you provide `nil` as any of the three arguments, you do not get this error. You get three unrelated errors (two NoMethodErrors and one TypeError), none of which are specific to date:

```ruby
Date.new(1999, 1, nil)  # => NoMethodError: undefined method `div' for nil:NilClass
Date.new(1999, nil, 32) # => TypeError: no implicit conversion from nil to integer
Date.new(nil, 1, 32)    # => NoMethodError: undefined method `<' for nil:NilClass
```

My proposal is that all invalid date initialization cases should raise `ArgumentError: invalid date` or some uniform date-specific error. This would make debugging more convenient / user friendly and makes rescuing `ArgumentError` actually catch all Date initialization errors. I find it weird that these internal calls error out and are exposed.

Thanks,
Daniel



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>