diff lib/IMPL/Resources/Format.pm @ 407:c6e90e02dd17 ref20150831

renamed Lib->lib
author cin
date Fri, 04 Sep 2015 19:40:23 +0300
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/IMPL/Resources/Format.pm	Fri Sep 04 19:40:23 2015 +0300
@@ -0,0 +1,41 @@
+package IMPL::Resources::Format;
+use strict;
+use warnings;
+
+require Exporter;
+our @ISA = qw(Exporter);
+our @EXPORT_OK = qw(&FormatMessage);
+
+sub FormatMessage {
+    my ($string,$args,$resolver) = @_;
+    
+    $args ||= {};
+    $resolver ||= \&_defaultResolver;
+    $string ||= '';
+    
+    $string =~ s/%(\w+(?:\.\w+)*)%/_getvalue($args,$1,"\[$1\]",$resolver)/ge;
+    
+    return $string;
+}
+
+sub _getvalue {
+    my ($obj,$path,$default,$resolver) = @_;
+    
+    foreach my $chunk (split /\./,$path) {
+        return $default unless $obj;
+        if (ref $obj eq 'HASH') {
+            $obj = $obj->{$chunk};
+        } else {
+            $obj = $resolver->($obj,$chunk);
+        }
+    }
+    return $obj||'<undef>';
+}
+
+sub _defaultResolver {
+    my ($obj,$prop) = @_;
+    
+    return eval { $obj->$prop() };
+}
+
+1;