#############################################################################
#
# Provides a to_hash() method for NewBug/NewAttachment/etc classes
#
# Author:  Chris Weyl (cpan:RSRCHBOY), <cweyl@alumni.drew.edu>
# Company: No company, personal work
# Created: 01/24/2009 11:03:09 AM PST
#
# Copyright (c) 2009 Chris Weyl <cweyl@alumni.drew.edu>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
#############################################################################

package Fedora::Bugzilla::Role::NewHash;

use Moose::Role;

#use English qw{ -no_match_vars };  # Avoids regex performance penalty

#use namespace::clean -except => meta;

our $VERSION = 0.04;

sub to_hash {
    my $self = shift @_;

    # get all our attributes (including parent classes if we're subclassed)
    my @all_attrs = $self->meta->get_all_attributes;
    my @atts;

    for my $att (@all_attrs) {

        my $has = 'has_' . $att->name;
        push @atts, $att->name
            if $self->$has;
    }

    #my %data = map { $_ => $self->$_ } @atts;
    my %data = map { my $v = $self->$_; $_ => $v } @atts;

    ### %data

    return \%data;
}


1;

__END__

=head1 NAME

Fedora::Bugzilla::Role::NewHash - Provide a 'to_hash' method 

=head1 DESCRIPTION

Allows for the easy creation of "new" classes, by scanning all attributes and
returning a hashref of { attribute_name => value, ... }.


=head1 SUBROUTINES/METHODS

=head2 to_hash()

Returns a hashref of all attributes we have to their values.

=head1 SEE ALSO

L<Moose::Role>

=head1 BUGS AND LIMITATIONS

All complex software has bugs lurking in it, and this module is no
exception. If you find a bug please either email me, or (preferably) 
add the bug to the camelus ticket tracker at 
L<https://fedorahosted.org/camelus/newticket>.

Patches are welcome.

=head1 AUTHOR

Chris Weyl  <cweyl@alumni.drew.edu>


=head1 LICENSE AND COPYRIGHT

Copyright (c) 2009 Chris Weyl <cweyl@alumni.drew.edu>

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the 

    Free Software Foundation, Inc.
    59 Temple Place, Suite 330
    Boston, MA  02111-1307  USA

=cut

