CHANGELOG.txt in ruote-2.2.0 vs CHANGELOG.txt in ruote-2.3.0

- old
+ new

@@ -1,9 +1,174 @@ = ruote - CHANGELOG.txt -== ruote - 2.2.0 not yet released +== ruote - 2.3.0 released 2012/09/04 + +- Dashboard#wait_for('action' => 'apply', 'name' => 'wait') +- past_tags: track variables +- Workitem#launched_at and #sub_wf_launched_at +- Ruote.deep_delete and .deep_mutate +- Ruote::Observer (a base classing for observing a ruote engine's activity) +- thread['ruote_worker'] +- Dashboard#respark(wfid, opts={}) +- StorageBase#dump: go with YAML +- on_error: !immediate +- "kill" expression (undo/cancel alias) +- ${tags}, ${tag} and ${full_tag} +- StorageParticipant#flunk(workitem, err, *err_args) +- ReceiverMixin#flunk(workitem, err, *err_args) +- workitem: sub_wf_name and sub_wf_revision +- new 'raise' msg for passing back errors to worker +- participant#on_apply +- push/pop specialized aliases for inc/dec +- inc/dec: 'v:x' => 2 shortcut +- inc/dec: drop default 'v:d' and accept nested {in|de}crement +- 'participant_in_variable_enabled' switch +- make re_apply use the applied workitem by default +- ${mnemo_id} (along with ${expid} and ${subid}) +- Dashboard#remove_process (idea Claudio Petasecca Donati) +- re_dispatch bug fix (patch by Doug Bryant) +- Ruote.extract_wfid(o) +- on_error/on_timeout: cancel/cando +- Worker#handle_step_error(e, msg) enhancements +- cancel "flavour" rebound +- Dashboard#logger shortcut +- :on_error => 'raise' +- :over_if bug fix (reported by Alex Wang) +- :merge_type => 'deep' (idea Jim MarsBomber Li) +- Dashboard#launch accepts :wfid "field", custom wfid +- kill_process expression (and on_error) +- the "second take" (__on_error__, __on_cancel__) +- Ruote.tree(&block) alias to Ruote.to_tree(&block) +- added 'tree' entry to error doc and error msg +- error handler $f:__error__: added 'tree' entry +- Ruote::Reader.to_expid_radial +- wfid_generator: dropping the @last['raw'] concept +- wait_for(:x, :or_error) (thanks John Roberts) +- concurrence over_if bug (thanks alexw668) +- concurrence and citerator :remaining => 'wait' (idea Pedro Visintin) +- set 'v:x' => 'y', :over[ride] => true/'sub' +- concurrence and citerator :count => -x (all but x) +- "await" expression, successor to "listen" +- root expression: __past_tags__ variable +- full tags +- concurrence and citerator: :count => 0 (immediate reply) +- iterator and concurrent-iterator: implicit sequence +- iterator: stopped creating new variable scope +- :vars_to_f common attribute +- :scope => true forces a new variable scope +- subprocess 'field:x' => 'y' (variables and now fields) +- Dashboard#worklist (alias for Dashboard#storage_participant) +- set: now accepting children (and behaving like a sequence) +- [un]set: setting __result__ +- concurrence :wait_for => 'alpha, bravo' (idea Raphael Simon) +- BlockParticipant: nicer multi blocks +- Dashboard #cancel and #kill now accept options +- StorageParticipant #reserve and #delegate +- 'terminated/ceased' msg: include root exp variables +- Dashboard#worker_state[=] (running/paused/stopped) +- define :on_terminate => :regenerate +- :on_error => '5m: retry * 3, 10m: retry' +- :on_error => '5m: retry, 2m: retry, pass' +- dsub for attribute keys as well +- conf option: 'worker_info_enabled' (defaults to true, enabled) +- Dashboard#register saves list in one batch (unless :clear => true) +- DefaultHistory include Enumerable +- Dashboard#wait_for(action_name) (dispatch, cancel, reply, ...) +- merged TestLogger into WaitLogger +- :take and :discard common attributes +- filter: 'take' and 'discard' +- Participant: on_cancel -> false prevents on_cancel reply +- LocalParticipant #is_gone? #is_cancel[l]ed? +- Dashboard#worker_info +- msg: put_doc, low-level action +- participant: #rtimers, #rtimeout and #timers +- lose and forget expressions: aligned 'multi' behaviour +- concurrence and citerator: :merge_type => 'ignore' +- :timers error, redo/retry, undo/pass and commands +- :timers common attribute +- :flank common attribute +- Storage#done(worker, msg) optional method +- get_many :batch option (used by some storages for optimization) +- 'stall' expression (mostly for testing) +- context and worker : subscription reworked +- worker: 'restless_worker' option +- Ruote::Dashboard (will slowly phase Ruote::Engine out) +- :on_timeout => 'rewind', :on_timeout => 'jump to alpha' +- :on_error => 'rewind', :on_error => 'jump to alpha' +- dispatch_pool and context['participant_threads_enabled'] +- participant params.__children__ +- on_error expression +- concurrence :merge_type => 'concat' (vs 'union') (Thanks Julien France) +- Workitem#re_dispatch_count +- Engine#launch(pdef, fields, vars, root_stash) +- Workitem #[] amd #[]= (#lookup and #set_field shortcuts) +- LocalParticipant#lookup_variable(key) +- LocalParticipant / Receiver : stash_get / stash_put +- LocalParticipant implicit participant_name +- LocalParticipant implicit workitem, fei, flavour and fexp +- Participant #on_workitem, #dont_thread?, etc +- FlowExpression #root and #root_id +- dollar substitution in expression name as well +- Engine#replay_at_error(err_or_fei_or_wi) +- Engine#error(wi_or_fei) +- storages: #replace_engine_configuration(opts) +- FsStorage: saving newer configuration (Thanks Nicholas Faiz) +- ProcessStatus context: linking expression <-> error +- ProcessStatus#root_workitem +- ProcessStatus#leaves +- filter 'includes' and 'is' (Thanks Nando Sola) +- trailing fields (a Simone Carletti idea) +- concurrence vs history issue fixed (Thanks Juris Galang) +- unset and fields: made sure the field is removed (Thanks jpgilman) +- sourcify, using to_raw_source from now on +- filter expression and blocks +- set 'v:display' => 'echo', aliasing of expressions +- Reader.read(s): better error raised when failed to 'parse' +- :on_field => 'my.nested.field' now possible +- [concurrent-]iterator :to => 'v:x' / 'f:y' / 'y' +- concurrence :merge_type => 'union' +- Reader.to_radial(tree) +- Workitem#param_or_field(key) and #field_or_param(key) +- Workitem#param_text +- ProcessError#deviations (cf filter and Ruote::ValidationError) +- reworked (process definition) Reader +- filter top-level 'or' +- filter field => 'x|y' (or on field names) +- 'radial' process definitions +- fixed Tracker#add_tracker (2nd try) issue (Thanks Pedro Texeira) +- Engine#register :on_workitem / :on_reply / ... +- set 'v:participant' => lambda { |wi| wi.fields['x'] = 'y' } +- listen :to => :errors, :class => string / :message/:msg => string / regex +- listen :to => :errors +- dropped require 'json' and co from fs_storage (Thanks Torsten) +- cursor : 'reset' command and :reset_if attribute +- Engine#resume(wfid, :anyway => true) resumes any paused expression in a + given process +- Engine#pause(fei, :breakpoint => true) pauses only one expression (and not + its children) +- CompositeStorage#delete_schedule fix (Thanks Greg) +- read 'http://'|'file', :to => 'f:a' / :to => 'v:b' +- save :to => 'f:a' / :to => 'v:b' +- pause(fei/wfid), resume(fei/wfid) +- participant list, multiple participants with same regex now ok, allowing + for cascading participants (at consume and at on_error) +- register block : fixed issue with lonely pname and block +- register_participant : after/before/over +- register block : now clearing by default +- fixed issue with deep set and unset (Thanks Nando Sola) +- improved conditional evaluation for dollar notation +- register block : catchall and catch_all +- Workitem #wf_name and #wf_revision +- StorageParticipant :skip and :limit issues (Thanks Jan Topiński) +- StorageParticipant #proceed deprecates #reply +- fix for :if => '${a}' when a like '456ab' (Thanks John Le) +- StorageParticipant :count => true uniformization (Thanks Jan Topiński) +- StorageParticipant#by_fei (alias for #[]) + + +== ruote - 2.2.0 released 2011/03/01 - Engine#participant(name) returns an instance of any participant - :filter => 'participant_name' (consume(wi) / filter(fields)) - listen block and forget issue fixed (Thanks Nando Sola) - @msg always set in FlowExpression