Revision history for Geo-Coder-List
0.39 Mon Oct 19 12:54:37 PM EDT 2026
[ Enhancements ]
- reverse_geocode(): croak on a latlng that is not a numeric pair written in
the ASCII digits 0-9; it used to be split and sent to every backend
- geocode(): a location that does not match a geocoder's regex no longer
spends that geocoder's limit
- geocode(): in list context, every answer inside a Geo::GeoNames-style
array is returned, not only the first one of each array
- new(): a clone has its own geocoder chain and limits; pushing onto it or
spending a limit no longer changes the original. It still shares L1 and
L2 with the original
- LWP::Protocol::https and IPC::System::Simple are no longer runtime
prerequisites, since the module uses neither; install them yourself if
you relied on this module to pull them in
- geocode(): the location rule is Geo::Location::Predicate's, which is a
distribution of its own now, so this module declares it as a
recommendation in META instead of requiring Geo::Coder::Free, and nothing
here decides the rule again. It is looked for when it is first needed
rather than when this module loads. Without it a reference is still
refused and a string of digits is looked up as it was before the rule
existed; with it the rule decides everything
- Debug messages also go to the configured logger, at debug level
- An L2 cache whose get() or set() dies is warned about and treated as a
miss, rather than failing the lookup
[ Bug fixes ]
- geocode(): refuse a reference; it used to be accepted because the string it
turns into contains a non-digit
- geocode(): the location rule is asked of the HTML-decoded string, so
'12' is refused as the digits it is
- geocode(): a result with a latitude but no longitude is passed over so the
next geocoder can answer, instead of croaking "BUG: ... not sensible"
- geocode(): a bare scalar ahead of a valid result no longer dies with
"Can't use string as a HASH ref"
- geocode(): with an L2 cache, the result returned (and held in L1) was
stripped to geometry and lost lat/lng and its geocoder; only the L2 copy is
stripped now
- geocode(): a plain string in the cache is not returned as a result
- geocode(), reverse_geocode(): the caller's $@ is left alone
- _cache(): a result with no geometry is cached for cache_miss_duration; the
lat check auto-vivified geometry, so it was always cache_part_duration
- reverse_geocode(): a list-context cache hit returned an arrayref, and a
scalar call after a list call returned one too
- reverse_geocode(): in list context a geocoder with no address no longer
ends the search, and the empty answer is not cached
- reverse_geocode(): in list context a plain-string address no longer dies
with "Can't use string as a HASH ref"
- The module compiles on Perl 5.10.1 again, as Makefile.PL says; a regex
flag needing 5.14 had crept in
[ Documentation ]
- Rewrote the POD: more SYNOPSIS examples, DESCRIPTION, SUPPORTED ANSWER
FORMATS, COMMON PITFALLS, ENCODING, API SPECIFICATION blocks in the form
extract-schemas --strict-pod=fatal reads, FORMAL SPECIFICATION and STATE
DIAGRAM
[ CI ]
- .github/workflows/location-predicates.yml runs the location-predicate fuzz
here, on a schedule and on a push, with --sibling Geo-Coder-List: this
distribution is graded against Geo::Location::Predicate and the other five
are not, so a drift here fails in the repository that would have to fix it
rather than only in Geo-Coder-Free's daily run.
[ Packaging ]
- Declare Data::Dumper and constant at runtime; move LWP::Protocol::https and
IPC::System::Simple to TEST_REQUIRES and add LWP::UserAgent there
- Dropped the unused autodie
- ignore.txt is no longer shipped; xt/ is skipped by MANIFEST.SKIP
[ Testing ]
- Added t/reference.t, the same test as the other Geo::Coder distributions
- t/function.t: hostile-input, mid-flight failure and helper tests
- t/30-basics.t uses Test::Mockingbird instead of Test::MockObject
- Added t/minimum-version.t, an author test that the module's syntax needs
no later Perl than Makefile.PL declares
0.38 Fri Jul 10 13:35:31 EDT 2026
[ Bug fixes ]
- Fixed testing prereqs (affected AUTHOR_TESTING only)
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
Keyboard Shortcuts
Global
s
Focus search bar
?
Bring up this help dialog
GitHub
gp
Go to pull requests
gi
Go to GitHub issues (only if GitHub is preferred repository)