Class Ruote::Exp::GivenExpression
In: lib/ruote/exp/fe_given.rb
Parent: SequenceExpression

This expressions corresponds to a "case" statement in Ruby or a "switch" in other languages.

It accepts two variants "given that" and "given an x of".

‘given’ works in conjunction with the ‘that’ / ‘of’ expression.

"given that"

  given do
    that "${location} == paris" do
      subprocess "notify_and_wait_for_pickup"
    end
    that "${state} == ready" do
      subprocess "deliver"
    end
    # else...
    subprocess "do_something_else"
  end

"given an x of"

  given "${status}" do
    of "ordered" do
      participant "alpha"
    end
    of "delivered" do
      participant "alpha"
    end
    # else...
    subprocess "do_something_else"
  end

This variant also accepts regular expressions :

  given "${target}" do
    of "/-manager$/" do
      # ...
    end
    of /^user-/ do
      # ...
    end
  end

mixing ‘that’ and ‘of‘

It‘s OK to use a "that" inside a "given an x" :

  given '${target}' do
    that "${location} == paris" do
      subprocess "notify_and_wait_for_pickup"
    end
    of "home" do
      subprocess "return_procedure"
    end
  end

the else part

Anything that comes after the serie of ‘that’ and ‘of’ is considered in the ‘else’ zone and is executed if none of the ‘that’ or ‘of’ triggered.

  given '${target}' do
    that "${location} == paris" do
      subprocess "notify_and_wait_for_pickup"
    end
    of "home" do
      subprocess "return_procedure"
    end
    subprocess "do_this"
    subprocess "and_then_that"
  end

Yes, two ‘else’ subprocesses will get executed one after the other (the ‘given’ acting like a ‘sequence’ for them.

Interestingly :

  given '${target}' do
    of "home" do
      subprocess "return_procedure"
    end
    subprocess "do_this"
    of "office" do
      subprocess "go_to_work"
    end
    subprocess "and_then_that"
  end

If the workitem field ‘target’ is set to ‘home’ only the ‘return_procedure’ subprocess will get called.

If the workitem field ‘target’ is set to ‘office’, the ‘do_this’ subprocess, then the ‘go_to_work’ one will get called.

Methods

reply  

Public Instance methods

[Validate]