Class Ruote::Exp::ApplyExpression
In: lib/ruote/exp/fe_apply.rb
Parent: FlowExpression

The ‘apply’ expression is an advanced expression.

It takes as input an AST and applies it. The AST may be placed in a field or a variable or passed directly to the apply.

These apply examples :

  apply :tree => [ 'echo', { 'nada' => nil }, [] ]

  sequence do
    set :var => 'tree', :val => [ 'echo', { 'nada' => nil }, [] ]
    apply # looks by default in variable 'tree'
  end

  sequence do
    set :var => 't', :val => [ 'echo', { 'nada' => nil }, [] ]
    apply :tree_var => 't'
  end

  sequence do
    set :field => 't', :val => [ 'echo', { 'nada' => nil }, [] ]
    apply :tree_field => 't'
  end

All are equivalent to

  echo 'nada'

apply and subprocesses

There is an interesting way of using ‘apply’, it‘s close to the way of the Ruby "yield" expression.

  pdef = Ruote.process_definition 'test' do
    sequence do
      handle do
        participant 'alpha'
      end
      handle do
        participant 'bravo'
      end
    end
    define 'handle' do
      sequence do
        participant 'prepare_data'
        apply
        participant 'rearrange_data'
      end
    end
  end

With this process definition, the particpant alpha and bravo are handed a workitem in sequence, but each time, the data gets prepared and re-arranged.

apply’ simply picks the value of the tree to apply in the local variable ‘tree’.

Passing variables to applied trees is possible :

  pdef = Ruote.process_definition do
    handle do
      participant '${v:target}', :message => 'x'
    end
    define 'handle' do
      sequence do
        participant 'prepare_data'
        apply :v => 'alpha'
        apply :v => 'bravo'
        participant 'rearrange_data'
      end
    end
  end

on_error

It‘s OK, to place an on_error on the apply

  pdef = Ruote.process_definition do
    handle do
      sequence do
        echo 'in'
        nemo
      end
    end
    define 'handle' do
      apply :on_error => 'notify' # <==
      echo 'over.'
    end
    define 'notify' do
      echo 'error'
    end
  end

Methods

apply  

Public Instance methods

TODO : apply [ ‘echo’, { ‘nada’ => nil }, [] ]

[Validate]