Revision history for Geo-Coder-List

0.37	Thu Jun  4 19:02:53 EDT 2026
	[ Enhancements ]
	Add Readonly constants and %config hash for configurable cache TTLs
	Add logging to reverse_geocode()
	Add full POD API specifications and Z-notation formal specs to all public methods
	ua() now clones the incoming UA per geocoder and restores the geocoder's own
	  User-Agent string (e.g. Geo::Coder::OSM/0.03); APIs such as OSM Nominatim
	  reject requests that use the generic libwww-perl default

	[ Testing ]
	Latest testing dashboard
	Added fuzz testing
	Use Test::Mockingbird in t/cache.t
	Added t/edge_cases.t: destructive, pathological, boundary and security tests
	Added t/extended_tests.t: coverage-raising tests for untested execution paths
	Documented four unreachable code paths in comments with analysis

	[ Bug fixes ]
	Extract _build_ca_address() helper; fix $state/.= bug in CA address builder
	Fix 'gecoder' typo in log entries (now correctly 'geocoder')
	Fix flush() to reset log to [] and return $self for chaining
	Fix _cache() write-path detection to correctly handle undef not-found values
	Fix $Data::Dumper::Maxdepth global side-effect (now uses local)
	Fix return CORE::push bug in reverse_geocode list context (returned count not address)
	Fix geocode() to return $good_result not blindly $rc[0] after last POSSIBLE_LOCATION
	Replace warn with Carp::carp throughout
	Add use autodie qw(:all), use Data::Dumper, use Readonly
	Fix geocode() normalisation: lat=0 (equator) was silently discarded because
	  five branches used truthy checks ($l->{lat}) instead of defined($l->{lat})
	Fix geocode() crash when a geocoder returns a bare scalar (e.g. 0 or ""):
	  added "next unless ref($l)" guard before hash dereference
	Fix geocode() L1 cache hit mutating caller-held references in place:
	  HASH results are now shallow-copied before stamping geocoder => 'cache',
	  so external variables and the cached entry are not silently modified
	Fix reverse_geocode() to retry without the 'latlng' key when a backing
	  geocoder rejects it as an unknown parameter (strict validation, e.g.
	  Geo::Coder::GeoApify); geocoders that require 'latlng' (e.g.
	  Geo::Coder::CA) still receive it on the first attempt

0.36	Tue Jan 13 08:17:40 EST 2026
	Invalid option now throws error rather than returning undef
	Added t/mock.t
	Use Params::Get and Object::Configure
	Clean up NO_NETWORK_TESTING setting
	Move the L1 cache into per-object
	Don't try to store an object in the cache
	Also set lon in the results
	Check that the argument is given to push()
	Added the test dashboard

0.35	Mon Feb 17 20:27:10 EST 2025
	GeoApify doesn't give an error if a location is not found
	geocode(): croak when input is just a set of numbers
	Allow a ref to a HASH to be used as the cache
	Added lat and lon to the output HASH for easier compatibility

0.34	Sat Oct 26 20:42:57 EDT 2024
	Turn off on-line tests for smokers
	Use Test::DescribeMe to simplify tests
	new(): Use Scalar::Util to verify it's an object
	Added support for Geo::Coder::ApifyKey

0.33	Thu May 16 09:28:54 EDT 2024
	Fix test count in t/googleplaces.t
	Don't test t/ua.t when network testing disabled
	Use Test::Needs
	Error if there's something wrong in the cache
	Looks like Geo::Coder::US::Census sometimes says it's worked when it hasn't
	Set the geocoder to 'cache' rather than undef for cached items

0.32	Sat Oct  7 10:07:45 EDT 2023
	Set "geocoder" to "cached" when the values have been retrieved from the L2 cache

0.31	Thu Jun 29 09:23:17 EDT 2023
	Change the croaks to carps
	Fix test when Geo::Coder::Free is not installed

0.30	Tue Jun 27 20:53:14 EDT 2023
	Better error message on wrong parameter
	Fix count if not enough installers installed in t/list.t
	Calling new on an object now returns a clone
	Don't fail if geocode.farm is down
	Handle OSM not setting state
	reverse_geocode now looks in the second cache
	Croak when geocode has invalid argument rather than silently return

