X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FUTF8Columns.pm;h=7977e63741b224de844fa0c3f74c2959b1d1c9ea;hb=55087b9990ac4c004f1e6b9742f73d89274cf7f2;hp=d5a37df3eaba94c098d3abcaed0804aa82ee122c;hpb=5dd9c59cc29803edc5e6e509bb23754c393b3d54;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/UTF8Columns.pm b/lib/DBIx/Class/UTF8Columns.pm index d5a37df..7977e63 100644 --- a/lib/DBIx/Class/UTF8Columns.pm +++ b/lib/DBIx/Class/UTF8Columns.pm @@ -2,10 +2,9 @@ package DBIx::Class::UTF8Columns; use strict; use warnings; use base qw/DBIx::Class/; +use utf8; -use Encode; - -__PACKAGE__->mk_classdata( force_utf8_columns => [] ); +__PACKAGE__->mk_classdata( '_utf8_columns' ); =head1 NAME @@ -14,9 +13,11 @@ DBIx::Class::UTF8Columns - Force UTF8 (Unicode) flag on columns =head1 SYNOPSIS package Artist; - __PACKAGE__->load_components(qw/UTF8Columns Core/); + use base 'DBIx::Class::Core'; + + __PACKAGE__->load_components(qw/UTF8Columns/); __PACKAGE__->utf8_columns(qw/name description/); - + # then belows return strings with utf8 flag $artist->name; $artist->get_column('description'); @@ -37,11 +38,15 @@ L, L. sub utf8_columns { my $self = shift; - for (@_) { - $self->throw_exception("column $_ doesn't exist") - unless $self->has_column($_); + if (@_) { + foreach my $col (@_) { + $self->throw_exception("column $col doesn't exist") + unless $self->has_column($col); + } + return $self->_utf8_columns({ map { $_ => 1 } @_ }); + } else { + return $self->_utf8_columns; } - $self->force_utf8_columns( \@_ ); } =head1 EXTENDED METHODS @@ -54,11 +59,27 @@ sub get_column { my ( $self, $column ) = @_; my $value = $self->next::method($column); - if ( { map { $_ => 1 } @{ $self->force_utf8_columns } }->{$column} ) { - Encode::_utf8_on($value) unless Encode::is_utf8($value); + my $cols = $self->_utf8_columns; + if ( $cols and defined $value and $cols->{$column} ) { + utf8::decode($value) unless utf8::is_utf8($value); + } + + return $value; +} + +=head2 get_columns + +=cut + +sub get_columns { + my $self = shift; + my %data = $self->next::method(@_); + + foreach my $col (grep { defined $data{$_} } keys %{ $self->_utf8_columns || {} }) { + utf8::decode($data{$col}) unless utf8::is_utf8($data{$col}); } - $value; + return %data; } =head2 store_column @@ -68,8 +89,9 @@ sub get_column { sub store_column { my ( $self, $column, $value ) = @_; - if ( { map { $_ => 1 } @{ $self->force_utf8_columns } }->{$column} ) { - Encode::_utf8_off($value) if Encode::is_utf8($value); + my $cols = $self->_utf8_columns; + if ( $cols and defined $value and $cols->{$column} ) { + utf8::encode($value) if utf8::is_utf8($value); } $self->next::method( $column, $value );