Added support for on_pre_[action] methods to Ruote::ProcessObserver
Merge pull request #89 from riverock/process_observer_pre_support

add support for on_pre_[action] methods to Ruote::ProcessObserver
add Denis to the contributors list
comment out debug helper
ensure StorageParticipant#workitem gets updated wi

in reply to https://groups.google.com/forum/#!topic/openwferu-users/J2LfW2Bk6Hk
allow multiple calls to StorageParticipant#update
Rework the Tracer class to fix wrong constructor on Ruby 2.0
Fix rufus-scheduler ~> 2.0.16 as ruote depends on Rufus.parse_time_string
Fix error fixtures to include the wfid into the fei
Fix crash when multiple participants reply concurrently to their parent - @jmettraux can you please comment?

Given this workflow definition:

    Ruote.process_definition do
      alpha

      concurrence do
        part_1
        part_2
        ...
        part_12
      end

      bravo

    end

And the ruote-couch storage (either your or our ifad/ fork, it doesn't matter),

there are two incarnations of this crash, this is the first, happening when canceling the process while in the "concurrence" block:

    #<NoMethodError: undefined method `h=' for #<Ruote::Exp::SequenceExpression:0xd50b77c>>

    /home/vjt/.rvm/gems/ruby-2.0.0-p247@scriptoria/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/ro_persist.rb:157:in `do_p'
    /home/vjt/.rvm/gems/ruby-2.0.0-p247@scriptoria/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/ro_persist.rb:108:in `do_persist'
    /home/vjt/.rvm/gems/ruby-2.0.0-p247@scriptoria/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/flow_expression.rb:1083:in `leave_tag'
    /home/vjt/.rvm/gems/ruby-2.0.0-p247@scriptoria/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/flow_expression.rb:562:in `do_reply_to_parent'
    /home/vjt/.rvm/gems/ruby-2.0.0-p247@scriptoria/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/flow_expression.rb:472:in `reply_to_parent'
    /home/vjt/.rvm/gems/ruby-2.0.0-p247@scriptoria/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/flow_expression.rb:641:in `do_reply'
    /home/vjt/.rvm/gems/ruby-2.0.0-p247@scriptoria/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/flow_expression.rb:350:in `do'
    /home/vjt/.rvm/gems/ruby-2.0.0-p247@scriptoria/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/flow_expression.rb:340:in `do_action'
    /home/vjt/.rvm/gems/ruby-2.0.0-p247@scriptoria/bundler/gems/ruote-7a26fdeaa362/lib/ruote/worker.rb:392:in `process'
    /home/vjt/.rvm/gems/ruby-2.0.0-p247@scriptoria/bundler/gems/ruote-7a26fdeaa362/lib/ruote/worker.rb:210:in `process_msgs'
    /home/vjt/.rvm/gems/ruby-2.0.0-p247@scriptoria/bundler/gems/ruote-7a26fdeaa362/lib/ruote/worker.rb:258:in `step'
    /home/vjt/.rvm/gems/ruby-2.0.0-p247@scriptoria/bundler/gems/ruote-7a26fdeaa362/lib/ruote/worker.rb:109:in `run'
    ./script/ruote_worker:21:in `block in <main>'
    /home/vjt/code/scriptoria/script/service:108:in `instance_eval'
    /home/vjt/code/scriptoria/script/service:108:in `boot!'
    /home/vjt/code/scriptoria/script/service:38:in `initialize'
    ./script/ruote_worker:12:in `new'
    ./script/ruote_worker:12:in `<main>'

and this is the second one, instead happening when entering the concurrence block:

    #<NoMethodError: undefined method `h=' for #<Ruote::Exp::ParticipantExpression:0xb488a720>>

    /home/amedeo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/ro_persist.rb:157:in `do_p'
    /home/amedeo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/ro_persist.rb:115:in `do_unpersist'
    /home/amedeo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/flow_expression.rb:564:in `do_reply_to_parent'
    /home/amedeo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/flow_expression.rb:472:in `reply_to_parent'
    /home/amedeo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/fe_participant.rb:209:in `reply_to_parent'
    /home/amedeo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/flow_expression.rb:660:in `reply'
    /home/amedeo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/fe_participant.rb:202:in `reply'
    /home/amedeo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/flow_expression.rb:648:in `do_reply'
    /home/amedeo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/flow_expression.rb:350:in `do'
    /home/amedeo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/bundler/gems/ruote-7a26fdeaa362/lib/ruote/exp/flow_expression.rb:340:in `do_action'
    /home/amedeo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/bundler/gems/ruote-7a26fdeaa362/lib/ruote/worker.rb:392:in `process'
    /home/amedeo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/bundler/gems/ruote-7a26fdeaa362/lib/ruote/worker.rb:210:in `process_msgs'
    /home/amedeo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/bundler/gems/ruote-7a26fdeaa362/lib/ruote/worker.rb:258:in `step'
    /home/amedeo/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/bundler/gems/ruote-7a26fdeaa362/lib/ruote/worker.rb:109:in `run'
    ./script/ruote_worker:21:in `block in <main>'
    /home/amedeo/projects/scriptoria/script/service:108:in `instance_eval'
    /home/amedeo/projects/scriptoria/script/service:108:in `boot!'
    /home/amedeo/projects/scriptoria/script/service:38:in `initialize'
    ./script/ruote_worker:12:in `new'
    ./script/ruote_worker:12:in `<main>'

What do you think?

Thanks!

cc: @amedeo

~Marcello
upgrade to rufus-scheduler >= 3.0.0
tune testing and fancy printing
integrate @vjt 's concurrency test

originally in https://github.com/ifad/ruote/commit/a63f979cd9ece557dd6672f5849ab80f5634bb4b
fix https://github.com/ifad/ruote/commit/3a963899

(tested against the fs storage)
list Marcello as contributor
resist to errors in the error itself

closes gh-90
Merge branch 'master' of github.com:jmettraux/ruote
add "active development ceased" note
port readme to markdown