Revision history for Data-DPath

0.51      2015-02-04

  - docs: how to do XPath-like attributes access (RT#94211) [Slaven Rezić]
  - avoid warning with perl 5.21+ via newer "aliased" [Doug Bell]
  - speed optimizations (5%) [Reini Urban]

0.50      2014-03-14
  - micro optimization: _any() saves a dereference

0.49      2012-12-05
  - Bummer! Uploaded 0.48 as wrong user - too many identities...
      The Creature: "Who am I?"
      Victor Frankenstein: "You? I don't know."

0.48      2012-12-05
  [Maintenance]
  - fix POD (pdl++)
  - use Test::TAPv13 in xt tests

  [Bugfixes]
  - fix tests to work with Perl 5.17.6+

0.47      2012-05-23
  - set dependency to Safe.pm 2.30 only in meta but do not require it
    at runtime. This relaxes it for older Perls where newer Safe breaks
    but the corresponding older Safe works good enough.

0.46      2012-04-11
  [micro fixes only]
  - fix broken links
  - changelog conforms to CPAN::Changes::Spec

0.45      2012-04-11
  [Maintenance]
  - use Dist::Zilla for building
  - xt/ benchmarks without Safe.pm
  - small optimizations [by Alexei Znamensky]

  [Bugfixes]
  - RT#69042: use module Sys::CPU to figure # of processors
    (but deactivated completely for now)
  - RT#72059: incorrect POD syntax : =item * <text>
  - RT#76016: Please depend on Safe 2.30

0.44      2011-06-22
  - fix RT#68882 - the value() filter function worked odd
	  [reported by Alexei "RUSSOZ" Znamensky]

0.43      2011-04-16
  [Mainly a maintenance release]

  [Bugfixes]
	- allow "too many" parent(/..) steps
	- Avoid clobbering $_ [contributed by FLORA]
	- fix bug with dpathr()
	- Code Æsthetics

  [Speed]
	- some speed improvement
	- docs: hint to more slowness with Safe.pm
	- run xt/ benchmarks without Safe.pm

0.42      2011-01-04
	- dependency to Safe.pm raised

0.41      2010-10-01
  [Incompatible changes:]
	- restrict filter expression syntax with Safe.pm
	- set local $Data::DPath::USE_SAFE = 0 to enable old eval again

  [Bugfixes:]
	- The optimization for '//' (ANYWHERE) had skipped ARRAYs that
	  were blessed. It now checks them, too.
	- Hash entry values of 0 or undef were filtered away. Now
	  fixed. (spotted by Dirk Melchers)

  [Refactoring for easier code and later hopefully easier]
	parallelization. Currently slightly slower.

0.40      2010-07-13
  [Incompatible API changes!]

  [Cleanup iterator style API and document it. It now consists of:]
	- dpathi()    ... initialize iterator
	- isearch()   ... incremental search
	- deref()     ... get actual value
	- ref()       ... get reference to actual value

  [Several methods now internal (prefixed with underscore) to make]
	the public API more clear.

  [Make accessing internal point attributes ("attrs") a public API]

0.37      2010-07-10
  [Introduce Iterator style context usage]
	- dpathi($data, $path_str) returns an iterator on which you can
	  do incremental searches using isearch($path_str)
	- API still experimental

0.36      2010-07-09
  [New axis ::ancestor]
  - selects all ancestors (parent, grandparent, etc.) of the current node

  [New axis ::ancestor-or-self]
  - selects all ancestors (parent, grandparent, etc.) of the current node and the current node itself

  [Code refactoring]
	- more readable internal data structure to ease debugging
	- factored out subs
	- this might make the code a bit slower again, but I hope it helps
	  profiling and optimizing on encapsulated small parts in the long run

0.35      2010-04-07
  - Bummer! Fixed stupid perl version checking in tests.

0.34      2010-03-27
  - solve some CPAN testing issues

0.33      2010-03-24
  [bugfixes]
  - Fix regression that sneaked in with the //KEY-look-ahead optimization

  [maintenance]
  - testsuite maintenance
  - documentation maintenance
	- comparison with Data::Path reworked
	- more verbose array semantics described

0.32      2009-09-25
  [maintenance]
  - I cannot believe that I forgot to define the dependency to
    Text::Balanced! Let's see if this fixes some FAIL reports.

0.31      2009-09-22
  [maintenance]
  - fix docs and changelog of 0.30 which appeared rather incomplete

0.30      2009-09-22
  [Yet more speed optimizations]
	- switch from Object::Tiny::RW to Class::XSAccessor::Array
	- try fast ref() before falling back to slower reftype()
	- use constants
  - We are now at 3.2sec runtime for my benchmark, compared to
    original 65sec v0.17, so we are now 20 times faster.

  [maintenance]
  - Backported code to Perl 5.8

  [Enable 5.10 features by default if Perl >= 5.10 available]
	- in particular the overloading of the smartmatch '~~' operator
	- cloned and backported large parts of the test suite to only
    use 5.8 features and skip 5.10 specific suite on 5.8
	- drop some redundant test scripts

  [INCOMPATIBLE CHANGE]
	Filter functions are now hard prototyped, no more behaviour
	depending on optional params. You now have to use explicit
	check functions for this, like this:
	- //ZOMTEC[ reftype eq "Foo::Bar"  ]   # reftype just returns value
	- //ZOMTEC[ is_reftype("Foo::Bar") ]   # is_reftype checks against arg

0.21      2009-09-17
  [even more aggressive speed optimizations:]
  - dropped Moose and MX::Declare completely in favor of
    Object::Tiny::RW and classical old school subs

  [cleaned up dirty code by partially using]
	- no strict 'refs'
	- no warnings 'uninitialized'

  [benchmarks]
  - the overall speed improvement for my "xt/large_data.t"
	  benchmark is an improved runtime from originally
    - 65s   (v0.17) to
	  -  4.2s (v0.21)
  	on my netbook. Yes, 15 times faster.
  - thanks to Devel::NYTProf which helped a lot profiling this

0.20      2009-09-16
  [aggressive speed optimizations, needed @ work]
  - the ANYSTEP "//" not looks ahead to the following step and
	  reduces the intermediate point sets if it is a hash key, like in
	  "//AFFE"
  - remove Moose type constraints
  - more array references instead of arrays
  - partially this led to more dirty code, I try to fix this later

0.17      2009-08-11
  [filter expressions]
  - understand even more strange perl'oid filter expressions by
	  using extract_codeblock instead of extract_bracketed
  - tests for this

0.16      2009-08-11
  [filter expressions]
  - filter expressions can now contain slashes (just as you would
	  naturally expect)

0.15      2009-08-11
  [filter expressions]
  - fix semantics of filter function key(). It now provides the key
    under which the value is associated.
  - many more and fixed tests
  - doc cleanups and fixes
  - moved distro and development tests under xt/

0.14      2009-07-14
  - The overloaded smartmatch "~~" does not work commutative anymore
	  in bleadperl and Perl 5.10.1.
  - cleanup for bleadperl smartmatch warnings with undefined $_
  - minor additions to the comparison section

0.13      2009-07-14
  - comparison matrix Data::DPath vs. Data::Path, requested in
	  RT#47540, http://rt.cpan.org/Public/Bug/Display.html?id=47540

0.12      2009-06-26
  - allow returning references into original data structure via new
	  frontend function "dpathr" instead of "dpath"

0.11      2009-05-15
  - Dependencies raised to current MooseX stuff

0.10      2009-04-16
  - new path step: nostep "." (for filter chaining and on difficult
	  elements, like root node)
  - documentation improvements

0.09      2009-02-12
  - Quoted special chars ("*", "//", "..") now work as keys
  - compatibility with newest MooseX::Method::Signatures on class
    methods [Florian Ragwitz]

0.08      2009-02-11
  - Fix missing dependency to Test::Deep. Thanks, CPAN testers.
  [v0.07]
  - use Scalar::Util::reftype instead of ref. This enables blessed
    data structures to work.
  - Provide "reftype" and "isa" as filter functions.
  [v0.06]
  - "package" statements to help the CPAN indexer.

0.05      2009-02-10
  - more docs
  - tests for negative array indexes

0.04      2009-02-10
  - Fix $VERSION inside MoosX::Declare'd class not recognized by
    CPAN indexer

0.03      2009-02-09
  - The first useful release, see test suite for many examples!
  - much improved path tokenizer
  - new path steps: parent "..", anywhere "//", anystep "*"
  - implemented filter conditions (in brackets after path step)
  - filter condition type "just index": *[1]
  - filter condition type "eval": *[idx == 3], *[ key =~ m(foo) ]
  - cleaner semantics for STEP[filter] vs. STEP/*[filter]
  - cleaner semantics for combinations of "//", "..", "*", and filters
  - provide filter functions: size, idx, key, value
  - many more tests
  - more clean export behaviour [rafl++]
  - uniq results if found via multiple ways
  - overloaded '~~' smartmatch
  - switch to Module::Install
  - tests do not depend on result order

0.01      2008-11-26
  - initial CPAN version
  - basic paths, parents, placeholders
