diff options
author | Nicolas Vigier <boklm@mageia.org> | 2011-01-06 01:07:55 +0000 |
---|---|---|
committer | Nicolas Vigier <boklm@mageia.org> | 2011-01-06 01:07:55 +0000 |
commit | a4f149873af1e9cff9ab0829adfcd3eca1a3780d (patch) | |
tree | c1345b951f4c67e3e9c5bf57f984c3e9f901f17f /lib/Youri/Utils.pm | |
download | mga-youri-core-a4f149873af1e9cff9ab0829adfcd3eca1a3780d.tar mga-youri-core-a4f149873af1e9cff9ab0829adfcd3eca1a3780d.tar.gz mga-youri-core-a4f149873af1e9cff9ab0829adfcd3eca1a3780d.tar.bz2 mga-youri-core-a4f149873af1e9cff9ab0829adfcd3eca1a3780d.tar.xz mga-youri-core-a4f149873af1e9cff9ab0829adfcd3eca1a3780d.zip |
search in core, nonfree, tainted instead of main, contrib
Diffstat (limited to 'lib/Youri/Utils.pm')
-rw-r--r-- | lib/Youri/Utils.pm | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/lib/Youri/Utils.pm b/lib/Youri/Utils.pm new file mode 100644 index 0000000..f22796a --- /dev/null +++ b/lib/Youri/Utils.pm @@ -0,0 +1,98 @@ +# $Id: Utils.pm 1713 2006-10-16 16:39:53Z warly $ +package Youri::Utils; + +=head1 NAME + +Youri::Utils - Youri shared functions + +=head1 DESCRIPTION + +This module implement some helper functions for all youri applications. + +=cut + +use base qw(Exporter); +use Carp; +use strict; +use warnings; + +our @EXPORT = qw( + create_instance + load_class + add2hash + add2hash_ +); + +=head2 create_instance($class, $config, $options) + +Create an instance from a plugin implementing given interface, using given +configuration and local options. +Returns a plugin instance, or undef if something went wrong. + +=cut + +sub create_instance { + my ($interface, $config, $options) = @_; + + croak 'No interface given' unless $interface; + croak 'No config given' unless $config; + + my $class = $config->{class}; + if (!$class) { + carp "No class given, can't load plugin"; + return; + } + + # ensure loaded + load_class($class); + + # check interface + if (!$class->isa($interface)) { + carp "$class is not a $interface"; + return; + } + + # instantiate + no strict 'refs'; + + return $class->new( + $config->{options} ? %{$config->{options}} : (), + $options ? %{$options} : (), + ); +} + +sub load_class { + my ($class) = @_; + + $class .= '.pm'; + $class =~ s/::/\//g; + require $class; +} + +# structure helpers + +sub add2hash { + my ($a, $b) = @_; + while (my ($k, $v) = each %{$b || {}}) { + $a->{$k} ||= $v; + } + return $a; +} + +sub add2hash_ { + my ($a, $b) = @_; + while (my ($k, $v) = each %{$b || {}}) { + exists $a->{$k} or $a->{$k} = $v; + } + return $a; +} + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2002-2006, YOURI project + +This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. + +=cut + +1; |