package WebDAO::Lexer::object;

=head1 NAME

WebDAO::Lexer::object - Process object tag

=head1 SYNOPSIS

=head1 DESCRIPTION

WebDAO::Lexer::object - Process object tag

=cut
use base 'WebDAO::Lexer::base';
use strict;
use warnings;
use Data::Dumper;

sub value {
    my $self = shift;
    my $eng  = shift;
    my @args = ();

    #skip not any
    foreach my $c ( $self->childs ) {
        unless ( UNIVERSAL::isa( $c, 'WebDAO::Lexer::base' ) ) {
            print "Bad element at " . ref($c);

            #     next;
        }

        #get values
        push @args, $c->value($eng);
    }

    #warn "Result: " . Dumper([@args]). Dumper($self->attr);
    if ($eng) {
        my $error;
        my $attr = $self->attr;

        #check if alias
        unless ( $eng->_pack4name( $attr->{class} ) ) {

            #try class as perl modulename
            $error = $eng->register_class( $attr->{class} );

        }
        if ($error) {

            #            _log1 $self
            warn "use module $attr->{class}  id: $attr->{id} fail. $error";
            return;
        }
        else {
            my $object = $eng->_createObj( $attr->{id}, $attr->{class}, @args );

            #            _log1 $self
            warn "create_obj fail for class: "
              . $attr->{class}
              . " ,id: "
              . $attr->{id}
              unless $object;

            return $object;
        }
    }
}
1;
__DATA__

=head1 SEE ALSO

http://sourceforge.net/projects/webdao

=head1 AUTHOR

Zahatski Aliaksandr, E<lt>zag@cpan.orgE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright 2002-2011 by Zahatski Aliaksandr

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself. 

=cut

