Revision history for Ryu

4.001     2024-09-18 19:50:07+08:00 Asia/Singapore
    [Bugs fixed]

    - ->drain_from now propagates flow control correctly to the currently-attached source
    - using ->finish instead of ->completed->on_ready to avoid complaints about internal state not matching

4.000     2024-08-19 00:54:18+08:00 Asia/Singapore
    [New features]

    - Ryu::Source->emit_batch provides initial support for batches, for more efficient
    handling of larger volumes of data. Use `on_batch` to deal with the results.
    - Ryu::Source->as_void gives you an empty result, useful if you want to await
    without caring about the result
    - Ryu::Source->as_last allows you to wait for the last emitted value
    - Ryu::Sink->drain_from allow sequential processing of sources as inputs to a sink

    [Bugs fixed]

    - passing an arrayref to `$src->from` probably didn't work as expected before
    - some potential memory leaks addressed, particularly in source/sink interaction and for code using flow control (e.g. `$src->unblocked`)

3.005     2024-01-04 04:21:40+08:00 Asia/Singapore
    [Bugs fixed]

    - handle the `max_items` parameter to `->as_queue`

    [Dependencies]

    - update to latest Future::Queue to avoid deep-recursion scenario

3.004     2023-03-05 14:36:17+08:00 Asia/Singapore
    [New features]
    - Ryu::Source->as_queue allows `max_items` and will pause the stream while waiting for the queue to drain
    - flag a warning when someone tries to use `->completed->done/fail` directly, since that's not likely to work as expected

    [Bugs fixed]
    - extra single-use Futures were being created, which caused complaints from Future::XS since they were
    abandoned (the ->without_cancel calls in Ryu::Node)
    - chained nodes were still being called after completion, which would lead to some odd-looking debug messages
    from nodes such as `->take(5)`

3.003     2023-03-03 20:51:58+08:00 Asia/Singapore
    [New features]
    - Ryu::Observable now has a ->finish method

3.002     2021-07-07 17:48:25+08:00 Asia/Kuala_Lumpur
    [Bugs fixed]
    - in ->flat_map, any failure in the original or added Ryu::Source instances
    will now propagate as a failure for the ->flat_map source as well

3.001     2021-06-21 08:19:28+08:00 Asia/Kuala_Lumpur
    [New features]
    - Ryu::Observable has aliases for ->as_numeric, ->as_number and ->set_numeric, ->set_number
    - Sentinel support for Ryu::Observable via ->lvalue_str and ->lvalue_num

3.000     2021-05-01 19:58:23+08:00 Asia/Kuala_Lumpur
    [New features]
    - ->next support

    [Bugs fixed]
    - the ->completed and ->unblocked methods now return uncancellable Futures, so that
    they can be used with constructs such as Future->wait_any(timeout, $src->unblocked)
    without affecting internal state

2.009     2021-04-13 13:32:36+08:00 Asia/Kuala_Lumpur
    No new features.

    Bugs fixed:

    - ->unblocked could fail due to bypassing the default when attempting to use the Future factory

2.008     2021-04-05 12:20:04+08:00 Asia/Kuala_Lumpur
    New features:

    - ->emit_from joins multiple sources into the current source

2.007     2021-01-25 02:01:08+08:00 Asia/Kuala_Lumpur
    New features:

    - the `->source` provided by a Ryu::Sink is now a child of the sink itself,
    to facilitate backpressure algorithms and help with common streaming configurations

    Bugs fixed:

    - ->ordered_futures would call ->pause or ->resume more often than required,
    these are now only triggered when they would change state

