Skip to content

adamschmideg/depresso

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

depresso API Documentation

You have a deeply nested object with some missing values. You also have some rules how to calculate a value from other values. Depresso takes an object and the calculation rules, and does a dependency resolution. Let's see an example.

We have an object with a placeholder for missing values:

    MISSING = -1

    inventory =
      general:
        discount: 0.1
        price: MISSING
      products: [
        name: 'Bag'
        netPrice: 20
        tax: 0.1
        price: MISSING
      ,
        name: 'Beer'
        netPrice: 10
        tax: 0.2
        price: 12
      ] 

There are two rules

  • A product price can be calculated by adding tax to the net price.
  • The total price is the sum of all product prices.

Here is the code describing these rules:

    rules = [
      target: '/products//price'
      depends: 
        netPrice: '../netPrice'
        tax: '../tax'
      calculate: ->
        @netPrice * (1 + @tax)
    ,
      target: '/general/price'
      depends:
        prices: '/products//price'
      calculate: ->
        _.reduce(
          @prices
          (x,y) -> x+y
          0)
    ]

A rule consists of

  • A target pointing to one or more nodes in the object.
  • Dependencies, mapping a name to an xpath-like expression.
  • A calculation which has access to the values defined in the dependencies, and returns a value that will be written into the underlying object.

Circular rules should be avoided.

Finally, we specify which node(s) should be calculated:

    {resolve} = require 'depresso'
    resolve inventory, rules, '/general/price'
    console.log inventory.general.price # prints 34

The xpath-like expressions used throughout the examples are provided by SpahQL, the order of dependency resolution is calculated with DepGraph.

About

Dependency resolution with json path expressions

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published