From 3de4de70eb8049b17b913952439359ec6fde4d1d Mon Sep 17 00:00:00 2001
From: Slaven Rezic <slaven@rezic.de>
Date: Sat, 26 Dec 2015 20:08:27 +0100
Subject: [PATCH] compatibility with newer DateTime::Locale versions (RT
 #108601)

---
 lib/DateTime/Format/Human/Duration.pm        |  6 +++++-
 lib/DateTime/Format/Human/Duration/Locale.pm | 25 +++++++++++++++++--------
 2 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/lib/DateTime/Format/Human/Duration.pm b/lib/DateTime/Format/Human/Duration.pm
index 53af6e1..749d40c 100644
--- a/lib/DateTime/Format/Human/Duration.pm
+++ b/lib/DateTime/Format/Human/Duration.pm
@@ -17,7 +17,11 @@ sub format_duration_between {
     my $dur = $dt - $dtb;
 
     if (!exists $args{'locale'}) {
-        $args{'locale'} = $dt->{'locale'}{'id'};
+	if (UNIVERSAL::can($dt->{'locale'}, 'code')) {
+	    $args{'locale'} = $dt->{'locale'}->code; # DateTime::Locale v1
+	} else {
+	    $args{'locale'} = $dt->{'locale'}->id;   # DateTime::Locale v0
+	}
     }
     
     return $span->format_duration($dur, %args);    
diff --git a/lib/DateTime/Format/Human/Duration/Locale.pm b/lib/DateTime/Format/Human/Duration/Locale.pm
index c71a728..58670c0 100644
--- a/lib/DateTime/Format/Human/Duration/Locale.pm
+++ b/lib/DateTime/Format/Human/Duration/Locale.pm
@@ -46,15 +46,24 @@ sub determine_locale_from {
     return '' if !$args_hr->{'get_locale_from'};
 
     if (ref $args_hr->{'get_locale_from'}) {
-        my $ns = ref($args_hr->{'get_locale_from'});
+	my $locale_obj;
+	if (UNIVERSAL::can($args_hr->{'get_locale_from'}, 'locale')) {
+	    $locale_obj = $args_hr->{'get_locale_from'}->locale;
+	}
+	else {
+	    $locale_obj = $args_hr->{'get_locale_from'};
+	}
 
-        if (exists $args_hr->{'get_locale_from'}{'locale'}) {
-            $ns = exists $args_hr->{'get_locale_from'}{'locale'}{'id'} ? $args_hr->{'get_locale_from'}{'locale'}{'id'} : ref($args_hr->{'get_locale_from'}{'locale'});
-        }
-        elsif ($ns =~ m{^DateTime::Locale::} && exists $args_hr->{'get_locale_from'}{'id'}) {
-            $ns = $args_hr->{'get_locale_from'}{'id'};
-        }
-        ($args_hr->{'get_locale_from'}) = reverse split /::/, $ns;
+	if (UNIVERSAL::can($locale_obj, 'code')) {
+	    $args_hr->{'get_locale_from'} = $locale_obj->code; # DateTime::Locale v1
+	}
+	elsif (UNIVERSAL::can($locale_obj, 'id')) {
+	    $args_hr->{'get_locale_from'} = $locale_obj->id;   # DateTime::Locale v0
+	}
+	else {
+	    my $ns = ref($args_hr->{'get_locale_from'});
+	    ($args_hr->{'get_locale_from'}) = reverse split /::/, $ns;
+	}
     }
     
     my ($short) = split(/[-_]+/,$args_hr->{'get_locale_from'});
-- 
2.1.2