Commit Graph

2135 Commits

Author SHA1 Message Date
lulalala
e7834214a6 Fix equality comparison raising error bug 2019-03-31 22:59:13 +08:00
lulalala
90815b12c5 Fix spec 2019-03-31 22:59:12 +08:00
lulalala
23dd7c0285 Assert deprecation 2019-03-31 22:59:12 +08:00
lulalala
ba38b40e83 Split messages and to_hash
Fix double wrapping issue
Revert messages_for wrapping. It's a new method so no need to put
deprecation warnings.
2019-03-31 22:59:12 +08:00
lulalala
abee034368 Raise deprecation for calling [:f] = 'b' or [:f] << 'b'
Revert some tests to ensure back compatibility
2019-03-31 22:59:12 +08:00
lulalala
67d262f70f Add deprecation to slice! 2019-03-31 22:59:12 +08:00
lulalala
be1585fca0 Nested attribute error's attribute name to use different key:
To keep the same as SHA dcafe995bfe51e53dd04607956be9b54073e9cb6
2019-03-31 22:59:12 +08:00
lulalala
582a8e2f94 String override options in #import to convert to symbol 2019-03-31 22:59:12 +08:00
lulalala
86620cc3aa Allow errors to remove duplicates, and ensure cyclic associations w/ autosave duplicate errors can be removed
See SHA 7550f0a016ee6647aaa76c0c0ae30bebc3867288
2019-03-31 22:59:12 +08:00
lulalala
2a06f13099 Add messages_for 2019-03-31 22:59:12 +08:00
lulalala
cccbac6df6 Add a transitional method objects, for accessing the array directly.
This is because we try to accommodate old hash behavior, so `first` and `last` now does not return Error object.
2019-03-31 22:59:12 +08:00
lulalala
86b4aa1175 Backward compatibility for errors.collect/select etc.
All enumerable methods must go through the `each` so it retain old hash behavior.
Revert this after Rails 6.1 in order to speed up enumerable methods.
2019-03-31 22:59:12 +08:00
lulalala
655036b09a Fix spec as generate_message is no longer called during validation 2019-03-31 22:59:12 +08:00
lulalala
ea77205a9f Add convenience method group_by_attribute
Many operations need grouping of errors by attributes, e.g. ActiveRecord::AutosaveAssociation#association_valid?

Refactor other methods using group_by_attribute
2019-03-31 22:59:12 +08:00
lulalala
d9011e3935 Change errors
Allow `each` to behave in new way if block arity is 1

Ensure dumped marshal from Rails 5 can be loaded

Make errors compatible with marshal and YAML dumps from previous versions of Rails

Add deprecation warnings

Ensure each behave like the past, sorted by attribute
2019-03-31 22:59:12 +08:00
lulalala
ef68d3e35c Add ActiveModel::Error and NestedError
Add initialize_dup to deep dup.