0.29	Sun Jan 23 08:17:25 EST 2022
	Disable t/geofarm.t on smokers

0.28	Sat Jan 22 12:05:07 EST 2022
	Don't delete hashes when debugging
	Start to popluate the 'type' member of the returned hash
	Added support for Geo::Coder::Mapbox
	Temporarily invalid locations were being cached too long

0.27	Sat Jun 20 18:48:02 EDT 2020
	Added debug option to the constructor
	Be more intelligent in how long to keep a location in the cache
	Remove data from the cache of the wrong format

0.26	Wed  9 Oct 17:36:41 EDT 2019
	Fix reverse_coding of Canada
	Added support for OpenCage

0.25	Sat 20 Apr 21:24:01 EDT 2019
	Specify a minimum level of Perl

0.24	Wed 17 Apr 15:41:37 EDT 2019
	Support the cache option
	Test Geo::Coder::Free::Local
	Started work on reverse_geocode()

0.23	Fri Feb  1 20:57:05 EST 2019
	Add the calling line to the log
	Added support for Geo::Coder::DataScienceToolkit

0.22	Sun Jun  3 10:36:51 EDT 2018
	Fix call on unblessed instance

0.21	Sun Apr 22 19:53:36 EDT 2018
	Improved support for Geo::GeoNames error handling
	Remove HTML entities from locations, it confuses the URLs and breaks Geo::GeoNames
	Added the limit parameter to push()

0.20	Tue Apr 17 20:03:03 EDT 2018
	Don't bother to test using Google if you don't have a key
	Improved support for Geo::GeoNames

0.19	Sun Apr 15 20:42:05 EDT 2018
	Support Geo::GeoNames
	Explicit about which loop to finish
	Fix uninitialized variable
	Fix https://github.com/Humanstate/html-googlemaps-v3/issues/17

0.18	Tue Dec 26 08:18:54 EST 2017
	Improved return value checking
	Squash spaces

0.17	Fri Oct 27 14:14:57 EDT 2017
	Support Geo::Coder::Ovi, Geo::Coder::US::Census,
		Geo::Coder::GeocodeFarm and Geo::Coder::RandMcnally

0.16	Tue Oct 24 22:40:26 EDT 2017
	Return undef when the geocode fails

0.15	Fri Oct 20 14:25:48 EDT 2017
	Added log() and flush()

0.14	Wed Oct 11 09:58:18 EDT 2017
	Improve performance if asked for array first then scalar later
	Support Geo::Coder::Postcodes
	Verify against Geo::Coder::XYZ
	Set error

0.13	Tue Jul 25 11:40:19 EDT 2017
	Address RT#122441

0.12	Tue May 30 13:31:44 EDT 2017
	Bump minimum version of G:C:XYZ - RT#121919
	Stash array values
	When a geocoder errors, Carp the location

0.11	Sat 27 May 14:55:23 EDT 2017
	Test with the new L:U:Throttled

0.10	Fri May 26 17:29:04 EDT 2017
	If a geocoder returns error go to the next one
	If regex wasn't matched it tried it anyway
	Carp when a coder fails

0.09	Sat 13 May 10:15:44 EDT 2017
	Fix travis breakage that could also break cpan_testers

0.08	Sat 13 May 09:48:36 EDT 2017
	Only run on-line tests when wanted

0.07	Thu May 11 16:52:11 EDT 2017
	Added ua() method

0.06	Wed May 10 09:57:09 EDT 2017
	Allow different encoders to be used for different locations
	Added test for list context

0.05	Thu Feb  2 09:28:09 EST 2017
	Fix tests

0.04	Sat Jan 28 20:58:02 EST 2017
	Fixed Bing tests

0.03	Sat 28 Jan 07:52:23 EST 2017
	Some places now on the map, so change tests for failure
	Remember locations to increase speed

0.02	28 Dec 2016
	If a search dies, use the next encoder
	Build needs L:P:https

0.01	Thu 22 Dec 11:57:45 EST 2016
        First draft
