X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=dbsrgits%2FDBIx-Class-UUIDColumns.git;a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FUUIDColumns.pm;h=7ea1912ebb8c4cc3a02f8277b351e6827f0e60c4;hp=75efb8ee7d22093d3cef89888060a9b577ded65f;hb=dee0985fad31cb8640798f4b8e7eb3779d6cc918;hpb=ebb2fe4f2972890b1eea3c5fdbfaa51653848e33 diff --git a/lib/DBIx/Class/UUIDColumns.pm b/lib/DBIx/Class/UUIDColumns.pm index 75efb8e..7ea1912 100644 --- a/lib/DBIx/Class/UUIDColumns.pm +++ b/lib/DBIx/Class/UUIDColumns.pm @@ -1,27 +1,32 @@ package DBIx::Class::UUIDColumns; - use strict; use warnings; - use vars qw($VERSION); -use base qw/DBIx::Class/; -__PACKAGE__->mk_classdata( 'uuid_auto_columns' => [] ); -__PACKAGE__->mk_classdata( 'uuid_maker' ); -__PACKAGE__->uuid_class( __PACKAGE__->_find_uuid_module ); +BEGIN { + use base qw/DBIx::Class Class::Accessor::Grouped/; + + __PACKAGE__->mk_group_accessors('inherited', qw/uuid_auto_columns uuid_maker/); +}; +__PACKAGE__->uuid_class(__PACKAGE__->_find_uuid_module); # Always remember to do all digits for the version even if they're 0 # i.e. first release of 0.XX *must* be 0.XX000. This avoids fBSD ports # brain damage and presumably various other packaging systems too -$VERSION = '0.01000'; +$VERSION = '0.02001'; sub uuid_columns { my $self = shift; - for (@_) { - $self->throw_exception("column $_ doesn't exist") unless $self->has_column($_); - } - $self->uuid_auto_columns(\@_); + + if (scalar @_) { + for (@_) { + $self->throw_exception("column $_ doesn't exist") unless $self->has_column($_); + } + $self->uuid_auto_columns(\@_); + }; + + return $self->uuid_auto_columns || []; } sub uuid_class { @@ -44,7 +49,7 @@ sub uuid_class { sub insert { my $self = shift; - for my $column (@{$self->uuid_auto_columns}) { + for my $column (@{$self->uuid_columns}) { $self->store_column( $column, $self->get_uuid ) unless defined $self->get_column( $column ); } @@ -58,6 +63,8 @@ sub get_uuid { sub _find_uuid_module { if (eval{require Data::UUID}) { return '::Data::UUID'; + } elsif (eval{require Data::GUID}) { + return '::Data::GUID'; } elsif ($^O ne 'openbsd' && eval{require APR::UUID}) { # APR::UUID on openbsd causes some as yet unfound nastiness for XS return '::APR::UUID'; @@ -72,7 +79,7 @@ sub _find_uuid_module { } elsif (eval{require Win32API::GUID}) { return '::Win32API::GUID'; } else { - shift->throw_exception('no suitable uuid module could be found') + die 'no suitable uuid module could be found for use with DBIx::Class::UUIDColumns'; }; }; @@ -118,9 +125,17 @@ If you would like to use a specific module, you can set L: =head1 METHODS +=head2 get_uuid + +Returns a uuid string from the current uuid_maker. + +=head2 insert + +Inserts a new uuid string into each column in L. + =head2 uuid_columns -Takes a list of columns to be filled with uuids during insert. +Gets/sets the list of columns to be filled with uuids during insert. __PACKAGE__->uuid_columns('artist_id'); @@ -136,8 +151,8 @@ that matches one of the available L subclas __PACKAGE__->uuid_class('::Data::UUID'); # loads DBIx::Class::UUIDMaker::Data::UUID; -Note that C chacks to see that the specified class isa -L subbclass and throws and exception if it isn't. +Note that C checks to see that the specified class isa +L subclass and throws and exception if it isn't. =head2 uuid_maker @@ -149,9 +164,12 @@ Returns the current UUIDMaker instance for the given module. L -=head1 AUTHORS +=head1 AUTHOR Chia-liang Kao + +=head1 CONTRIBUTERS + Chris Laco =head1 LICENSE