FLUID-3768: Merge policy of "preserve" will be inactivated on discovering a merge target value

Metadata

Source
FLUID-3768
Type
Bug
Priority
Major
Status
Closed
Resolution
Fixed
Assignee
Antranig Basman
Reporter
Antranig Basman
Created
2010-09-30T03:35:27.514-0400
Updated
2022-07-07T07:23:39.193-0400
Versions
  1. 1.2.1
Fixed Versions
  1. 1.3
Component
  1. Framework

Description

If on traversing any "target" object during a merge process any kind of existing value is discovered, a prescribed merge policy of "merge" targetted at that path will be inactivated, and the default merge process involving a recursive object copy will proceed. This is probably not what a user would want. This was exposed by examining the "Repeatable" component in CollectionSpace, which includes the following section in defaults:

fluid.defaults("cspace.repeatable", {
    applier: null, 
    model: null,

Even supplying a mergePolicy of "preserve" did not cause these properties to survive, since the "null" value triggered the condition described above. I don't personally enjoy this style of placeholder values but don't see why it shouldn't be supported. Certainly, if the user specifies a "preserve" policy, they would be "surprised" to find it conditionally fail depending on the existing state of the target object. After this issue is resolved, "preserve" will operate a "last value wins" policy - the last value targetted at a path in a stack of merge operations will unconditionally obliterate any others, with no actual "merge" semantics operating over its subobjects possible. This is most likely what a reasonable user will intend.

Comments

  • Antranig Basman commented 2010-09-30T04:11:52.825-0400

    Fixed at revision 10078