Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
9f534dc
fix(BaseEntity): handle null values in fill (#278)
elpete Aug 22, 2026
914bfaf
feat(Casts): delegate null handling to custom casts (#279)
elpete Aug 22, 2026
7ce1dd4
fix(Events): cast attributes assigned in preSave (#273) (#280)
elpete Aug 22, 2026
f732e77
fix: prioritize aliases over column names (#281)
elpete Aug 22, 2026
d771cca
fix: exclude read-only attributes from persistence (#282)
elpete Aug 22, 2026
a3826be
fix: restore qb 14 compatibility (#283)
elpete Aug 22, 2026
205754a
test: cover QuickService get options (#266) (#284)
elpete Aug 22, 2026
908a44e
Surface missing methods inside qb callbacks (#319)
elpete Aug 22, 2026
1a8fe7c
Improve missing query scope errors (#317)
elpete Aug 22, 2026
9e8accd
fix: eager load belongsToThrough relationships (#254) (#287)
elpete Aug 22, 2026
9fad424
fix: eager load one-through relationships (#307)
elpete Aug 22, 2026
0545868
fix: advance nested has relationship paths (#294)
elpete Aug 22, 2026
b854e30
Fix table qualification in whereIn subqueries (#288)
elpete Aug 22, 2026
17fd8d6
perf: cache qualified entity columns (#306)
elpete Aug 22, 2026
8add4f9
fix: refresh scoped virtual projections (#299)
elpete Aug 22, 2026
2300482
fix: reset cached queries with entity state (#300)
elpete Aug 22, 2026
e32eecd
fix: synchronize loaded has-many relationships (#301)
elpete Aug 22, 2026
ab790c1
Skip hasMany queries with null composite keys (#323)
elpete Aug 22, 2026
5967b7e
fix: preserve entity keys in selected columns (#348)
elpete Aug 22, 2026
c55ce37
fix: qualify aliased selected attributes (#351)
elpete Aug 22, 2026
024a7e7
fix: pass query options through find (#347)
elpete Aug 22, 2026
d6a0ba9
test: verify hasManyThrough subselect aliases (#264) (#285)
elpete Aug 23, 2026
3a72541
test: cover scoped compound-key withCount (#262) (#286)
elpete Aug 23, 2026
436aac4
test: cover simple QuickQB update values (#246) (#289)
elpete Aug 23, 2026
4c088cc
test: cover eager loaded relationship defaults (#242) (#291)
elpete Aug 23, 2026
0d5f177
test: cover constrained hasManyThrough eager loading (#241) (#292)
elpete Aug 23, 2026
1633021
test: cover original data in entity preUpdate events (#239) (#293)
elpete Aug 23, 2026
633c922
test: cover pagination ordered by subquery attributes (#236) (#295)
elpete Aug 23, 2026
00dcdff
test: cover discriminated cast mementos (#233) (#297)
elpete Aug 23, 2026
cae103b
test: cover date updates through query receivers (#228) (#298)
elpete Aug 23, 2026
a460136
test: strengthen relationship fill coverage (#188) (#302)
elpete Aug 23, 2026
6c486ae
test: cover QuickCollection eager loading (#309)
elpete Aug 23, 2026
e37ac8d
test: support full-null relationship coverage (#312)
elpete Aug 23, 2026
4ce97c3
test: preserve bindings while chunking scoped queries (#151) (#315)
elpete Aug 23, 2026
4963e5a
Test eager loading on CBORM compatible entities (#322)
elpete Aug 23, 2026
830f99f
test: cover polymorphic eager loading key names (#122) (#324)
elpete Aug 23, 2026
4192148
test: verify relationship fill does not persist (#120) (#325)
elpete Aug 23, 2026
41c3b1f
test: cover has one through initial constraints (#119) (#326)
elpete Aug 23, 2026
a89a72d
test: compare whereHas through constraints (#116) (#327)
elpete Aug 23, 2026
675e55c
test: cover updateOrCreate primary key aliases (#107) (#329)
elpete Aug 23, 2026
e5c47eb
test: distinguish UUID and GUID key types (#80) (#332)
elpete Aug 23, 2026
62143b5
test: ignore non-persistent structs in dirty hashes (#146) (#316)
elpete Aug 23, 2026
3b2f5c6
fix: recognize key columns mapped to aliases (#235) (#296)
elpete Aug 23, 2026
2536ec2
feat: add relationship loaded hooks (#305)
elpete Aug 23, 2026
9cb2615
fix: transform default relationships to mementos (#159) (#310)
elpete Aug 23, 2026
99c5cfc
Add whereHasValue relationship shortcut (#318)
elpete Aug 23, 2026
32c370b
feat: fill non-persistent entity properties (#313)
elpete Aug 23, 2026
ada23eb
Fix eager-load key type coercion (#274)
jbeers Aug 23, 2026
12fefa3
feat: add whereBelongsTo relationship constraints (#311)
elpete Aug 23, 2026
27a165e
feat: dispatch custom entity lifecycle events (#330)
elpete Aug 24, 2026
56103b9
feat: add belongs-to-many pivot models (#353)
elpete Aug 24, 2026
a808fa6
feat: create belongs-to-many related entities (#331)
elpete Aug 24, 2026
9d605a3
Add createAll for multiple entities (#335)
elpete Aug 24, 2026
92db1cb
Test scoped subselects with all (#336)
elpete Aug 24, 2026
5ba2231
Add entity-aware chunk queries (#342)
elpete Aug 24, 2026
3b21380
Allow isDirty checks for one attribute (#343)
elpete Aug 24, 2026
833adf6
Add isClean entity state checks (#344)
elpete Aug 24, 2026
80a206b
Reject duplicate entity property names (#337)
elpete Aug 25, 2026
5bc7d7c
Add selective and explicit eager-load clearing (#345)
elpete Aug 25, 2026
057c5b3
Touch only configured timestamp fields (#341)
elpete Aug 25, 2026
05b8a6f
refactor: reduce internal closure usage
elpete Aug 26, 2026
85cad3a
feat: support virtual attribute defaults (#113) (#328)
elpete Aug 26, 2026
219975a
feat: fill relationships on new entities (#303)
elpete Aug 26, 2026
8a3544f
fix: restore cross-engine CI compatibility (#354)
elpete Aug 26, 2026
5e2143c
feat: return empty relationships for new entities (#304)
elpete Aug 26, 2026
9e6a746
Support upserts through Quick entity queries (#334)
elpete Aug 26, 2026
c90d39c
Refresh database-generated attributes on save (#338)
elpete Aug 26, 2026
76de7d2
test: cover has-many deleteAll bindings (#352)
elpete Aug 28, 2026
4e9c35a
feat: add entity replication (#350)
elpete Aug 28, 2026
d087d36
feat: guard loaded entity keys from mutation (#349)
elpete Aug 28, 2026
10989a0
Add built-in soft delete support (#340)
elpete Aug 28, 2026
fbcf968
feat: add model factories for testing (#355)
elpete Aug 28, 2026
5e2997c
refactor: remove soft delete closures (#356)
elpete Aug 28, 2026
8db931d
perf: reduce attribute state allocations
elpete Aug 28, 2026
b4c9483
perf: clone refresh queries on demand
elpete Aug 28, 2026
c28b033
perf: index deep runtime attribute overlays
elpete Aug 28, 2026
64474d8
docs: record performance candidate outcomes
elpete Aug 28, 2026
7dbd605
docs: record cross-engine performance verification
elpete Aug 28, 2026
ac22297
test: decompose metadata and hydration performance
elpete Aug 29, 2026
395f81b
perf: separate entity definitions from metadata cache
elpete Aug 29, 2026
082dab2
perf: resolve hydration attributes once
elpete Aug 29, 2026
8dda70f
docs: record hydration plan outcome
elpete Aug 29, 2026
7066c9f
docs: record query seed outcome
elpete Aug 29, 2026
7524f1e
docs: complete architecture candidate dispositions
elpete Aug 29, 2026
fe06ee0
docs: record final performance verification
elpete Aug 29, 2026
8df610b
test: collect concurrent registry results portably
elpete Aug 29, 2026
d2fc9cb
feat: Add automatic entity timestamps
elpete Aug 30, 2026
590c370
fix: preserve uninitialized BoxLang attributes
elpete Aug 30, 2026
fbc0006
test: verify timestamps precede persistence events
elpete Aug 30, 2026
4fa72d0
Apply cfformat changes
elpete Sep 15, 2026
cc98bbd
Apply cfformat changes
github-actions[bot] Sep 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 105 additions & 0 deletions .github/patches/coldbox-full-null.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
diff --git a/tests/resources/app/coldbox/system/testing/VirtualApp.cfc b/tests/resources/app/coldbox/system/testing/VirtualApp.cfc
--- a/tests/resources/app/coldbox/system/testing/VirtualApp.cfc
+++ b/tests/resources/app/coldbox/system/testing/VirtualApp.cfc
@@ -94 +94 @@
- return !isNull( application.cbController );
+ return application.keyExists( "cbController" ) && !isNull( application.cbController );
@@ -112 +112 @@
- if ( !isNull( application.cbController ) ) {
+ if ( application.keyExists( "cbController" ) && !isNull( application.cbController ) ) {
diff --git a/tests/resources/app/coldbox/system/logging/config/LogBoxConfig.cfc b/tests/resources/app/coldbox/system/logging/config/LogBoxConfig.cfc
--- a/tests/resources/app/coldbox/system/logging/config/LogBoxConfig.cfc
+++ b/tests/resources/app/coldbox/system/logging/config/LogBoxConfig.cfc
@@ -64 +64 @@
- if ( isNull( variables.utility ) ) {
+ if ( !variables.keyExists( "utility" ) || isNull( variables.utility ) ) {
diff --git a/tests/resources/app/coldbox/system/core/util/Util.cfc b/tests/resources/app/coldbox/system/core/util/Util.cfc
--- a/tests/resources/app/coldbox/system/core/util/Util.cfc
+++ b/tests/resources/app/coldbox/system/core/util/Util.cfc
@@ -296 +296 @@
- if ( isNull( variables.mixerUtil ) ) {
+ if ( !variables.keyExists( "mixerUtil" ) || isNull( variables.mixerUtil ) ) {
diff --git a/tests/resources/app/coldbox/system/logging/Logger.cfc b/tests/resources/app/coldbox/system/logging/Logger.cfc
--- a/tests/resources/app/coldbox/system/logging/Logger.cfc
+++ b/tests/resources/app/coldbox/system/logging/Logger.cfc
@@ -399 +399 @@
- if ( isNull( local.logEvent ) ) {
+ if ( !local.keyExists( "logEvent" ) || isNull( local.logEvent ) ) {
diff --git a/tests/resources/app/coldbox/system/core/delegates/Env.cfc b/tests/resources/app/coldbox/system/core/delegates/Env.cfc
--- a/tests/resources/app/coldbox/system/core/delegates/Env.cfc
+++ b/tests/resources/app/coldbox/system/core/delegates/Env.cfc
@@ -87 +87 @@
- if ( isNull( variables.javaSystem ) ) {
+ if ( !variables.keyExists( "javaSystem" ) || isNull( variables.javaSystem ) ) {
diff --git a/tests/resources/app/coldbox/system/web/services/InterceptorService.cfc b/tests/resources/app/coldbox/system/web/services/InterceptorService.cfc
--- a/tests/resources/app/coldbox/system/web/services/InterceptorService.cfc
+++ b/tests/resources/app/coldbox/system/web/services/InterceptorService.cfc
@@ -194 +194 @@
- if ( !isNull( arguments.interceptData ) ) {
+ if ( arguments.keyExists( "interceptData" ) && !isNull( arguments.interceptData ) ) {
diff --git a/tests/resources/app/coldbox/system/testing/BaseTestCase.cfc b/tests/resources/app/coldbox/system/testing/BaseTestCase.cfc
--- a/tests/resources/app/coldbox/system/testing/BaseTestCase.cfc
+++ b/tests/resources/app/coldbox/system/testing/BaseTestCase.cfc
@@ -162 +162 @@
- if ( isNull( variables._ranBeforeAll ) ) {
+ if ( !variables.keyExists( "_ranBeforeAll" ) || isNull( variables._ranBeforeAll ) ) {
@@ -172 +172 @@
- if ( isNull( variables._ranAfterAll ) ) {
+ if ( !variables.keyExists( "_ranAfterAll" ) || isNull( variables._ranAfterAll ) ) {
@@ -784 +784 @@
- if ( !isNull( arguments.interceptData ) ) {
+ if ( arguments.keyExists( "interceptData" ) && !isNull( arguments.interceptData ) ) {
@@ -847 +847 @@
- if ( isNull( variables.cbUtil ) ) {
+ if ( !variables.keyExists( "cbUtil" ) || isNull( variables.cbUtil ) ) {
@@ -859 +859 @@
- if ( isNull( variables.env ) ) {
+ if ( !variables.keyExists( "env" ) || isNull( variables.env ) ) {
diff --git a/tests/resources/app/coldbox/system/ioc/Builder.cfc b/tests/resources/app/coldbox/system/ioc/Builder.cfc
--- a/tests/resources/app/coldbox/system/ioc/Builder.cfc
+++ b/tests/resources/app/coldbox/system/ioc/Builder.cfc
@@ -82 +82 @@
- if ( isNull( variables.coldboxDSL ) ) {
+ if ( !variables.keyExists( "coldboxDSL" ) || isNull( variables.coldboxDSL ) ) {
@@ -94 +94 @@
- if ( isNull( variables.cacheBoxDSL ) ) {
+ if ( !variables.keyExists( "cacheBoxDSL" ) || isNull( variables.cacheBoxDSL ) ) {
@@ -106 +106 @@
- if ( isNull( variables.logBoxDSL ) ) {
+ if ( !variables.keyExists( "logBoxDSL" ) || isNull( variables.logBoxDSL ) ) {
diff --git a/tests/resources/app/coldbox/system/cache/store/ConcurrentStore.cfc b/tests/resources/app/coldbox/system/cache/store/ConcurrentStore.cfc
--- a/tests/resources/app/coldbox/system/cache/store/ConcurrentStore.cfc
+++ b/tests/resources/app/coldbox/system/cache/store/ConcurrentStore.cfc
@@ -261 +261 @@
- if ( isNull( variables.collections ) ) {
+ if ( !variables.keyExists( "collections" ) || isNull( variables.collections ) ) {
diff --git a/tests/resources/app/coldbox/system/FrameworkSupertype.cfc b/tests/resources/app/coldbox/system/FrameworkSupertype.cfc
--- a/tests/resources/app/coldbox/system/FrameworkSupertype.cfc
+++ b/tests/resources/app/coldbox/system/FrameworkSupertype.cfc
@@ -621 +621 @@
- if ( isNull( variables.asyncManager ) ) {
+ if ( !variables.keyExists( "asyncManager" ) || isNull( variables.asyncManager ) ) {
@@ -755 +755 @@
- if ( isNull( variables.cbDateTimeHelper ) ) {
+ if ( !variables.keyExists( "cbDateTimeHelper" ) || isNull( variables.cbDateTimeHelper ) ) {
diff --git a/tests/resources/app/coldbox/system/core/util/Util.cfc b/tests/resources/app/coldbox/system/core/util/Util.cfc
--- a/tests/resources/app/coldbox/system/core/util/Util.cfc
+++ b/tests/resources/app/coldbox/system/core/util/Util.cfc
@@ -124 +124 @@
- if ( isNull( variables.inetAddress ) ) {
+ if ( !variables.keyExists( "inetAddress" ) || isNull( variables.inetAddress ) ) {
diff --git a/tests/resources/app/coldbox/system/cache/config/CacheBoxConfig.cfc b/tests/resources/app/coldbox/system/cache/config/CacheBoxConfig.cfc
--- a/tests/resources/app/coldbox/system/cache/config/CacheBoxConfig.cfc
+++ b/tests/resources/app/coldbox/system/cache/config/CacheBoxConfig.cfc
@@ -107 +107 @@
- if ( !isNull( cacheBoxDSL.logBoxConfig ) ) {
+ if ( structKeyExists( cacheBoxDSL, "logBoxConfig" ) && !isNull( cacheBoxDSL.logBoxConfig ) ) {
@@ -112 +112 @@
- if ( !isNull( cacheBoxDSL.scopeRegistration ) ) {
+ if ( structKeyExists( cacheBoxDSL, "scopeRegistration" ) && !isNull( cacheBoxDSL.scopeRegistration ) ) {
@@ -117 +117 @@
- if ( !isNull( cacheBoxDSL.caches ) ) {
+ if ( structKeyExists( cacheBoxDSL, "caches" ) && !isNull( cacheBoxDSL.caches ) ) {
@@ -125 +125 @@
- if ( !isNull( cacheBoxDSL.listeners ) ) {
+ if ( structKeyExists( cacheBoxDSL, "listeners" ) && !isNull( cacheBoxDSL.listeners ) ) {
51 changes: 51 additions & 0 deletions .github/patches/coldbox7-full-null.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
diff --git a/tests/resources/app/coldbox/system/core/util/Util.cfc b/tests/resources/app/coldbox/system/core/util/Util.cfc
--- a/tests/resources/app/coldbox/system/core/util/Util.cfc
+++ b/tests/resources/app/coldbox/system/core/util/Util.cfc
@@ -12 +12 @@
- if ( isNull( variables.engineMappingHelper ) ) {
+ if ( !variables.keyExists( "engineMappingHelper" ) || isNull( variables.engineMappingHelper ) ) {
diff --git a/tests/resources/app/coldbox/system/logging/LogEvent.cfc b/tests/resources/app/coldbox/system/logging/LogEvent.cfc
--- a/tests/resources/app/coldbox/system/logging/LogEvent.cfc
+++ b/tests/resources/app/coldbox/system/logging/LogEvent.cfc
@@ -61 +61 @@
- if ( isNull( variables.xmlConverter ) ) {
+ if ( !variables.keyExists( "xmlConverter" ) || isNull( variables.xmlConverter ) ) {
@@ -68 +68 @@
- if ( isNull( variables.util ) ) {
+ if ( !variables.keyExists( "util" ) || isNull( variables.util ) ) {
diff --git a/tests/resources/app/coldbox/system/cache/AbstractCacheBoxProvider.cfc b/tests/resources/app/coldbox/system/cache/AbstractCacheBoxProvider.cfc
--- a/tests/resources/app/coldbox/system/cache/AbstractCacheBoxProvider.cfc
+++ b/tests/resources/app/coldbox/system/cache/AbstractCacheBoxProvider.cfc
@@ -115 +115 @@
- if ( isNull( variables.utility ) ) {
+ if ( !variables.keyExists( "utility" ) || isNull( variables.utility ) ) {
@@ -428 +428 @@
- if ( isNull( variables.uuidHelper ) ) {
+ if ( !variables.keyExists( "uuidHelper" ) || isNull( variables.uuidHelper ) ) {
diff --git a/tests/resources/app/coldbox/system/cache/CacheFactory.cfc b/tests/resources/app/coldbox/system/cache/CacheFactory.cfc
--- a/tests/resources/app/coldbox/system/cache/CacheFactory.cfc
+++ b/tests/resources/app/coldbox/system/cache/CacheFactory.cfc
@@ -484 +484 @@
- if ( isNull( variables.config ) ) {
+ if ( !variables.keyExists( "config" ) || isNull( variables.config ) ) {
diff --git a/tests/resources/app/coldbox/system/remote/ColdboxProxy.cfc b/tests/resources/app/coldbox/system/remote/ColdboxProxy.cfc
--- a/tests/resources/app/coldbox/system/remote/ColdboxProxy.cfc
+++ b/tests/resources/app/coldbox/system/remote/ColdboxProxy.cfc
@@ -342 +342 @@
- if ( isNull( variables.util ) ) {
+ if ( !variables.keyExists( "util" ) || isNull( variables.util ) ) {
@@ -354 +354 @@
- if ( isNull( variables.remotingUtil ) ) {
+ if ( !variables.keyExists( "remotingUtil" ) || isNull( variables.remotingUtil ) ) {
diff --git a/tests/resources/app/coldbox/system/web/context/RequestContext.cfc b/tests/resources/app/coldbox/system/web/context/RequestContext.cfc
--- a/tests/resources/app/coldbox/system/web/context/RequestContext.cfc
+++ b/tests/resources/app/coldbox/system/web/context/RequestContext.cfc
@@ -1576 +1576 @@
- if ( isNull( variables.privateContext.response ) ) {
+ if ( !variables.privateContext.keyExists( "response" ) || isNull( variables.privateContext.response ) ) {
diff --git a/modules/str/modules/cbjavaloader/models/javaloader/JavaLoader.cfc b/modules/str/modules/cbjavaloader/models/javaloader/JavaLoader.cfc
--- a/modules/str/modules/cbjavaloader/models/javaloader/JavaLoader.cfc
+++ b/modules/str/modules/cbjavaloader/models/javaloader/JavaLoader.cfc
@@ -570 +570 @@
- returntype="string"
+ returntype="void"
34 changes: 34 additions & 0 deletions .github/patches/mementifier-full-null.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
diff --git a/modules/mementifier/interceptors/Mementifier.cfc b/modules/mementifier/interceptors/Mementifier.cfc
--- a/modules/mementifier/interceptors/Mementifier.cfc
+++ b/modules/mementifier/interceptors/Mementifier.cfc
@@ -89,2 +89,3 @@
- var dateMask = isNull( this.memento.dateMask ) ? variables.settings.dateMask : this.memento.dateMask;
- var timeMask = isNull( this.memento.timeMask ) ? variables.settings.timeMask : this.memento.timeMask;
+ var entityMemento = structKeyExists( arguments.entity, "memento" ) ? arguments.entity.memento : {};
+ var dateMask = !entityMemento.keyExists( "dateMask" ) || isNull( entityMemento.dateMask ) ? variables.settings.dateMask : entityMemento.dateMask;
+ var timeMask = !entityMemento.keyExists( "timeMask" ) || isNull( entityMemento.timeMask ) ? variables.settings.timeMask : entityMemento.timeMask;
@@ -150,12 +151,12 @@
- "autoCastBooleans" : isNull( this.memento.autoCastBooleans ) ? variables.$mementifierSettings.autoCastBooleans : this.memento.autoCastBooleans,
- "dateMask" : isNull( this.memento.dateMask ) ? variables.$mementifierSettings.dateMask : this.memento.dateMask,
- "defaults" : isNull( this.memento.defaults ) ? {} : this.memento.defaults,
- "defaultIncludes" : isNull( this.memento.defaultIncludes ) ? [] : this.memento.defaultIncludes,
- "defaultExcludes" : isNull( this.memento.defaultExcludes ) ? [] : this.memento.defaultExcludes,
- "iso8601Format" : isNull( this.memento.iso8601Format ) ? variables.$mementifierSettings.iso8601Format : this.memento.iso8601Format,
- "mappers" : isNull( this.memento.mappers ) ? {} : this.memento.mappers,
- "neverInclude" : isNull( this.memento.neverInclude ) ? [] : this.memento.neverInclude,
- "ormAutoIncludes" : isNull( this.memento.ormAutoIncludes ) ? variables.$mementifierSettings.ormAutoIncludes : this.memento.ormAutoIncludes,
- "profiles" : isNull( this.memento.profiles ) ? {} : this.memento.profiles,
- "timeMask" : isNull( this.memento.timeMask ) ? variables.$mementifierSettings.timeMask : this.memento.timeMask,
- "trustedGetters" : isNull( this.memento.trustedGetters ) ? variables.$mementifierSettings.trustedGetters : this.memento.trustedGetters
+ "autoCastBooleans" : !this.memento.keyExists( "autoCastBooleans" ) || isNull( this.memento.autoCastBooleans ) ? variables.$mementifierSettings.autoCastBooleans : this.memento.autoCastBooleans,
+ "dateMask" : !this.memento.keyExists( "dateMask" ) || isNull( this.memento.dateMask ) ? variables.$mementifierSettings.dateMask : this.memento.dateMask,
+ "defaults" : !this.memento.keyExists( "defaults" ) || isNull( this.memento.defaults ) ? {} : this.memento.defaults,
+ "defaultIncludes" : !this.memento.keyExists( "defaultIncludes" ) || isNull( this.memento.defaultIncludes ) ? [] : this.memento.defaultIncludes,
+ "defaultExcludes" : !this.memento.keyExists( "defaultExcludes" ) || isNull( this.memento.defaultExcludes ) ? [] : this.memento.defaultExcludes,
+ "iso8601Format" : !this.memento.keyExists( "iso8601Format" ) || isNull( this.memento.iso8601Format ) ? variables.$mementifierSettings.iso8601Format : this.memento.iso8601Format,
+ "mappers" : !this.memento.keyExists( "mappers" ) || isNull( this.memento.mappers ) ? {} : this.memento.mappers,
+ "neverInclude" : !this.memento.keyExists( "neverInclude" ) || isNull( this.memento.neverInclude ) ? [] : this.memento.neverInclude,
+ "ormAutoIncludes" : !this.memento.keyExists( "ormAutoIncludes" ) || isNull( this.memento.ormAutoIncludes ) ? variables.$mementifierSettings.ormAutoIncludes : this.memento.ormAutoIncludes,
+ "profiles" : !this.memento.keyExists( "profiles" ) || isNull( this.memento.profiles ) ? {} : this.memento.profiles,
+ "timeMask" : !this.memento.keyExists( "timeMask" ) || isNull( this.memento.timeMask ) ? variables.$mementifierSettings.timeMask : this.memento.timeMask,
+ "trustedGetters" : !this.memento.keyExists( "trustedGetters" ) || isNull( this.memento.trustedGetters ) ? variables.$mementifierSettings.trustedGetters : this.memento.trustedGetters
63 changes: 63 additions & 0 deletions .github/patches/testbox-full-null.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
diff --git a/testbox/system/coverage/CoverageService.cfc b/testbox/system/coverage/CoverageService.cfc
--- a/testbox/system/coverage/CoverageService.cfc
+++ b/testbox/system/coverage/CoverageService.cfc
@@ -175 +175 @@
- if ( isNull( opts.coverageTresholds ) ) {
+ if ( !structKeyExists( opts, "coverageTresholds" ) || isNull( opts.coverageTresholds ) ) {
@@ -178 +178 @@
- if ( isNull( opts.coverageTresholds.good ) ) {
+ if ( !structKeyExists( opts.coverageTresholds, "good" ) || isNull( opts.coverageTresholds.good ) ) {
@@ -181 +181 @@
- if ( isNull( opts.coverageTresholds.bad ) ) {
+ if ( !structKeyExists( opts.coverageTresholds, "bad" ) || isNull( opts.coverageTresholds.bad ) ) {
diff --git a/testbox/system/TestBox.cfc b/testbox/system/TestBox.cfc
--- a/testbox/system/TestBox.cfc
+++ b/testbox/system/TestBox.cfc
@@ -408 +408 @@
- if ( !isNull( url.testBundles ) ) {
+ if ( structKeyExists( url, "testBundles" ) && !isNull( url.testBundles ) ) {
@@ -411 +411 @@
- if ( !isNull( url.testSuites ) ) {
+ if ( structKeyExists( url, "testSuites" ) && !isNull( url.testSuites ) ) {
@@ -414 +414 @@
- if ( !isNull( url.testSpecs ) ) {
+ if ( structKeyExists( url, "testSpecs" ) && !isNull( url.testSpecs ) ) {
@@ -417 +417 @@
- if ( !isNull( url.testMethod ) ) {
+ if ( structKeyExists( url, "testMethod" ) && !isNull( url.testMethod ) ) {
@@ -259 +259 @@
- if ( isNull( variables.env ) ) {
+ if ( !structKeyExists( variables, "env" ) || isNull( variables.env ) ) {
diff --git a/testbox/system/util/Util.cfc b/testbox/system/util/Util.cfc
--- a/testbox/system/util/Util.cfc
+++ b/testbox/system/util/Util.cfc
@@ -203 +203 @@
- if ( isNull( variables.engineMappingHelper ) ) {
+ if ( !structKeyExists( variables, "engineMappingHelper" ) || isNull( variables.engineMappingHelper ) ) {
diff --git a/testbox/system/util/Env.cfc b/testbox/system/util/Env.cfc
--- a/testbox/system/util/Env.cfc
+++ b/testbox/system/util/Env.cfc
@@ -87 +87 @@
- if ( isNull( variables.javaSystem ) ) {
+ if ( !structKeyExists( variables, "javaSystem" ) || isNull( variables.javaSystem ) ) {
diff --git a/testbox/system/BaseSpec.cfc b/testbox/system/BaseSpec.cfc
--- a/testbox/system/BaseSpec.cfc
+++ b/testbox/system/BaseSpec.cfc
@@ -1627 +1627 @@
- if ( isNull( variables.$cbMockData ) ) {
+ if ( !structKeyExists( variables, "$cbMockData" ) || isNull( variables.$cbMockData ) ) {
@@ -1640 +1640 @@
- if ( isNull( variables.$utility ) ) {
+ if ( !structKeyExists( variables, "$utility" ) || isNull( variables.$utility ) ) {
@@ -1653 +1653 @@
- if ( isNull( variables.$env ) ) {
+ if ( !structKeyExists( variables, "$env" ) || isNull( variables.$env ) ) {
@@ -1668 +1668 @@
- if ( isNull( this.$mockbox ) ) {
+ if ( !structKeyExists( this, "$mockbox" ) || isNull( this.$mockbox ) ) {
diff --git a/testbox/system/runners/BDDRunner.cfc b/testbox/system/runners/BDDRunner.cfc
--- a/testbox/system/runners/BDDRunner.cfc
+++ b/testbox/system/runners/BDDRunner.cfc
@@ -159 +159 @@
- isNull( thisSuite ) ? {} : thisSuite
+ !structKeyExists( local, "thisSuite" ) || isNull( local.thisSuite ) ? {} : local.thisSuite
Loading