Mercurial > pub > Impl
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;