package Fallery::Model::Rose::Metadata;
use strict;
use warnings;
use diagnostics;
use Encode;
use Storable;
use Carp;
use Data::Dumper;

use Fallery::Model::Rose::Metadata::Column::Storable;

use Rose::DB::Object::Metadata;
our @ISA = qw(Rose::DB::Object::Metadata);

my %UTF_COLUMNS      = map { $_ => 1 } qw(varchar char text);

# override the blob type with custom storable
my %map = __PACKAGE__->column_type_classes;
$map{'blob'} = 'Fallery::Model::Rose::Metadata::Column::Storable';
__PACKAGE__->column_type_classes(%map);

sub make_column_methods {
   my $class = shift;

   $class->SUPER::make_column_methods(@_);

   foreach my $column ($class->columns) {
      if (exists($UTF_COLUMNS{ lc($column->type) } )) {
         $column->add_trigger(
            inflate => sub {
               my $this = shift;
               my $value = shift;
               if (!Encode::is_utf8($value))  {
                  $value = Encode::decode_utf8($value);
               };
               return $value;
            });
      }
   }
}

1;