2.006     2021-01-17 03:02:18+08:00 Asia/Kuala_Lumpur
    New features:

    - ->ordered_futures (->resolve) now also takes low/high parameters for backpressure

    Bugs fixed:

    - original source failure propagates after any pending Future instances are resolved,
    thanks to Amin Marashi (Github issue #8)

2.005     2021-01-17 02:16:18+08:00 Asia/Kuala_Lumpur
    New features:

    - ->as_buffer can take low/high parameters similar to ->buffer, providing backpressure
    for buffer streams.

    Bugs fixed:

    - small amount of extra protection on Ryu::Observable->notify_all, which was
    previously passing an alias to the internal value (so the notifier callback
    was able to modify this directly). Now receives a copy.

    Documentation updates:

    - Mojo::Rx no longer exists, replaced with RxPerl references

2.004     2020-12-03 00:38:42+08:00 Asia/Kuala_Lumpur
    No new features.

    Bugs fixed:

    - the `->from` method on a source was trying to call `blessed()` without importing
    it (thanks to KARJALA for raising this one)

2.003     2020-08-04 11:50:48+08:00 Asia/Kuala_Lumpur
    No new features.

    Bugs fixed:

    - memory leak when using ->ordered_futures, due to accumulation of callbacks for
    cancelling pending requests (thanks to Nael Alolwani for reporting and providing
    a test case)

2.002     2020-06-27 23:53:40+08:00 Asia/Kuala_Lumpur
    No new features.

    Documentation updates:

    - mention RxPerl and Future::Buffer
    - clearer link to Ryu::Source, since it's not always obvious
    where the real code can be found...

2.001     2020-06-09 01:35:39+08:00 Asia/Kuala_Lumpur
    New features:

    - basic ->read_packed support in Ryu::Buffer

2.000     2020-06-09 00:37:33+08:00 Asia/Kuala_Lumpur
    New features:

    - Ryu::Buffer was previously an empty class, should now be doing something useful
    - ->as_queue to get a Future::Queue instance from a Ryu::Source
    - ->as_buffer to get a Ryu::Buffer instance from a Ryu::Source

    Deprecations:

    - Ryu::Exception ->future is no longer supported, should be ->as_future instead

    Since there's a deprecated feature, this is a major version release.

1.012     2020-03-22 13:35:42+08:00 Asia/Kuala_Lumpur
    New features:

    - ->unblocked returns a Future which can be used to await a paused source/sink.

1.011     2020-01-07 11:24:46+08:00 Asia/Kuala_Lumpur
    No new features.

    Bugs fixed:

    - ->ordered_futures now cancels any pending Futures when the source fails.

1.010     2019-12-25 20:55:38+08:00 Asia/Kuala_Lumpur
    No new features.

    Bugs fixed:

    - ->take_until and ->skip_until may complete before the condition, handle that correctly
    - fully-qualify calls to Scalar::Util::refaddr to avoid runtime errors

1.009     2019-11-17 23:53:21+08:00 Asia/Kuala_Lumpur
    No new features.

    Dependencies:

    - minimum Future.pm version is now 0.42, due to a memory leak relating
    to cancellation in previous versions:
    https://rt.cpan.org/Ticket/Display.html?id=130957

1.008     2019-11-06 00:05:39+08:00 Asia/Kuala_Lumpur
    New features:

    - support ->on_failed on Ryu::Source

    Bugs fixed:

    - a Ryu::Sink could be completed before the Ryu::Source, avoid
    exceptions when the Ryu::Source subsequently completes and tries
    to mark the Future as done

1.007     2019-10-03 00:25:56+08:00 Asia/Kuala_Lumpur
    No new features.

    Bugs fixed:

    - ->ordered_futures was terminating too early due to previous changes, now
    only finishes after all items are complete.

1.006     2019-10-01 12:48:37+08:00 Asia/Kuala_Lumpur
    No new features.

    Bugs fixed:

    - ->with_index and some other methods were not completing when the parent
    was finished - thanks to Amin Marashi for reporting
    - lifetime handling for chained sources was simplified, ->each_while_source
    was supposed to attach handlers for the parent rather than the child source
    - dropped usage of namespace::clean

1.005     2019-05-05 19:15:56+08:00 Asia/Kuala_Lumpur
    No new features.

    Bugs fixed:

    - when there are no downstream nodes, the ->buffer node should accumulate
    data until something is attached, to support the common pattern of
    swapping out downstream nodes periodically (or when a threshold is reached)

1.004     2019-04-30 02:03:42+08:00 Asia/Kuala_Lumpur
    New features:

    - ->take_until method

1.003     2019-04-28 00:15:57+08:00 Asia/Kuala_Lumpur
    Documentation fixes:

    - Incorrect `C<>` block, thanks to MANWAR for reporting+submitting a
    [pull request for this](https://github.com/team-at-cpan/Ryu/pull/5).

    Dependencies:

    - minimum Perl version is now 5.18, as reported by SREZIC earlier
    versions get stuck on the test suite for some reason. This is quite
    likely to be a bug in the code, but legacy Perl support is not
    currently a priority (newer Perl versions have lots of useful bugfixes
    and improvements!).

1.002     2019-04-21 00:21:55+08:00 Asia/Kuala_Lumpur
    New features:

    - ->batch method for grouping items into arrayrefs

1.001     2019-04-15 05:44:47+08:00 Asia/Kuala_Lumpur
    New features:

    - sources populated from an immediate source (e.g. from an arrayref)
    will stream data via the `->{on_get}` callback the first time
    ->completed is called, since there's no guarantee we will be calling
    ->await on the top-level source.

    Bugs fixed:

    - ->buffer sources now only complete once the queue is drained.

1.000     2019-04-08 22:56:19+08:00 Asia/Kuala_Lumpur
    New features:

    - ->ignore method added: this throws away all its input

    Bugs fixed:

    - pause handling on sinks could previously report errors if nothing
    had called `->pause($src)` before the ->is_paused check

0.037     2019-03-25 17:42:43+08:00 Asia/Kuala_Lumpur
    No new features.

    Bugs fixed:

    - boolean comparison on Ryu::Observable instances caused a warning

0.036     2019-02-08 17:14:51+08:00 Asia/Kuala_Lumpur
    New features:
    
    - ->skip_until will filter out any items until the given condition
    is reached (either Future being true, or coderef returning true)

0.035     2019-01-02 01:37:38+08:00 Asia/Kuala_Lumpur
    No new features.

    Bugs fixed:

    - dist.ini file should now be included, thanks Grinnz

0.034     2019-01-02 00:19:29+08:00 Asia/Kuala_Lumpur
    Bugs fixed:

    - better support for sync chains: we now call the `->{on_get}` callback
    recursively if available.

    Developer updates:

    - moved from the old manual dist.ini content to a plugin bundle,
    hopefully this doesn't cause too much breakage

0.033     2018-12-21 15:35:22+08:00 Asia/Kuala_Lumpur
    Bugs fixed:

    - the ordered futures method ->resolve should not complete
    until all incoming entries are received and resolved

0.032     2018-12-15 20:20:24+08:00 Asia/Kuala_Lumpur
    New features:

    - ->buffer now supports high/low watermark
    - ->is_paused($obj) will check to see if the node is
    paused on request from $obj

0.031     2018-12-13 23:03:16+08:00 Asia/Kuala_Lumpur
    New features:

    - ->buffer method for collecting items while a source/sink
    are paused
    - ->retain method for keeping sources around

0.030     2018-12-13 20:58:38+08:00 Asia/Kuala_Lumpur
    New features:

    - flow control expanded and moved to the Ryu::Node
    parent class

    Bugs fixed:

    - resolved some edge cases where handlers can be
    added/removed during callback loops
    - the ->source inside a Ryu::Sink for handling events
    is now preserved when attaching an external source
    via ->from

0.029     2018-12-02 14:20:37+08:00 Asia/Kuala_Lumpur
    No new features.

    Bugs fixed:

    - ensure we retain sources when merging
    - allow merging with no parent source (Ryu::Source->merge)

0.028     2018-10-14 00:03:50+08:00 Asia/Kuala_Lumpur
    New features:

    - handle undef better in ->filter, and support arrayref as list
    of options (string match only so far, but this will eventually
    be a recursive match)

0.027     2018-01-02 00:52:31+08:00 Asia/Kuala_Lumpur
    New features:

    - ->hexdump, mainly intended for debugging protocol handling
    - ->map_from_source, allowing control over what is emitted (and
    when) compared to ->map

0.026     2017-12-28 01:11:07+08:00 Asia/Kuala_Lumpur
    No new features.

    Internal changes:

    - Clean up duplicated code which is now available in upstream Future.pm 0.37
    

0.025     2017-10-22 17:06:29+08:00 Asia/Kuala_Lumpur
    No new features.

    Bugs fixed:

    - Minor update to Ryu::Observable to fix a typo in a method call

0.024     2017-09-01 20:50:54+08:00 Asia/Kuala_Lumpur
    New features:

    - Ryu::Sink API updated in preparation for Ryu::Async release (might
    even gain some documentation in the next release)

0.023     2017-07-29 22:25:42+08:00 Asia/Kuala_Lumpur
    New features:

    - ->map with a string parameter will use that as a hashref key lookup
    on plain hashref items

0.022     2017-07-09 14:33:16+08:00 Asia/Kuala_Lumpur
    New features:

    - Basic CSV encoder/decoder support - does not handle embedded newlines

0.021     2017-06-26 02:04:15+08:00 Asia/Kuala_Lumpur
    No new features.

    Documentation:

    - Tidy up method ordering in Ryu::Source
    - More examples

0.020     2017-06-17 01:39:34+08:00 Asia/Kuala_Lumpur
    No new features.

    Bugs fixed:

    - ->encode and ->decode finish when upstream has no more data

0.019     2017-06-17 01:33:18+08:00 Asia/Kuala_Lumpur
    No new features.

    Bugs fixed:

    - ->sprintf_methods now defaults undef values, to avoid warnings. It
    also gains some documentation in the process.


0.018     2017-06-11 03:38:39+08:00 Asia/Kuala_Lumpur
    New features:

    - ->filter_isa - filter by object classes

0.017     2017-05-31 23:14:01+08:00 Asia/Kuala_Lumpur
    No new features.

    Documentation:

    - bring much-needed clarity to the documentation for Ryu::Observable.

0.016     2017-05-31 22:56:43+08:00 Asia/Kuala_Lumpur
    New features:

    - ->first - convenience wrapper for ->take(1)

0.015     2017-05-22 21:22:25+08:00 Asia/Kuala_Lumpur
    New features:

    - ->each_as_source - similar to ->each, but treats items as sources
    - ->switch_str - switch-like operator on stringified values

0.014     2017-03-25 22:45:14+08:00 Asia/Kuala_Lumpur
    New features:
    - sprintf_methods as shorthand for ->map(sprintf '...', $_->x, $_->y, ...)
    - Ryu::Source->from(Future), ->from(ARRAY)

0.013     2017-03-14 00:10:19+08:00 Asia/Kuala_Lumpur
    New features:

    - ->rev_sort_by (and ->rev_nsort_by) for reverse sorting
    - sorting functions are now guaranteed stable

0.012     2017-03-10 00:38:22+08:00 Asia/Kuala_Lumpur
    New features:

    - ->with_index annotates items with index information
    - ->sort_by for text sorting on a key
    - ->nsort_by for numeric sorting
    - ->extract_all for regex m//gc extraction

0.011     2017-03-09 22:47:41+08:00 Asia/Kuala_Lumpur
    Bug fixes:

    - Base64 decode - too many parameters were being passed to MIME::Base64::decode_base64

    New features:

    - 'UTF-8' is now supported as an alias for utf8 in ->encode
    and ->decode.
    - ->catch for continuing after errors
    - ->as_string and ->as_list / ->as_arrayref Future-returning methods
    - ->prefix and ->suffix

0.010     2017-03-04 14:20:06+08:00 Asia/Kuala_Lumpur
    New features:

    - ->say and ->print methods

0.009     2017-03-04 00:00:46+08:00 Asia/Kuala_Lumpur
    New features:

    - ->encode and ->decode with a few basic transcoders

0.008     2017-03-03 23:03:06+08:00 Asia/Kuala_Lumpur
    Bug fixes:

    - ->distinct now works more like it's described

    New features:

    - ->ordered_futures method
    - ->distinct_until_changed

0.007     2017-02-12 18:51:17+08:00 Asia/Kuala_Lumpur
    Bug fixes:

    - Discard values when finishing ->combine_latest and ->with_latest_from
    - Better protection against finish-after-failure errors

0.006     2017-01-29 01:06:51+08:00 Asia/Kuala_Lumpur
    API changes:

    - Ryu::Exception->future renamed to ->as_future, old method is
    still available but will be dropped by 1.0.

    New features:
    - ->source and ->value for Ryu::Observable

0.005     2017-01-16 20:26:27+08:00 Asia/Kuala_Lumpur
    New features:

    - ->set_numeric and ->set_string for Ryu::Observable

    Cosmetic changes:

    - Automatic labels for operators now omit the Ryu::Source:: prefix

0.004     2017-01-16 02:34:22+08:00 Asia/Kuala_Lumpur
    API changes:

    - ->await now returns the source, not the completion Future.

    Bug fixes:

    - ->await didn't, instead it delegated to Future's ->await which provides
    no guarantees about readiness when it returns. Fixed by looping until the
    Future is ready.

0.003     2017-01-16 01:38:09+08:00 Asia/Kuala_Lumpur
    New features:

    - Ryu::Observable->subscribe callbacks now receive value in $_ as well as @_

    Dependency fixes:

    - Missing deps - Variable::Disposition, etc. - added
    - Moved some unessential modules to recommends/suggests

0.002     2017-01-11 01:01:04+08:00 Asia/Kuala_Lumpur
    No new features.

    Dependency fixes:

    - Removed references to Devel::Peek, Devel::Refcount and Devel::MAT
    left over from earlier testing.

0.001     2017-01-08 19:45:18+08:00 Asia/Kuala_Lumpur
    Initial CPAN release