Skip to content

Commit d6b94cc

Browse files
p-mongop
andauthored
MONGOID-4753 Make global Boolean definition opt-in (#4927)
* MONGOID-4753 Make global Boolean definition opt-in * Add a note about restoring global Boolean * fix tests Co-authored-by: Oleg Pudeyev <[email protected]>
1 parent edbc89a commit d6b94cc

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

source/tutorials/mongoid-upgrade.txt

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,79 @@ Upgrading to Mongoid 7.3
2323

2424
The following sections describe significant changes in Mongoid 7.3.
2525

26+
``::Boolean`` Removed
27+
---------------------
28+
29+
**Breaking change:** Mongoid 7.3 removes the global ``::Boolean`` class.
30+
31+
This change should have no impact on classes that simply use ``Boolean``
32+
fields, as the ``Boolean`` class is aliased from ``Mongoid::Fields``
33+
(which is included in ``Mongoid::Document``). The following field definition
34+
continues to work in 7.3 as it did in 7.2:
35+
36+
.. code-block:: ruby
37+
38+
class User
39+
include Mongoid::Document
40+
41+
field :verified, type: Boolean
42+
end
43+
44+
However, code that is not executed in the context of a class including
45+
``Mongoid::Document`` may need to explicitly qualify ``Boolean`` references.
46+
The following snippet fails with Mongoid 7.3 due to ``Boolean`` being
47+
unqualified:
48+
49+
.. code-block:: ruby
50+
51+
class User
52+
include Mongoid::Document
53+
end
54+
55+
User.field :verified, type: Boolean
56+
57+
To fix it, use the fully-qualified ``Mongoid::Boolean`` class:
58+
59+
.. code-block:: ruby
60+
61+
User.field :verified, type: Mongoid::Boolean
62+
63+
Note that ``class_eval`` is executed in the scope of the caller, not in
64+
the scope of the class being modified. Thus even when using ``class_eval``
65+
it is necessary to fully qualify ``Mongoid::Boolean``:
66+
67+
.. code-block:: ruby
68+
69+
User.class_eval do
70+
field :verified, type: Mongoid::Boolean
71+
end
72+
73+
Additionally, in Mongoid 7.2 ``::Boolean`` and ``Mongoid::Boolean`` were
74+
different classes. In Mongoid 7.3 there is only one class which is
75+
``Mongoid::Boolean``.
76+
77+
It is possible to restore the global ``::Boolean`` class by executing in
78+
your application:
79+
80+
.. code-block:: ruby
81+
82+
Boolean = Mongoid::Boolean
83+
84+
Note that this aliases ``Mongoid::Boolean`` to ``::Boolean`` such that there
85+
is still only a single Boolean class:
86+
87+
.. code-block:: ruby
88+
89+
# With Mongoid 7.3:
90+
Boolean = Mongoid::Boolean
91+
Boolean == Mongoid::Boolean
92+
# => true
93+
94+
# With Mongoid 7.2:
95+
Boolean == Mongoid::Boolean
96+
# => false
97+
98+
2699
Selector Key Stringification
27100
----------------------------
28101

0 commit comments

Comments
 (0)