@@ -27,7 +27,7 @@ private function __construct()
2727 public static function init (PreferenceGroup $ name , CastableEnum $ cast = Cast::STRING ): static
2828 {
2929 $ builder = new PreferenceBuilder ();
30- return $ builder ->withName ($ name )->withCast ($ cast );
30+ return $ builder ->withName ($ name )->withCast ($ cast )-> nullable ( false ) ;
3131 }
3232
3333 public static function delete (PreferenceGroup $ name ): int
@@ -82,6 +82,13 @@ public function withRule(ValidationRule $rule): static
8282 return $ this ;
8383 }
8484
85+ public function nullable (bool $ nullable = true )
86+ {
87+ $ this ->preference ->nullable = $ nullable ;
88+ return $ this ;
89+ }
90+
91+
8592 public function create (): Preference
8693 {
8794 return $ this ->updateOrCreate ();
@@ -103,7 +110,7 @@ public function updateOrCreate(): Preference
103110 /**
104111 * @throws ValidationException
105112 */
106- public static function initBulk (array $ preferences ): void
113+ public static function initBulk (array $ preferences, bool $ nullable = false ): void
107114 {
108115 if (empty ($ preferences )) {
109116 throw new InvalidArgumentException ("no preferences provided " );
@@ -113,6 +120,10 @@ public static function initBulk(array $preferences): void
113120 if (empty ($ preferenceData ['cast ' ])) {
114121 $ preferenceData ['cast ' ] = Cast::STRING ;
115122 }
123+ if (!array_key_exists ('nullable ' , $ preferenceData )) {
124+ $ preferenceData ['nullable ' ] = $ nullable ;
125+ }
126+
116127 if (empty ($ preferenceData ['name ' ]) || !($ preferenceData ['name ' ] instanceof PreferenceGroup)) {
117128 throw new InvalidArgumentException (
118129 sprintf ("index: #%s name is required and needs to be a PreferenceGroup " , $ key )
@@ -130,7 +141,12 @@ public static function initBulk(array $preferences): void
130141 }
131142
132143 if (!empty ($ preferenceData ['default_value ' ])) {
133- ValidationHelper::validateValue ($ preferenceData ['default_value ' ], $ preferenceData ['cast ' ], $ preferenceData ['rule ' ]);
144+ ValidationHelper::validateValue (
145+ $ preferenceData ['default_value ' ],
146+ $ preferenceData ['cast ' ] ?? null ,
147+ $ preferenceData ['rule ' ] ?? null ,
148+ $ preferenceData ['nullable ' ],
149+ );
134150 }
135151
136152
@@ -159,6 +175,7 @@ public static function initBulk(array $preferences): void
159175 'default_value ' => null ,
160176 'description ' => '' ,
161177 'rule ' => null ,
178+ 'nullable ' => false ,
162179 ], $ preferenceData );
163180 }
164181
0 commit comments