
= ruote - CHANGELOG.txt


== ruote - 2.1.11    not yet released

- engine.register { block } (Torsten)
- participant.accept?(workitem)
- 'ref' expression (pointing to participants or subprocesses)
- engine.process_wfids (list process instance wfids)
- set 'v:alpha' => [ 'MyParticipant', { 'flavour' => 'vanilla' }]
  participants registered as variables (just for that process instance)
- engine.participant_list and .participant_list=
- engine.register_participant 'al', 'AlParticipant', :require_path => 'pa/th'
- engine.register_participant 'al', 'AlParticipant', :load_path => 'pa/th'
- engine.[un]register for .[un]register_participant
- engine.noisy = true (a shortcut)
- engine.storage_participant (a shortcut)
- removed direct dependency on rufus-lru
- WaitLogger : a transient @seen (Thanks Kaspar)
- error_handler : more error catching
- storage#copy_to(other_storage) item by item implementation
- Engine#wait_for OK with multiple threads
- ExpressionMap now loads all expressions in Ruote::Exp:: namespace
- 'error_intercepted' msg now features error_class, _message and _backtrace (RM)
- Engine#join and Worker#join
- workitem.error now includes error's backtrace (contributed by Rich Meyers)


== ruote - 2.1.10    released 2010/06/15

- storage#copy_to(other_storage) implemented
- #launch moved from Engine to ReceiverMixin
- participants without initialize(opts) are now allowed
- engine.wait_for(:inactive)
- engine.wait_for(*interests) unlocked
- engine.wait_for(:empty)
- fixed issue with participant 'x' and :on_error. Thanks Oleg.
- receiver : reply and reply_to_engine : from aliases to wrappers
- Ruote::StorageParticipant more flexibility for method args
- Ruote::FlowExpressionId .extract_h and .extract
- dropped fs_history (storage_history is better)
- parser to_xml _if 'x == b' --> <if test="x == b">
- workitem.sid shortcut for workitem.fei.to_storage_id
- workitem.wfid shorcut for workitem.fei.wfid
- new error_handler service
- Receiver.new(x), x can be worker, engine, context or storage
- Participant#on_reply(workitem) manipulating workitems when they come back
- set '${v:customers.0.name}' => 'x' now OK, was limited to fields. Thanks Oleg
- LocalParticipant#put(fei, hash) #get(fei, key) for stashing info
- LocalParticipant#re_dispatch(wi, opts)
- bug in HashStorage, apply over apply didn't raise a persist error. Fixed.
- keeping track of workitem fields as they were right before a participant error
- Workitem.error holds the error when on_error. Thanks Oleg.
- Workitem#error and Workitem#timed_out shortcuts
- participant :on_error => 'x' broken. Fixed. Thanks Oleg.
- Engine#workitem(fei) for advanced users
- LocalParticipant : added a reject(workitem) method
- participant exp : dispatched = true set right after dispatch


== ruote - 2.1.9    released 2010/03/22

- made participant.cancel occur asynchronously (as should be)
- lookup_variable : making sure not to break when the parent exp is gone
- workitem.fields['__dispatch_time__'] is now set


== ruote - 2.1.8    released 2010/03/15

- participant#schedule_timeout workaround for issue with JRuby 1.4.0 (1.8.7)
- implemented Ruote::CompositeStorage
- leveraging rufus-cloche 0.1.16 and the 'cloche_nolock' option (FsStorage)
- SmtpParticipant and ruote/part/template.rb reorganization
- StorageParticipant when returned by engine#register was unusable. Fixed.
- string keys for SmtpParticipant. Thanks Gonzalo
- fixed every('10m') bug. Thanks Gonzalo Suarez
- Ruote::FlowExpressionId.from_id(s) more permissive
- concurrence (and concurrent-iterator) :merge_type => :stack


== ruote - 2.1.7    released 2010/02/15

- now works on WinXP, Ruby 1.8.7
- reformed msgs ids and adapted Ruote::StorageHistory
- engine.register_participant(x, Ruote::StorageParticipant) now returning
  a instance of the participant, for easy query
- StorageParticipant, added #query(criteria), thanks Torsten and Brett
- Ruote::Workitem #lookup('deep.field') and #set_field('deep.field') are back
- Ruote::Workitem added == and hash (list.uniq friendly), thanks Brett
- Engine#configure(key, value), thanks Torsten
- Ruote.to_tree (lightweight version of Ruote.process_definition)
- ParticipantList#names, thanks Kenneth


== ruote - 2.1.6    released 2010/02/08

- welcoming ruote-dm (datamapper persistency)
- Engine#re_apply(fei, opts) where opts in [ :tree, :fields, :merge_in_fields ]
- fixed issue about StorageParticipant#update, thanks Torsten


== ruote - 2.1.5    released 2010/01/28

- fixed StorageParticipant a to b flow, fix by Torsten
- fixed StorageParticipant#cancel
- dollar : made sure of ${fei} and ${wfid}
- implemented ProcessStatus#to_dot
- if a participant implementation cancel method returns false,
  reply_to_parent will not get called
- changes about errors without [stored] expressions, they now appear in process
  statuses
- EngineParticipant implemented
- 'ruby_eval_allowed' instead of :ruby_eval_allowed
- ${v:customer.address.1} deep trick now ok (as it was ok for fields)
- added d() to the $ notation : echo "${r: d('f:toto') }"
- Engine#kill_process(wfid) can cure errored participant expressions
- made sure ${r:wi} and ${r:workitem} is and instance of Ruote::Workitem
- implemented StorageParticipant#by_field


== ruote - 2.1.4    released 2010/01/11

- implemented StorageHistory
- using yyyy-mm-dd instead of yyyy/mm/dd for Ruote.time_to_utc_s(t)
- implemented Storage#purge_type!(t)
- Engine#add_service now returning just bound service


== ruote - 2.1.3    released 2010/01/04

- fixed issue with Rufus.is_cron_string (thanks Torsten)
- fixed issue with FlowExpression#cancel (Kenneth)


== ruote - 2.1.2    released 2010/01/03

- fixed issue when initializing engine without worker. Thanks Matt Nichols.


== ruote - 2.1.1    released 2009/12/31

== OpenWFEru - 0.9.2       released 2007/01/26
== openwfe-ruby - 1.7.0    released 2006/05/08

