1package IMDb::Generique;
2
3use 5.005;
4use strict;
5use vars qw($AUTOLOAD);
6use Carp;
7use LWP::UserAgent;
8use XML::LibXML 1.52;
9
10$IMDb::Ua      = new LWP::UserAgent requests_redirectable => [];
11$IMDb::Parser  = new XML::LibXML;
12
13sub fields
14{
15    return();
16}
17
18sub search
19{
20    return();
21}
22
23sub new
24{
25    my($proto, $id) = @_;
26    my $class  = ref $proto || $proto;
27    my $self   = {};
28    bless $self, $class;
29    return $self->init($id);
30}
31
32sub init
33{
34    my($self, $id) = @_;
35    $self->{id} = $id;
36    return $self;
37}
38
39sub id
40{
41    return $_[0]->{id};
42}
43
44sub type
45{
46    return(lc((split(/::/, ref($_[0])))[-1]));
47}
48
49sub AUTOLOAD
50{
51    my($self) = @_;
52    my $type = ref($self)
53        or croak "$self is not an object";
54
55    my $name = $AUTOLOAD;
56    $name =~ s/.*://;   # strip fully-qualified portion
57
58    return if $name eq 'DESTROY';
59    unless(grep($name eq $_, $self->fields))
60    {
61       croak "Can't access `$name' field in class $type";
62    }
63
64    if(!ref $self->{$name})
65    {
66        return $self->{$name};
67    }
68    elsif(ref $self->{$name} eq 'ARRAY')
69    {
70        return @{$self->{$name}};
71    }
72}
73
741;
75