Move proc eval and flexible message position out to Errors,
because proc eval is needed for Errors#added? and Errors#delete
2019-03-31 22:59:12 +08:00
lulalala
db0256cad7 Fix misalignment caused by SHA eebb9ddf9ba559a510975c486fe59a4edc9da97d 2019-03-31 22:59:12 +08:00
Ryuta Kamizono
b89a3e7e63 Tweaks CHANGELOGs and docs [ci skip]
* add leading `#` before `=>` since hash rocket is valid Ruby code
* add backticks
* remove trailing spaces
* and more
2019-03-31 08:38:37 +09:00
Ryuta Kamizono
406d3a926c
Merge pull request #35794 from kamipo/type_cast_symbol_false
Type cast falsy boolean symbols on boolean attribute as false
2019-03-30 05:07:07 +09:00
Ryuta Kamizono
2d12f800f1 Type cast falsy boolean symbols on boolean attribute as false
Before 34cc301, type casting by boolean attribute when querying is a
no-op, so finding by truthy boolean string (i.e.
`where(value: "true") # => value = 'true'`) didn't work as expected
(matches it to FALSE in MySQL #32624). By type casting is ensured, a
value on boolean attribute is always serialized to TRUE or FALSE.

In PostgreSQL, `where(value: :false) # => value = 'false'` was a valid
SQL, so 34cc301 is a regresson for PostgreSQL since all symbol values
are serialized as TRUE.

I'd say using `:false` is mostly a developer's mistake (user's input
basically comes as a string), but `:false` on boolean attribute is
serialized as TRUE is not a desirable behavior for anybody.

This allows falsy boolean symbols as false, i.e.
`klass.create(value: :false).value? # => false` and
`where(value: :false) # => value = FALSE`.

Fixes #35676.
2019-03-30 04:18:25 +09:00
Abhay Nikam
9841f6897b Fixed the test description for i18n-customize-full-message after rename in #35789 2019-03-30 00:00:45 +05:30
Prathamesh Sonpatki
d8ba2f7c56
Rename i18n_full_message config option to i18n_customize_full_message
- I feel `i18n_customize_full_messages` explains the meaning of the
  config better.
- Followup of https://github.com/rails/rails/pull/32956
2019-03-29 21:38:48 +05:30
eileencodes
a2bd669ed2 v6.0.0.beta3 release
-----BEGIN PGP SIGNATURE-----
 
 iQEzBAABCAAdFiEEEvJkGf0BARV+D0L2ulxXUSC76N8FAlyJN4cACgkQulxXUSC7
 6N9ZXAf/Wx7edIct8kZzcC6irlROx4DzpNbrrH792sO1OAcnoFDE7DPkokllTEP/
 4kzC42lca/XG27MCl7E0dtVD8hIyAl89nxid6cwKFVZVTPIRVc1wjXkoiWy/cvd7
 6+9IjxhlgrzxGnw3aWZJG7H3iqz69yr55aoSDU/TbMqq5kQrqNF95vr2nc8LEUco
 SLQj0pO/tfJdHquSeX0JiXn3VSEHT+5TdLGQ3J/w0wFU6mkecH4MJMJvMwLFx/v4
 llnvF6HyfSLASWbrpdD3h6MQHpImDoee5vILXAHzPdSaEVcVa1cDFtMcPMYiu8Dw
 AGdCAaHQhZFFGoYK472+o6pur0dxEA==
 =5dET
 -----END PGP SIGNATURE-----

Merge tag 'v6.0.0.beta3'

v6.0.0.beta3 release
2019-03-13 13:11:10 -04:00
Sharang Dashputre
5289a0b6b9 Edit a changelog entry [ci skip] 2019-03-12 20:00:13 +05:30
Rafael França
f2cd46bd04
Merge pull request #35424 from Korri/validation-rules-locale-fallback
Fall back to parent locale before falling back to the :errors namespace
2019-03-11 21:47:38 -04:00
Hugo Vacher
9ccc5e1042 Update Changelog with new locale fallback behavior on validation 2019-03-11 15:55:16 -04:00
eileencodes
7c87fd5635 Prep release
* Update RAILS_VERSION
* Bundle
* rake update_versions
* rake changelog:header
2019-03-11 11:58:15 -04:00
Kasper Timm Hansen
0fc1397784
Merge pull request #35559 from ashishprajapati/ashishprajapati/important_textual_improvements
Added missing guide links in documentation and minor wording fix
2019-03-09 22:54:21 +01:00
ashishprajapati
e3ef12b310 Added missing guide links in README documentation and minor wording fix [ci skip] 2019-03-10 03:17:01 +05:30
Abhay Nikam
027e492b6f Fix links in gemspec and docs from http to https. 2019-03-09 19:42:35 +05:30
Abhay Nikam
476abd403b Updated links from http to https in guides, docs, etc 2019-03-09 16:43:47 +05:30
Samantha John
755112c7b1 Replace “can not” with “cannot”. 2019-03-06 16:35:52 -05:00
Hugo Vacher
2176f4b30c Fall back to parent locale before it falls back to the :errors namespace 2019-03-04 16:54:06 -05:00
Rafael Mendonça França
5e6e505083
Preparing for 6.0.0.beta2 release 2019-02-25 17:45:04 -05:00
alkesh26
38941df2aa activemodel typo fix. 2019-02-25 17:16:10 +05:30
Ryuta Kamizono
f8a798c8e6
Merge pull request #35336 from kamipo/dont_allow_non_numeric_string_matches_to_zero
Don't allow `where` with non numeric string matches to 0 values
2019-02-21 18:58:44 +09:00
Ryuta Kamizono
9c9c950d02 Revert "Speed up integer casting from DB"
This reverts commit 52fddcc653458456f98b3683dffd781cf00b35fe.

52fddcc was to short-circuit `ensure_in_range` in `cast_value`. But that
caused a regression for empty string deserialization.

Since 7c6f393, `ensure_in_range` is moved into `serialize`. As 52fddcc
said, the absolute gain is quite small. So I've reverted that commit to
fix the regression.
2019-02-21 13:11:42 +09:00
Ryuta Kamizono
357cd23d3a Don't allow where with non numeric string matches to 0 values
This is a follow-up of #35310.

Currently `Topic.find_by(id: "not-a-number")` matches to a `id = 0`
record. That is considered as silently leaking information.

If non numeric string is given to find by an integer column, it should
not be matched to any record.

Related #12793.
2019-02-20 22:00:56 +09:00
Ryuta Kamizono
b09d8f6bb3 Don't allow where with invalid value matches to nil values
That is considered as silently leaking information.
If type casting doesn't return any actual value, it should not be
matched to any record.

Fixes #33624.
Closes #33946.
2019-02-18 16:57:10 +09:00
Ryuta Kamizono
4ea067017a Merge pull request #29651 from Sayanc93/return-correct-date
Return correct date in ActiveModel for time to date conversions
2019-02-18 16:04:47 +09:00
Ryuta Kamizono
1dfd01475d Extract duplicated serialize methods into helpers
Since `serialize` is passed user input args (from `where`, schema
default, etc), a helper should provide `serialize` if the helper also
provide `cast`.

Related #32624, 34cc301, a741208.
2019-02-18 13:16:33 +09:00
Ryuta Kamizono
907280ddfd Fix type cast with values hash for Date type
`value_from_multiparameter_assignment` defined by
`AcceptsMultiparameterTime` helper requires `default_timezone` method
which is defined at `TimeValue` helper.
Since `Date` type doesn't include `TimeValue`, I've extracted `Timezone`
helper to be shared by `Date`, `DateTime`, and `Time` types.
2019-02-18 04:20:52 +09:00
Ryuta Kamizono
25b3cbb241 Add edge test cases for integer and string types 2019-02-17 21:44:15 +09:00
alkesh26
8b66ea5d2c activemodel typo fixes. 2019-01-31 02:43:44 +05:30
yuuji.yaginuma
6a1b798560 Add missing require for Float#to_d
In master, tests pass because `bigdecimal/util` requires in
`active_support/xml_mini`.
But test fails in 5-2-stable because that require does not exist.
Ref: https://travis-ci.org/rails/rails/jobs/484627996#L1969
2019-01-26 12:38:34 +09:00
Edouard CHIN
f01e38509c Fix NumericalityValidator on object responding to to_f:
- If you had a PORO that acted like a Numeric, the validator would
  work correctly because it was previously using `Kernel.Float`
  which is implicitely calling `to_f` on the passed argument.

  Since rails/rails@d126c0d , we are now using `BigDecimal` which does
  not implicitely call `to_f` on the argument, making the validator
  fail with an underlying `TypeError` exception.

  This patch replate the `is_decimal?` check with `Kernel.Float`.
  Using `Kernel.Float` as argument for the BigDecimal call has two
  advantages:

  1. It calls `to_f` implicetely for us.
  2. It's also smart enough to detect that `Kernel.Float("a")` isn't a
     Numeric and will raise an error.
     We don't need the `is_decimal?` check thanks to that.

  Passing `Float::DIG` as second argument to `BigDecimal` is mandatory
  because the precision can't be omitted when passing a Float.
  `Float::DIG` is what is used internally by ruby when calling
  `123.to_d`

  https://github.com/ruby/ruby/blob/trunk/ext/bigdecimal/lib/bigdecimal/util.rb#L47

- Another small issue introduced in https://github.com/rails/rails/pull/34693
  would now raise a TypeError because `Regexp#===` will just return
  false if the passed argument isn't a string or symbol, whereas
  `Regexp#match?` will.
2019-01-22 20:46:16 +01:00
Andrew White
ccdedeb9d5
Fix year value when casting a multiparameter time hash
When assigning a hash to a time attribute that's missing a year
component (e.g. a `time_select` with `:ignore_date` set to `true`)
then the year defaults to 1970 instead of the expected 2000. This
results in the attribute changing as a result of the save.

Before:

    event = Event.new(start_time: { 4 => 20, 5 => 30 })
    event.start_time # => 1970-01-01 20:30:00 UTC
    event.save
    event.reload
    event.start_time # => 2000-01-01 20:30:00 UTC

After:

    event = Event.new(start_time: { 4 => 20, 5 => 30 })
    event.start_time # => 2000-01-01 20:30:00 UTC
    event.save
    event.reload
    event.start_time # => 2000-01-01 20:30:00 UTC
2019-01-21 09:23:12 +00:00
Rafael Mendonça França
5a0230c67f
Preparing for 6.0.0.beta1 release 2019-01-18 15:42:12 -05:00
Rafael Mendonça França
80873a49af
Require hash/keys inside active_model/callbacks
This file uses assert_valid_keys but it was not being required. You can
reproduce this error with a script that uses this feature by using those
requires:

    require 'active_model'
    require 'active_model/callbacks'
2019-01-16 14:14:18 -05:00
Kasper Timm Hansen
647d7e6167
Revert "Revert "Merge pull request #34387 from yhirano55/rails_info_properties_json""
I reverted the wrong commit. Damn it.

This reverts commit f66a977fc7ae30d2a07124ad91924c4ee638a703.
2019-01-08 22:19:22 +01:00