The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package HTML::WidgetValidator::HTMLElement;
use warnings;
use strict;
use base qw(Class::Accessor::Fast);

__PACKAGE__->mk_accessors(qw(type name attr text));

sub new {
    my ($class, %args) = @_;
    my $self = $class->SUPER::new(\%args);
    return $self;
}

sub compare {
    my ($self, $model ) = @_;

    return unless $model;
    return unless $self->{type} eq $model->{type};
    return if( $self->name && lc($self->name) ne $model->{name} );
    
    if( $model->{text} ){
	return unless _compare( $self->text, $model->{text} );
    }
    if( $self->attr && scalar keys %{$self->attr} > 0 ){
	return unless $model->{attr};
	return  if scalar keys %{$self->attr} != scalar keys %{$model->{attr}};
	foreach my $attr ( keys %{$self->attr} ){
	    return unless defined $model->{attr}->{$attr};
	    return unless _compare( $self->attr->{$attr}, $model->{attr}->{$attr} );
	}
    }elsif( $model->{attr} ){
	return;
    }
    return 1;
}

sub _compare {
    my ( $text, $model ) = @_;
    if( ref $model eq 'Regexp' ){
	return $text =~ /^(?:$model)$/is ? 1 : 0;
    }elsif( defined $model ){
	return lc($text) eq lc($model) ? 1 : 0;
    }
    return 0;
}

1;
__END__

=head1 NAME

HTML::WidgetValidator::HTMLElement


=head1 DESCRIPTION

HTML Element class for HTML::WidgetValidator.


=head1 SEE ALSO

L<HTML::WidgetValidator>,
L<Class::Accessor::Fast>

=head1 AUTHOR

Takaaki Mizuno  C<< <mizuno_takaaki@hatena.ne.jp> >>


=head1 LICENCE AND COPYRIGHT

Copyright (C) Hatena Inc. All Rights Reserved.

This module is free software; you can redistribute it and/or
modify it under the same terms as Perl itself. See L<perlartistic>.