Merge 'trunk' into 'DBIx-Class-current'
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / UUIDColumns.pm
CommitLineData
7da9cd47 1package DBIx::Class::UUIDColumns;
1edd1722 2use base qw/DBIx::Class/;
7da9cd47 3
4use Data::UUID;
5
6__PACKAGE__->mk_classdata( 'uuid_auto_columns' => [] );
7
8=head1 NAME
9
10DBIx::Class::UUIDColumns - Implicit uuid columns
11
12=head1 SYNOPSIS
13
14 pacakge Artist;
15 __PACKAGE__->load_components(qw/UUIDColumns Core DB/);
e821dce9 16 __PACKAGE__->uuid_columns( 'artist_id' );
7da9cd47 17
18=head1 DESCRIPTION
19
e821dce9 20This L<DBIx::Class> component resembles the behaviour of
7da9cd47 21L<Class::DBI::UUID>, to make some columns implicitly created as uuid.
22
23Note that the component needs to be loaded before Core.
24
25=head1 METHODS
26
8091aa91 27=head2 uuid_columns
7da9cd47 28
29=cut
30
31# be compatible with Class::DBI::UUID
32sub uuid_columns {
33 my $self = shift;
34 for (@_) {
701da8c4 35 $self->throw_exception("column $_ doesn't exist") unless $self->has_column($_);
7da9cd47 36 }
37 $self->uuid_auto_columns(\@_);
38}
39
40sub insert {
3b7992e1 41 my $self = shift;
7da9cd47 42 for my $column (@{$self->uuid_auto_columns}) {
103647d5 43 $self->store_column( $column, $self->get_uuid )
44 unless defined $self->get_column( $column );
7da9cd47 45 }
3b7992e1 46 $self->next::method(@_);
7da9cd47 47}
48
49sub get_uuid {
50 return Data::UUID->new->to_string(Data::UUID->new->create),
51}
52
7da9cd47 53=head1 AUTHORS
54
55Chia-liang Kao <clkao@clkao.org>
56
57=head1 LICENSE
58
59You may distribute this code under the same terms as Perl itself.
60
61=cut
62
631;