
= OpenWFE-ru 0.9.17 released

OpenWFEru is an open source workflow / BPM engine implemented in Ruby.


== What's new

This release mainly focuses on separating OpenWFEru from its Rufus components [1], lots of code pieces reusable elsewhere have been extracted out of OpenWFEru as Ruby gems.

There has been a lot of work put in simplifying the internals of the engine, nothing changed on the surface though.

The engine.register_participant method now sports a :position optional argument (can be set to :first to insert a participant in the first position).

Process 'tags' have been made more visible via the process status (see [2]).

Tomaso provided us with a more compact variant of the ActiveRecord based workitems, requiring less space (but less searchable).

Many changes in OpenWFEru are visible via its demo web application, Densha [3], there is also a new example / tutorial, heavily leveraging Densha, it's available at [4].

The nicest new feature visible through Densha is probably "process gardening" where a 'business process administrator' can modify running process instances on the fly (see [5]).


Feedback is welcome at : http://groups.google.com/group/openwferu-users


[1] http://rufus.rubyforge.org/
[2] http://jmettraux.wordpress.com/2007/12/03/state-machine/
[3] http://difference.openwfe.org:3000/
[4] http://openwferu.rubyforge.org/ttt/p0.html
[5] http://jmettraux.wordpress.com/2008/03/10/process-gardening/


== What's next

- 1.0 (instead of 0.9.18) ?
- integration of rufus-verbs
- write mode for fluo
- simplification for engine level crons
- more expressions display support for Densha process definition graphical rendering
- more vapor


== CHANGELOG

- todo  #18861 : aliased 'restore' to 'set-fields' and turned it into
                 a ValueMixin user - s1617
- todo  #18806 : removed require "rubygems" from engine, leaving responsability
                 to customer code - s1610
- todo  #18769 : now keeping track of raw_representation for all exps - s1604
- todo  #18773 : implemented engine.update_expression(fexp) - s1601
- todo  #18771 : deprecated SymbolHash (raw expression representation) - s1600
- todo  #18747 : allowing "iterator :on => :f" (symbol for designated source
                 of value) - s1598
- todo  #18745 : let [concurrent-]iterator accept on-field, on-var, ... - s1597
- todo  #18701 : implemented engine.update_expression_data(fei, d) - s1583
- bug   #18700 : FlowExpressionId.from_h not working with jsonified hashes.
                 Fixed - s1582
- todo  #18671 : added is_paused?(wfid) to StatusMixin - s1579
- bug   #18643 : made the workitem search a bit more 'google-like' - s1571
- bug   #18580 : active participant last_modified not kept. Fixed - s1568
- bug   #18557 : exp 'participant' not replying with applied item to cancel()
                 calls. Fixed - s1552
- todo  #18531 : added 'unapplied' option to engine.process_stack() - s1547
- bug   #18348 : cron subprocesses subid reset at 0 upon restart. Fixed - s1542
- bug   #18254 : socketlistener not replying with <ok-reply/>. Fixed - s1530
- bug   #18218 : intermittent process_status.paused? failure. Fixed - s1520
- todo  #16635 : allowed recursion for top processes - s1518
- todo  #18192 : dropped SimpleExpRepresentation for Array - s1514
- todo  #18152 : simplified raw_xml and raw_prog to only raw.rb - s1513
- todo  #18110 : switched from open-uri to rufus-verbs for reading [remote]
                 process definitions - s1512
- todo  #18145 : moved to no-params constructors for FlowExpression based
                 classes - s1511
- todo  #18078 : <break if="${f:f}"/> will now work if field f is set - s1507
- todo  #15813 : isolated ValueMixin and used it in 'set', 'print', 'eval',
                 'reval' and 'log' - s1504
- todo  #17888 : optimized Workitem.search() - s1498
- bug   #17873 : ActiveParticipant not accepting string fields with length
                 > 255. Fixed - s1497
- bug   #17850 : proc definitions whose 1st line is blank were not accepted.
                 Fixed - s1496
- todo  #17851 : caching the paused? process info - s1494
- todo  #17826 : simplified workitem [] and []= impl - s1489
- todo  #17823 : implemented basecamp participant (extras) - s1486
- todo  #17744 : extracted sqs.rb and now depending on gem 'rufus-sqs' - s1470
- patch #17720 : Tomaso's workitem.unset_attribute(). Patched - s1466
- todo  #17475 : extracted csv stuff and now depending on gem 'rufus-decision'
                 - s1453
- todo  #17476 : extracted kotoba.rb and now depending on gem 'rufus-mnemo' 
                 - s1451
- todo  #17472 : extracted safe.rb and now depending on gem 'rufus-eval' - s1450
- todo  #17442 : extracted dollar.rb and now depending on gem 'rufus-dollar'
                 - s1446
- todo  #16658 : extracted scheduler and now depending on gem 'rufus-scheduler'
                 - s1444
- todo  #17100 : extracted lru and now depending on gem 'rufus-lru' - s1440
- todo  #17063 : compact workitems - s1438
- todo  #16976 : allowing compact :var, :v and :f for the '[un]defined' 
                 expressions - s1434
- todo  #16831 : allowing compact :var, :v and :f for :variable and :field
                 (and also :val for :value) (for exp attributes) - s1431
- todo  #16825 : implemented the 'exp' doppelganger expression - s1429
- bug   #16833 : not using a monitor anymore in the scheduler, relying on 
                 queues. Finer granularity, more robust scheduler - s1425
- bug   #16791 : subprocess ref="sub_proc" was always looking for "sub-proc".
                 Fixed - s1415
- todo  #16654 : allow every jobs to unschedule or reschedule self - s1404
- todo  #16586 : added the '[ is][ not] set' concept to the $ notation - s1397
- todo  #16588 : set a min frequency of 0.3s for WaitingExpression impls - s1395
- todo  #16492 : optimized the 'reserve' expression - s1390
- todo  #16323 : added wfname() and wfrevision() to ProcessStatus - s1360
- todo  #16254 : relaxed the rules for process name/revision detection
                 in Ruby defined processes - s1347
- todo  #16228 : fulldup delegation - s1345
- todo  #16205 : replaced the expstorage each() system with the
                 find_expressions() one - s1344
- todo  #16152 : scheduler : made schedule_every() reschedule even if 
                 it experienced an exception - s1337
- todo  #16066 : require 'openwfe/engine' and 'openwfe/participants' now ok
                 - s1325
- todo  #16040 : implemented ProcessStatus.tags - s1323
- todo  #15925 : implemented engine.get_variables(fei_or_wfid) - s1319
- todo  #15985 : register_participant now has a :position param - s1313
- todo  #15954 : moved ${r:x} eval to safe level 4 - s1305
- todo  #15897 : revised expression_pool.cancel's fetch_root - s1298
- bug   #15830 : cancelling a cursor or a loop did not cancel active child
                 expression. Fixed - s1293
- bug   #15814 : loop and cursor and no proper environment. Fixed - s1289
- bug   #15793 : hide db_id from user forms - s1287
- todo  #15758 : implemented the 'eval' expression - s1278
- todo  #15757 : made sure evaluation of process segments is accepted - s1276

