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