source: LATMOS-Accounts/lib/LATMOS/Accounts/SynchAccess/base.pm @ 861

Last change on this file since 861 was 861, checked in by nanardon, 13 years ago
  • reimport missing files from previous svn
  • Property svn:keywords set to Id Rev
File size: 1.4 KB
Line 
1package LATMOS::Accounts::SynchAccess::base;
2
3use strict;
4use warnings;
5use vars qw($AUTOLOAD);
6use Carp;
7use LATMOS::Accounts::Log;
8
9our $VERSION = (q$Rev$ =~ /^Rev: (\d+) /)[0];
10
11sub AUTOLOAD {
12    my ($self, @args) = @_;
13    my ($constname, $sub) = $AUTOLOAD =~ m/(.*)::([^:]+)/;
14    if ($sub =~ /^(wexported)/) {
15        $self->_no_trap($sub, @args);
16    } elsif ($sub =~ /^(check_password)$/) {
17        $self->_run_first($sub, @args);
18    } else {
19        $self->_trap_false($sub, @args);
20    }
21}
22
23sub new {
24    my ($class, $bases) = @_;
25    bless {
26        bases => [ @{ $bases } ],
27    }, $class;
28}
29
30sub bases {
31    my ($self) = @_;
32    @{ $self->{bases} || []}
33}
34
35sub _return_all {
36    my ($self, $sub, @args) = @_;
37    map { $_->$sub(@args) } $self->bases
38}
39
40sub _run_first {
41    my ($self, $sub, @args) = @_;
42    my ($fbase) = $self->bases;
43    $fbase->$sub(@args);
44}
45
46sub _no_trap {
47    my ($self, $sub, @args) = @_;
48    foreach ($self->bases) {
49        $_->$sub(@args);
50    }
51}
52
53sub _trap_false {
54    my ($self, $sub, @args) = @_;
55    my $failure = 0;
56    foreach ($self->bases) {
57        $_->$sub(@args) or do {
58                    la_log(LA_ERR, "SyncA: Erreur call $sub() for %s", $_);
59                $failure = 1;
60        };
61    }
62    $failure ? 0 : 1;
63}
64
65sub _trap_true {
66    my ($self, $sub, @args) = @_;
67    my $failure = 0;
68    foreach ($self->bases) {
69        $_->$sub(@args) and $failure = 1;
70    }
71    $failure ? 0 : 1;
72}
73
74sub DESTROY {}
75
761;
77
78__END__
Note: See TracBrowser for help on using the repository browser.