Documentation for a historical release of Infusion: 1.4
Please view the Infusion Documentation site for the latest documentation, or the Infusion 1.3. Documentation for the previous release.
If you're looking for Fluid Project coordination, design, communication, etc, try the Fluid Project Wiki.

fluid.model.transformWithRules

This functionality is Sneak Peek status. This means that the APIs may change. We welcome your feedback, ideas, and code, but please use caution if you use this new functionality.

This page is still a rough draft.

fluid.model.transformWithRules(model, rules)

Transforms a model based on a specified expansion rules objects.

fluid.model.transformWithRules(model, rules);

File name: ModelTransformations.js

Parameters

model (Object) the model to transform
rules (Object) a rules object containing instructions on how to transform the model (see below for more information)

Return Value

Object the transformed model


Rules

Rules objects take the form of:

{
    "target.path": "value.el.path" || {
        expander: {
            type: "expander.function.path",
             ...
        }
    }
}

Transformation Expanders

The Framework currently provides the following expanders that can be used as part of a model transformation.

  • fluid.model.transform.value
  • fluid.model.transform.arrayValue
  • fluid.model.transform.firstValue
  • fluid.model.transform.merge

Each of these is described below.

fluid.model.transform.value

This extracts and/or the value of a given path, and can be used for the following purposes:

To rename a property:

Start:

var source = {
    cat: "meow",
    ...
}



>>

Rule to rename "cat" to "feline":

var rules = {
    feline: { 
        expander: {
            type: "fluid.model.transform.value",
            // specify only the path to transform
            path: "cat"
        }
    },
    ....
}



>>

Result:

{
    feline: "meow",
    ...
}

To set a default value:

Start:

var source = {
    gerbil: undefined,
    // or if "gerbil" doesn't exist
    ...
}



>>

Rule to set default value of "gerbil":

var rules = {
    gerbil: { 
        expander: {
            type: "fluid.model.transform.value",
            // specify path and default value
            path: "gerbil",
            value: "squeek"
        }
    },
    ....
}



>>

Result:

{
    gerbil: "squeek",
    ...
}

Note that if "gerbil" has a value initially, it will be unaffected.

To specify a literal value:

Start:

var source = {
    // no mention of kangaroos
    ...
}



>>

Rule to set a value for "kangaroo":

var rules = {
    kangaroo: { 
        expander: {
            type: "fluid.model.transform.value",
            // specify only a value
            value: "boingg"
        }
    },
    ....
}



>>

Result:

{
    kangaroo: "boingg",
    ...
}

To change the structure/nesting:

Start:

var source = {
    goat: false,
    sheep: [
        "baaa",
        "wooooool"
    ],
    ...
}



>>

Rule to change the nesting:

var rules = {
    "farm.goat": {                                          
        expander: {
            type: "fluid.model.transform.value",
            path: "goat"
        }
    },
    "farm.sheep": {
        expander: {
            type: "fluid.model.transform.value",
            path: "sheep"
        }
    } 
    ....
}



>>

Result:

{
    farm: {
        goat: false,
        sheep: [
            "baaa",
            "wooooool"
        ]
    },
    ...
}

fluid.model.transform.arrayValue

The arrayValue expander will transform a value into an aray. If the value is already an array, the expander will have no effect.

For example:

Start:

var source = {
    cat: "meow",
    sheep: [
        "baaa",
        "wooooool"
    ],
    ...
}



>>

Rule to convert to arrays:

var rules = {
    cat: {                                          
        expander: {
            type: "fluid.model.transform.arrayValue",
            path: "cat"
        }
    },
    sheep: {
        expander: {
            type: "fluid.model.transform.arrayValue",
            path: "sheep"
        }
    } 
    ....
}



>>

Result:

{
    cat: ["meow"],
    sheep: [
        "baaa",
        "wooooool"
    ],
    ...
}

Note that the value of cat is now an array, but the value of sheep is unaffected.

fluid.model.transform.firstValue

fluid.model.transform.merge

Example

 

In this example, description here...