From 85480b17f42dd50fa138f5188e4507b7e9a7134f Mon Sep 17 00:00:00 2001 From: vti Date: Sun, 2 Nov 2008 18:51:07 +0100 Subject: [PATCH] All common helpers in one place. --- Common-RDBO-Helper/Makefile.PL | 7 +- .../lib/Common/RDBO/Helper/Comment.pm | 26 --- Common-RDBO-Helper/lib/Common/RDBO/Helper/Photo.pm | 26 --- .../lib/Common/RDBO/Helper/Photo/Manager.pm | 56 ------ Common-RDBO-Helper/lib/Common/RDBO/Helper/Post.pm | 11 - .../lib/Common/RDBO/Helper/Post/Manager.pm | 177 ---------------- Common-RDBO-Helper/lib/Common/RDBO/Helper/Std.pm | 39 ---- .../lib/Common/RDBO/Helper/Std/Manager.pm | 112 ----------- Common-RDBO-Helper/lib/Common/RDBO/Helper/Tag.pm | 15 -- .../lib/Common/RDBO/Helper/Tag/Manager.pm | 94 --------- Common-RDBO-Helper/lib/Common/RDBO/Helpers.pm | 8 +- .../lib/Common/RDBO/Helpers/Manager.pm | 222 +++++++++++---------- Common-RDBO-Helper/t/comment-master.t | 104 ---------- Common-RDBO-Helper/t/comment.t | 83 -------- Common-RDBO-Helper/t/photo.t | 128 ------------ Common-RDBO-Helper/t/post-archive.t | 114 ----------- Common-RDBO-Helper/t/post-pager.t | 55 ----- Common-RDBO-Helper/t/post-similar.t | 68 ------- Common-RDBO-Helper/t/post.t | 101 ---------- .../t/set_related_objects_with_first.t | 92 --------- Common-RDBO-Helper/t/tag.t | 80 -------- 21 files changed, 119 insertions(+), 1499 deletions(-) delete mode 100644 Common-RDBO-Helper/lib/Common/RDBO/Helper/Comment.pm delete mode 100644 Common-RDBO-Helper/lib/Common/RDBO/Helper/Photo.pm delete mode 100644 Common-RDBO-Helper/lib/Common/RDBO/Helper/Photo/Manager.pm delete mode 100644 Common-RDBO-Helper/lib/Common/RDBO/Helper/Post.pm delete mode 100644 Common-RDBO-Helper/lib/Common/RDBO/Helper/Post/Manager.pm delete mode 100644 Common-RDBO-Helper/lib/Common/RDBO/Helper/Std.pm delete mode 100644 Common-RDBO-Helper/lib/Common/RDBO/Helper/Std/Manager.pm delete mode 100644 Common-RDBO-Helper/lib/Common/RDBO/Helper/Tag.pm delete mode 100644 Common-RDBO-Helper/lib/Common/RDBO/Helper/Tag/Manager.pm delete mode 100644 Common-RDBO-Helper/t/comment-master.t delete mode 100644 Common-RDBO-Helper/t/comment.t delete mode 100644 Common-RDBO-Helper/t/photo.t delete mode 100644 Common-RDBO-Helper/t/post-archive.t delete mode 100644 Common-RDBO-Helper/t/post-pager.t delete mode 100644 Common-RDBO-Helper/t/post-similar.t delete mode 100644 Common-RDBO-Helper/t/post.t delete mode 100644 Common-RDBO-Helper/t/set_related_objects_with_first.t delete mode 100644 Common-RDBO-Helper/t/tag.t diff --git a/Common-RDBO-Helper/Makefile.PL b/Common-RDBO-Helper/Makefile.PL index 7c83ac6..2002e97 100644 --- a/Common-RDBO-Helper/Makefile.PL +++ b/Common-RDBO-Helper/Makefile.PL @@ -2,12 +2,11 @@ use inc::Module::Install; name 'Common-RDBO-Helper'; -all_from 'lib/Common/RDBO/Helper/Post.pm'; +all_from 'lib/Common/RDBO/Helpers.pm'; requires( - 'Rose::Object' => '', - 'Hash::Merge' => '', - 'DateTime' => '' + 'Rose::DB::Object' => '', + 'Hash::Merge' => '', ); auto_install; diff --git a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Comment.pm b/Common-RDBO-Helper/lib/Common/RDBO/Helper/Comment.pm deleted file mode 100644 index 02ef8e3..0000000 --- a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Comment.pm +++ /dev/null @@ -1,26 +0,0 @@ -package Common::RDBO::Helper::Comment; - -use strict; -use warnings; - -use Rose::Object::MixIn(); -our @ISA = qw(Rose::Object::MixIn); - -__PACKAGE__->export_tag( all => [ qw/ master count / ] ); - -use Rose::Object::MakeMethods::Generic ( scalar => [ qw/ count / ] ); - -use Common::RDBO::Helper::Std 'master'; - -=head1 AUTHOR - -vti - -=head1 LICENSE - -This library is free software, you can redistribute it and/or modify -it under the same terms as Perl itself. - -=cut - -1; diff --git a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Photo.pm b/Common-RDBO-Helper/lib/Common/RDBO/Helper/Photo.pm deleted file mode 100644 index e9765e2..0000000 --- a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Photo.pm +++ /dev/null @@ -1,26 +0,0 @@ -package Common::RDBO::Helper::Photo; - -use strict; -use warnings; - -use Rose::Object::MixIn(); -our @ISA = qw(Rose::Object::MixIn); - -__PACKAGE__->export_tag( all => [ qw/ master count / ] ); - -use Rose::Object::MakeMethods::Generic ( scalar => [ qw/ count / ] ); - -use Common::RDBO::Helper::Std 'master'; - -=head1 AUTHOR - -vti - -=head1 LICENSE - -This library is free software, you can redistribute it and/or modify -it under the same terms as Perl itself. - -=cut - -1; diff --git a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Photo/Manager.pm b/Common-RDBO-Helper/lib/Common/RDBO/Helper/Photo/Manager.pm deleted file mode 100644 index afdfa7e..0000000 --- a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Photo/Manager.pm +++ /dev/null @@ -1,56 +0,0 @@ -package Common::RDBO::Helper::Photo::Manager; - -use strict; -use warnings; - -use Rose::Object::MixIn(); -our @ISA = qw(Rose::Object::MixIn); - -use Hash::Merge 'merge'; - -__PACKAGE__->export_tag( - all => [ qw/ get_list get_recent fill_count fill_photo get_newer get_older / ] ); - -use Common::RDBO::Helper::Std::Manager ':all'; - -sub fill_photo { - my ( $self ) = shift; - my %args = - ref $_[ 0 ] eq 'HASH' ? %{ $_[ 0 ] } - : scalar @_ == 1 ? ( objects => $_[ 0 ] ) - : @_; - - my @objects; - if ( ref $args{ objects } eq 'ARRAY' ) { - @objects = @{ delete $args{ objects } }; - } else { - #push @objects, delete $args{ objects }; - $objects[0] = delete $args{ objects }; - } - - my $object_column = delete $args{ object_column } || 'file'; - my $column = delete $args{ column } || 'file'; - - my ( $rel ) = - grep { $_->name eq 'photos' } @{ $self->object_class->meta->relationships }; - - if ( scalar @objects ) { - my $cond = merge { - query => [ master_id => [ map { $_->id } @objects ] ], - select => [ qw/ id master_id poster /, $column ], - sort_by => 'poster, addtime ASC' - }, - \%args; - - my $photos = $self->get_objects( %$cond ); - - my %photos = map { $_->master_id => $_ } @$photos; - - foreach ( @objects ) { - $_->$object_column( $photos{ $_->id } ) - if $photos{ $_->id }; - } - } -} - -1; diff --git a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Post.pm b/Common-RDBO-Helper/lib/Common/RDBO/Helper/Post.pm deleted file mode 100644 index 1d1018f..0000000 --- a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Post.pm +++ /dev/null @@ -1,11 +0,0 @@ -package Common::RDBO::Helper::Post; - -use strict; -use warnings; - -use Rose::Object::MixIn(); -our @ISA = qw(Rose::Object::MixIn); - -use Hash::Merge 'merge'; - -1; diff --git a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Post/Manager.pm b/Common-RDBO-Helper/lib/Common/RDBO/Helper/Post/Manager.pm deleted file mode 100644 index 936c0f1..0000000 --- a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Post/Manager.pm +++ /dev/null @@ -1,177 +0,0 @@ -package Common::RDBO::Helper::Post::Manager; - -use strict; -use warnings; - -use Rose::Object::MixIn(); -our @ISA = qw(Rose::Object::MixIn); - -use Hash::Merge 'merge'; - -__PACKAGE__->export_tag( - all => [ - qw/ get_list get_recent get_list_by_tag get_list_similar - get_archive get_older get_newer get_pager get_archive_month_list / - ] -); - -use Common::RDBO::Helper::Std::Manager - qw/ get_list get_recent get_newer get_older /; - -sub get_list_by_tag { - my ( $self ) = shift; - my %args = @_; - - my $tags = delete $args{tags}; - return unless $tags; - - my $tag_ids = - [ map { ref $_ ? $_->id : $_ } - ref $tags eq 'ARRAY' ? @$tags : ( $tags ) ]; - - return unless $tag_ids->[0]; - - my $cond = merge { - query => [ 'post_tag_map.tag_id' => $tag_ids ], - with_objects => [ 'post_tag_map' ], - group_by => 't1.id' - }, \%args; - - return $self->get_list( %$cond ); -} - -sub get_list_similar { - my ( $self ) = shift; - my %args = @_; - - my $post = delete $args{post}; - return unless $post; - - unless ( ref $post ) { - $post = $self->object_class->new( id => $post ); - $post->load(speculative => 1); - return if $post->not_found; - } - - my $cond = merge { - query => [ id => { ne => $post->id } ], - tags => $post->tags || undef - }, - \%args; - - return $self->get_list_by_tag( %$cond ); - -} - -sub get_pager { - my ( $self, $page ) = @_; - - $page = 1 unless $page && $page =~ m/^\d+$/o; - - return { - total => $self->get_objects_count, - page_size => $self->default_objects_per_page, - page => $page - }; -} - -sub get_archive { - my $self = shift; - my %args = @_; - - my $year = delete $args{ year }; - my $month = delete $args{ month }; - my $day = delete $args{ day }; - - my ( $Dy, $Dm, $Dd ) = ( 0, 0, 0 ); - if ( $day ) { - $Dd = 1; - } elsif ( $month ) { - $Dm = 1; - } else { - $Dy = 1; - } - - my $from = eval { - DateTime->new( - year => $year, - month => $month || 1, - day => $day || 1 - ); - }; - return if $@; - - my $to = $from->clone->add( years => $Dy, months => $Dm, days => $Dd ); - - my $cond = merge { - query => [ - addtime => { ge => $from->epoch }, - addtime => { lt => $to->epoch } - ] - }, - \%args; - - return $self->get_list( %$cond ); -} - -sub get_archive_month_list { - my ( $self ) = @_; - - my $oldest = $self->get_objects( - select => 'addtime', - sort_by => 'addtime ASC', - limit => 1 - ); - - my $newest = $self->get_objects( - select => 'addtime', - sort_by => 'addtime DESC', - limit => 1 - ); - - $oldest = $oldest->[0]; - $newest = $newest->[0]; - - return unless $oldest && $newest; - - $oldest = $oldest->addtime; - $newest = $newest->addtime; - - if ( $oldest == $newest ) { - return [ - { - count => 1, - year => $newest->year, - month => $newest->month, - month_name => $newest->month_name - } - ]; - } - - my $list = []; - my $dt = $newest; - while ( $dt > $oldest ) { - my $count = $self->get_objects_count( - query => [ - addtime => { gt => $dt->clone->subtract( months => 1 )->epoch }, - addtime => { le => $dt->epoch } - ] - ); - - push @$list, - { - count => $count, - year => $dt->year, - month => $dt->month, - month_name => $dt->month_name - } - if $count; - - $dt->subtract( months => 1 ); - } - - return $list; -} - - -1; diff --git a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Std.pm b/Common-RDBO-Helper/lib/Common/RDBO/Helper/Std.pm deleted file mode 100644 index fbb6312..0000000 --- a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Std.pm +++ /dev/null @@ -1,39 +0,0 @@ -package Common::RDBO::Helper::Std; - -use strict; -use warnings; - -use Rose::Object::MixIn(); -our @ISA = qw(Rose::Object::MixIn); - -__PACKAGE__->export_tag( all => [ qw/ master / ] ); - -sub master { - my $self = shift; - - if ( $self->can( 'type' ) ) { - my $type = $self->type; - return $self->$type; - } else { - my ( $rel ) = - grep { $_->type eq 'many to one' } $self->meta->relationships; - die $rel->name; - - my $master = $rel->name; - - return $self->$master; - } -} - -=head1 AUTHOR - -vti - -=head1 LICENSE - -This library is free software, you can redistribute it and/or modify -it under the same terms as Perl itself. - -=cut - -1; diff --git a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Std/Manager.pm b/Common-RDBO-Helper/lib/Common/RDBO/Helper/Std/Manager.pm deleted file mode 100644 index 060ac17..0000000 --- a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Std/Manager.pm +++ /dev/null @@ -1,112 +0,0 @@ -package Common::RDBO::Helper::Std::Manager; - -use strict; -use warnings; - -use Rose::Object::MixIn(); -our @ISA = qw(Rose::Object::MixIn); - -use Hash::Merge 'merge'; - -__PACKAGE__->export_tag( all => [ qw/ get_list get_recent fill_count get_newer - get_older / ] ); - -sub get_list { - my $self = shift; - my %args = ref $_[ 0 ] eq 'HASH' ? %{ $_[ 0 ] } : @_; - - return $self->get_objects( %args ); -} - -sub get_recent { - my $self = shift; - my %args = ref $_[ 0 ] eq 'HASH' ? %{ $_[ 0 ] } : @_; - - my $limit = delete $args{ limit } || 10; - - my $cond = merge { - sort_by => 'addtime DESC', - limit => $limit, - }, - \%args; - - return $self->get_list( $cond ); -} - -sub fill_count { - my ( $self ) = shift; - my %args = - ref $_[ 0 ] eq 'HASH' ? %{ $_[ 0 ] } - : scalar @_ == 1 ? ( objects => $_[ 0 ] ) - : @_; - - my @objects; - if ( ref $args{ objects } eq 'ARRAY' ) { - @objects = @{ delete $args{ objects } }; - } else { - $objects[ 0 ] = delete $args{ objects }; - } - - my $count_method = delete $args{ count_method }; - die 'count_method required' unless $count_method; - - if ( scalar @objects ) { - my $cond = merge { - query => [ master_id => [ map { $_->id } @objects ] ], - select => [ 'master_id', \'COUNT(id) AS count' ], - group_by => 'master_id' - }, - \%args; - - my $comments = $self->get_objects( %$cond ); - - my %comments = map { $_->master_id => $_->count } @$comments; - - foreach ( @objects ) { - $_->$count_method( $comments{ $_->id } ) - if $comments{ $_->id }; - } - } -} - -sub get_newer { - my ( $self ) = shift; - my %args = ref $_[ 0 ] eq 'HASH' ? %{ $_[ 0 ] } : @_; - - my $addtime = delete $args{ datetime }; - - my $cond = merge { - query => [ addtime => { gt => $addtime } ], - sort_by => 'addtime ASC', - limit => 1 - }, - \%args; - - my $newer_item = $self->get_objects( %$cond ); - - return unless @$newer_item; - - return $newer_item->[ 0 ]; -} - -sub get_older { - my ( $self ) = shift; - my %args = ref $_[ 0 ] eq 'HASH' ? %{ $_[ 0 ] } : @_; - - my $addtime = delete $args{ datetime }; - - my $cond = merge { - query => [ addtime => { lt => $addtime } ], - sort_by => 'addtime DESC', - limit => 1 - }, - \%args; - - my $older_item = $self->get_objects( %$cond ); - - return unless @$older_item; - - return $older_item->[ 0 ]; -} - -1; diff --git a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Tag.pm b/Common-RDBO-Helper/lib/Common/RDBO/Helper/Tag.pm deleted file mode 100644 index 1554992..0000000 --- a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Tag.pm +++ /dev/null @@ -1,15 +0,0 @@ -package Common::RDBO::Helper::Tag; - -use strict; -use warnings; - -use Rose::Object::MixIn(); -our @ISA = qw(Rose::Object::MixIn); - -__PACKAGE__->export_tag(all => [ qw/ map_count / ]); - -use Hash::Merge 'merge'; - -use Rose::Object::MakeMethods::Generic ( scalar => [ qw/ map_count / ] ); - -1; diff --git a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Tag/Manager.pm b/Common-RDBO-Helper/lib/Common/RDBO/Helper/Tag/Manager.pm deleted file mode 100644 index 260ba95..0000000 --- a/Common-RDBO-Helper/lib/Common/RDBO/Helper/Tag/Manager.pm +++ /dev/null @@ -1,94 +0,0 @@ -package Common::RDBO::Helper::Tag::Manager; - -use strict; -use warnings; - -use Rose::Object::MixIn(); -our @ISA = qw(Rose::Object::MixIn); - -use Hash::Merge 'merge'; - -__PACKAGE__->export_tag( all => [ qw/ map_rel get_cloud_list / ] ); - -sub map_rel { - my ( $self ) = @_; - - my ( $map_rel ) = - grep { $_->type eq 'one to many' } - $self->object_class->meta->relationships; - - return $map_rel; -} - -sub get_cloud_list { - my $self = shift; - my %args = @_; - - my $map_rel = $self->map_rel(); - - die 'no map relationship' unless $map_rel; - - my ( $pk2 ) = values %{ $map_rel->column_map }; - my $cond = merge { - select => [ 'id', 'name', \"COUNT(t2.$pk2) AS map_count" ], - sort_by => 'name ASC', - group_by => 'id', - with_objects => $map_rel->name - }, \%args; - - my $tags = $self->get_objects( %$cond ); - - return unless @$tags; - - my $empty_tags = []; - - my $ar = []; - foreach my $tag ( @$tags ) { - my $hash = {}; - foreach my $method ( qw/ id name / ) { - $hash->{ $method } = $tag->$method; - } - $hash->{ count } = $tag->map_count; - if ( $hash->{ count } > 0 ) { - push @$ar, $hash; - } else { - push @{ $empty_tags }, $hash; - } - } - - return unless @$ar; - - # from HTML::TagCloud - my @sorted_by_count = sort { $b->{ count } <=> $a->{ count } } @$ar; - - my $min = log( $sorted_by_count[ -1 ]->{ count } ); - my $max = log( $sorted_by_count[ 0 ]->{ count } ); - my $factor; - - my $levels = 24; - - # special case all tags having the same count - if ( $max - $min == 0 ) { - $min = $min - $levels; - $factor = 1; - } else { - $factor = $levels / ( $max - $min ); - } - - #warn $factor; - - if ( scalar @$ar < $levels ) { - $factor *= ( scalar @$ar / $levels ); - } - - #warn $min; - #warn $max; - - foreach my $tag ( @$ar ) { - $tag->{ level } = int( ( log( $tag->{ count } ) - $min ) * $factor ); - } - - return $ar; -} - -1; diff --git a/Common-RDBO-Helper/lib/Common/RDBO/Helpers.pm b/Common-RDBO-Helper/lib/Common/RDBO/Helpers.pm index c2d998c..2a2d67d 100644 --- a/Common-RDBO-Helper/lib/Common/RDBO/Helpers.pm +++ b/Common-RDBO-Helper/lib/Common/RDBO/Helpers.pm @@ -9,10 +9,7 @@ our @ISA = qw(Rose::Object::MixIn); use Hash::Merge 'merge'; __PACKAGE__->export_tag( - all => [ - qw/ get_prev_objects get_next_objects get_master_object / - ] -); + all => [ qw/ get_prev_objects get_next_objects get_master_object / ] ); sub get_prev_objects { my ( $self ) = shift; @@ -63,8 +60,9 @@ sub get_master_object { my $type = $self->type; return $self->$type; } else { + #my ( $rel ) = - #grep { $_->type eq 'many to one' } $self->meta->relationships; + #grep { $_->type eq 'many to one' } $self->meta->relationships; #die $rel->name; #my $master = $rel->name; diff --git a/Common-RDBO-Helper/lib/Common/RDBO/Helpers/Manager.pm b/Common-RDBO-Helper/lib/Common/RDBO/Helpers/Manager.pm index 44dedd7..663ebd8 100644 --- a/Common-RDBO-Helper/lib/Common/RDBO/Helpers/Manager.pm +++ b/Common-RDBO-Helper/lib/Common/RDBO/Helpers/Manager.pm @@ -11,7 +11,7 @@ use Hash::Merge 'merge'; __PACKAGE__->export_tag( all => [ qw/ get_objects_by_related get_similar_objects - get_objects_archive get_objects_archive_month_list + get_objects_archive get_objects_archive_month_list get_objects_pager get_objects_cloud set_related_objects_with_first / ] @@ -21,10 +21,11 @@ sub get_objects_by_related { my ( $self ) = shift; my %args = @_; - my $rel_name = delete $args{rel_name}; + my $rel_name = delete $args{ rel_name }; warn 'no rel_name' and return unless $rel_name; - my ( $rel ) = grep { $_->name eq $rel_name } $self->object_class->meta->relationships; + my ( $rel ) = + grep { $_->name eq $rel_name } $self->object_class->meta->relationships; warn 'rel_name is incorrect' and return unless $rel; my @rel_objects = @@ -37,7 +38,7 @@ sub get_objects_by_related { my $rel_pks = [ map { ref $_ ? $_->$rel_pk_name : $_ } @rel_objects ]; - return unless $rel_pks->[0]; + return unless $rel_pks->[ 0 ]; my ( $pk ) = $self->object_class->meta->primary_key_column_names; return unless $pk; @@ -45,9 +46,9 @@ sub get_objects_by_related { my $cond = merge { query => [ "$rel_name.$rel_pk_name" => $rel_pks ], with_objects => [ $rel_name ], - group_by => "t1.$pk" - }, \%args; - + group_by => "t1.$pk" + }, + \%args; return $self->get_objects( %$cond ); } @@ -82,7 +83,8 @@ sub get_objects_archive { warn 'no column' and return unless $column; warn 'column does not exist' and return - unless grep { $_ eq $column } @{ $self->object_class->meta->column_names }; + unless grep { $_ eq $column } + @{ $self->object_class->meta->column_names }; my $year = delete $args{ year }; my $month = delete $args{ month }; @@ -127,7 +129,8 @@ sub get_objects_archive_month_list { warn 'no column' and return unless $column; warn 'column does not exist' and return - unless grep { $_ eq $column } @{ $self->object_class->meta->column_names }; + unless grep { $_ eq $column } + @{ $self->object_class->meta->column_names }; my $oldest = $self->get_objects( select => $column, @@ -141,8 +144,8 @@ sub get_objects_archive_month_list { limit => 1 ); - $oldest = $oldest->[0]; - $newest = $newest->[0]; + $oldest = $oldest->[ 0 ]; + $newest = $newest->[ 0 ]; return unless $oldest && $newest; @@ -161,7 +164,7 @@ sub get_objects_archive_month_list { } my $list = []; - my $dt = $newest; + my $dt = $newest; while ( $dt > $oldest ) { my $count = $self->get_objects_count( query => [ @@ -211,27 +214,30 @@ sub get_objects_cloud { my $self = shift; my %args = @_; - my $rel_name = delete $args{rel_name}; + my $rel_name = delete $args{ rel_name }; warn 'no rel_name' and return unless $rel_name; - my ( $rel ) = grep { $_->name eq $rel_name } $self->object_class->meta->relationships; + my ( $rel ) = + grep { $_->name eq $rel_name } $self->object_class->meta->relationships; warn 'rel_name is incorrect' and return unless $rel; - my $count_method = delete $args{count_method}; + my $count_method = delete $args{ count_method }; warn 'no count_method' and return unless $count_method; - my $active_column = delete $args{active_column}; + my $active_column = delete $args{ active_column }; warn 'no rel_active_column' and return unless $active_column; my ( $rel_pk_name ) = $rel->foreign_class->meta->primary_key_column_names; - my ( $pk_name ) = $self->object_class->meta->primary_key_column_names; + my ( $pk_name ) = $self->object_class->meta->primary_key_column_names; my $cond = merge { - select => - [ $pk_name, $active_column, \"COUNT(t2.$rel_pk_name) AS $count_method" ], + select => [ + $pk_name, $active_column, + \"COUNT(t2.$rel_pk_name) AS $count_method" + ], sort_by => "$active_column ASC", group_by => $pk_name, - with_objects => $rel_name + with_objects => $rel_name; }, \%args; my $objects = $self->get_objects( %$cond ); @@ -273,104 +279,102 @@ sub get_objects_cloud { $factor = $levels / ( $max - $min ); } - #warn $factor; - if ( scalar @$ar < $levels ) { $factor *= ( scalar @$ar / $levels ); } - #warn $min; - #warn $max; - foreach my $object ( @$ar ) { - $object->{ level } = int( ( log( $object->{ count } ) - $min ) * $factor ); + $object->{ level } = + int( ( log( $object->{ count } ) - $min ) * $factor ); } return $ar; } -sub set_related_objects_with_first { - my ( $self ) = shift; - my %args = @_; - - my @objects = - ref $args{ objects } - ? @{ delete $args{ objects } } - : ( delete $args{ objects } ); - warn 'no objects' and return unless scalar @objects; - - my $objects_rel_name = delete $args{ objects_rel_name }; - warn 'no objects_rel_name' and return unless $objects_rel_name; - - my ( $objects_rel ) = grep { $_->name eq $objects_rel_name } - $objects[0]->meta->relationships; - warn 'objects_rel_name is incorrect' and return unless $objects_rel; - - my $objects_active_column = delete $args{ objects_active_column }; - warn 'objects_active_column does not exist' and return - unless grep { $_ eq $objects_active_column } @{ $objects[0]->meta->column_names }; - - my $active_column = delete $args{ active_column }; - warn 'active_column does not exist' and return - unless $active_column and grep { $_ eq $active_column } @{ $self->meta->column_names }; - - my $cond = merge { - query => [ master_id => [ map { $_->id } @objects ] ], - select => [ qw/ id master_id /, $active_column ], - sort_by => 'addtime ASC' - }, - \%args; - - my $items = $self->get_objects( %$cond ); - - my %items = map { $_->master_id => $_ } @$items; - - foreach ( @objects ) { - $_->$objects_active_column( $items{ $_->id } ) - if $items{ $_->id }; - } -} - -sub set_related_objects_with_count { - my ( $self ) = shift; - my %args = @_; - - my @objects = - ref $args{ objects } - ? @{ delete $args{ objects } } - : ( delete $args{ objects } ); - warn 'no objects' and return unless scalar @objects; - - my $objects_rel_name = delete $args{ objects_rel_name }; - warn 'no objects_rel_name' and return unless $objects_rel_name; - - my ( $objects_rel ) = grep { $_->name eq $objects_rel_name } - $objects[0]->meta->relationships; - warn 'objects_rel_name is incorrect' and return unless $objects_rel; - - my $objects_count_column = delete $args{ objects_count_column }; - warn 'objects_count_column does not exist' and return - unless grep { $_ eq $objects_count_column } @{ $objects[0]->meta->column_names }; - - my $count_column = delete $args{ count_column }; - warn 'count_column does not exist' and return - unless grep { $_ eq $count_column } @{ $self->meta->column_names }; - - my $cond = merge { - query => [ master_id => [ map { $_->id } @objects ] ], - select => [ 'master_id', \"COUNT(id) AS $count_column" ], - group_by => 'master_id' - }, - \%args; - - my $items = $self->get_objects( %$cond ); - - my %items = map { $_->master_id => $_->$count_column } @$items; - - foreach ( @objects ) { - $_->$objects_count_column( $items{ $_->id } ) - if $items{ $_->id }; - } -} +#sub set_related_objects_with_first { +# my ( $self ) = shift; +# my %args = @_; + +# my @objects = +# ref $args{ objects } +# ? @{ delete $args{ objects } } +# : ( delete $args{ objects } ); +# warn 'no objects' and return unless scalar @objects; + +# my $objects_rel_name = delete $args{ objects_rel_name }; +# warn 'no objects_rel_name' and return unless $objects_rel_name; + +# my ( $objects_rel ) = grep { $_->name eq $objects_rel_name } +# $objects[0]->meta->relationships; +# warn 'objects_rel_name is incorrect' and return unless $objects_rel; + +# my $objects_active_column = delete $args{ objects_active_column }; +# warn 'objects_active_column does not exist' and return +# unless grep { $_ eq $objects_active_column } +# @{ $objects[ 0 ]->meta->column_names }; + +# my $active_column = delete $args{ active_column }; +# warn 'active_column does not exist' and return +# unless $active_column +# and grep { $_ eq $active_column } @{ $self->meta->column_names }; + +# my $cond = merge { +# query => [ master_id => [ map { $_->id } @objects ] ], +# select => [ qw/ id master_id /, $active_column ], +# sort_by => 'addtime ASC' +# }, +# \%args; + +# my $items = $self->get_objects( %$cond ); + +# my %items = map { $_->master_id => $_ } @$items; + +# foreach ( @objects ) { +# $_->$objects_active_column( $items{ $_->id } ) +# if $items{ $_->id }; +# } +#} + +#sub set_related_objects_with_count { +# my ( $self ) = shift; +# my %args = @_; + +# my @objects = +# ref $args{ objects } +# ? @{ delete $args{ objects } } +# : ( delete $args{ objects } ); +# warn 'no objects' and return unless scalar @objects; + +# my $objects_rel_name = delete $args{ objects_rel_name }; +# warn 'no objects_rel_name' and return unless $objects_rel_name; + +# my ( $objects_rel ) = grep { $_->name eq $objects_rel_name } +# $objects[0]->meta->relationships; +# warn 'objects_rel_name is incorrect' and return unless $objects_rel; + +# my $objects_count_column = delete $args{ objects_count_column }; +# warn 'objects_count_column does not exist' and return +# unless grep { $_ eq $objects_count_column } @{ $objects[0]->meta->column_names }; + +# my $count_column = delete $args{ count_column }; +# warn 'count_column does not exist' and return +# unless grep { $_ eq $count_column } @{ $self->meta->column_names }; + +# my $cond = merge { +# query => [ master_id => [ map { $_->id } @objects ] ], +# select => [ 'master_id', \"COUNT(id) AS $count_column" ], +# group_by => 'master_id' +# }, +# \%args; + +# my $items = $self->get_objects( %$cond ); + +# my %items = map { $_->master_id => $_->$count_column } @$items; + +# foreach ( @objects ) { +# $_->$objects_count_column( $items{ $_->id } ) +# if $items{ $_->id }; +# } +#} 1; diff --git a/Common-RDBO-Helper/t/comment-master.t b/Common-RDBO-Helper/t/comment-master.t deleted file mode 100644 index 1c949f2..0000000 --- a/Common-RDBO-Helper/t/comment-master.t +++ /dev/null @@ -1,104 +0,0 @@ -#! /usr/bin/perl - -use lib 't/lib'; - -use Test::More 'tests' => 6; - -use NewDB; -use Post; -use Post::Manager; -use Article; -use Article::Manager; -use Tag; -use Comment; -use Comment::Manager; -use DateTime; - -my $db = NewDB->new(); - -$db->init(); - -my @posts = ( - { - addtime => time, - title => 'Linux', - content => 'blah-blah', - comments => [ - { - addtime => time, - type => 'post', - name => 'anon', - content => 'hallo' - } - ], - } -); - -my @articles = ( - { - addtime => time, - title => 'FreeBSD', - content => 'blah-blah', - comments => [ - { - addtime => time, - type => 'article', - name => 'bar', - content => 'foo' - } - ], - } -); - -foreach my $post ( @posts ) { - my $comments = delete $post->{ comments }; - - my $post = Post->new( %$post ); - - $post->comments( $comments ); - - $post->save( cascade => 1 ); -} - -foreach my $article ( @articles ) { - my $comments = delete $article->{ comments }; - - my $article = Article->new( %$article ); - - $article->comments( $comments ); - - $article->save( cascade => 1 ); -} - -my $recent_comments = Comment::Manager->get_objects(); - -is( scalar @$recent_comments, 2 ); - -my $recent_article_comments = - Comment::Manager->get_recent( query => [ type => 'article' ] ); - -is( scalar @$recent_article_comments, 1 ); - -my $comment = $recent_article_comments->[ 0 ]; -is( $comment->type, 'article' ); - -my $master = $comment->master; -ok( $master ); - -is( $master->title, 'FreeBSD' ); - -$articles = Article::Manager->get_list(); - -Comment::Manager->fill_count( - count_method => 'comment_count', - objects => $articles, - query => [ type => 'article' ] -); - -is( $articles->[ 0 ]->comment_count, 1 ); - -my $articles = Article::Manager->get_objects(); -$_->delete( cascade => 1 ) foreach @$articles; - -my $posts = Post::Manager->get_objects(); -$_->delete( cascade => 1 ) foreach @$posts; diff --git a/Common-RDBO-Helper/t/comment.t b/Common-RDBO-Helper/t/comment.t deleted file mode 100644 index 11d41d9..0000000 --- a/Common-RDBO-Helper/t/comment.t +++ /dev/null @@ -1,83 +0,0 @@ -#! /usr/bin/perl - -use lib 't/lib'; - -use Test::More 'tests' => 3; - -use NewDB; -use Post; -use Post::Manager; -use Tag; -use Comment; -use Comment::Manager; -use DateTime; - -my $db = NewDB->new(); - -$db->init(); - -my @data = ( - { - addtime => time, - title => 'Linux', - content => 'blah-blah', - comments => [ - { - addtime => time, - type => 'post', - name => 'anon', - content => 'hallo' - }, - { - addtime => time, - type => 'post', - name => 'anon2', - content => 'hallo2' - } - ], - }, - { - addtime => time, - title => 'FreeBSD', - content => 'blah-blah', - comments => [ - { - addtime => time, - type => 'post', - name => 'anon3', - content => 'hallo3' - }, - ], - } -); - -foreach my $data ( @data ) { - my $comments = delete $data->{ comments }; - my $tags = delete $data->{ tags }; - - my $post = Post->new( %$data ); - - $post->tags( $tags ); - $post->comments( $comments ); - - $post->save( cascade => 1 ); -} - -my $posts = Post::Manager->get_posts(); -is( scalar @$posts, 2); - -my $recent = Comment::Manager->get_comments(); - -is( scalar @$recent, 3); - -my $comments = Comment::Manager->get_list( - query => [ - master_id => 1, - type => 'post' - ] -); - -is( scalar @$comments, 2); - -my $posts = Post::Manager->get_objects(); -$_->delete( cascade => 1 ) foreach @$posts; diff --git a/Common-RDBO-Helper/t/photo.t b/Common-RDBO-Helper/t/photo.t deleted file mode 100644 index 1d2b3f9..0000000 --- a/Common-RDBO-Helper/t/photo.t +++ /dev/null @@ -1,128 +0,0 @@ -#!/usr/bin/perl - -use lib 't/lib'; - -use Test::More 'tests' => 8; - -use NewDB; -use Post; -use Post::Manager; -use Article; -use Article::Manager; -use Tag; -use Photo; -use Photo::Manager; -use DateTime; - -my $db = NewDB->new(); - -$db->init(); - -my @posts = ( - { - addtime => time, - title => 'Linux', - content => 'blah-blah', - photos => [ - { - addtime => time, - type => 'post', - photo => 'linux.jpg' - }, - - ], - } -); - -my @articles = ( - { - addtime => time, - title => 'FreeBSD', - content => 'blah-blah', - photos => [ - { - addtime => time, - type => 'article', - poster => 1, - photo => 'freebsd.jpg' - }, - { - addtime => time + 10, - type => 'article', - photo => 'freebsd2.jpg' - } - ], - } -); - -foreach my $post ( @posts ) { - my $photos = delete $post->{ photos }; - - my $post = Post->new( %$post ); - - $post->photos( $photos ); - - $post->save( cascade => 1 ); -} - -foreach my $article ( @articles ) { - my $photos = delete $article->{ photos }; - - my $article = Article->new( %$article ); - - $article->photos( $photos ); - - $article->save( cascade => 1 ); -} - -my $recent_photos = Photo::Manager->get_objects(); - -is( scalar @$recent_photos, 3 ); - -my $recent_article_photos = - Photo::Manager->get_recent( query => [ type => 'article' ] ); - -is( scalar @$recent_article_photos, 2 ); - -my $photo = $recent_article_photos->[ 0 ]; -is( $photo->type, 'article' ); - -my $master = $photo->master; -ok( $master ); - -is( $master->title, 'FreeBSD' ); - -$articles = Article::Manager->get_list(); - -Photo::Manager->fill_photo( - column => 'photo', - objects => $articles, - object_column => 'photo', - query => [ type => 'article' ] -); - -is( $articles->[ 0 ]->photo->photo, 'freebsd.jpg' ); - -Photo::Manager->fill_count( - count_method => 'photo_count', - objects => $articles, - query => [ type => 'article' ] -); - -is( $articles->[ 0 ]->photo_count, 2 ); - -$posts = Post::Manager->get_list(); -Photo::Manager->fill_count( - count_method => 'photo_count', - objects => $posts, - object_column => 'photo', - query => [ type => 'post' ] -); - -is( $posts->[ 0 ]->photo_count, 1 ); - -my $posts = Post::Manager->get_objects(); -$_->delete( cascade => 1 ) foreach @$posts; - -my $articles = Article::Manager->get_objects(); -$_->delete( cascade => 1 ) foreach @$articles; diff --git a/Common-RDBO-Helper/t/post-archive.t b/Common-RDBO-Helper/t/post-archive.t deleted file mode 100644 index 9a04c96..0000000 --- a/Common-RDBO-Helper/t/post-archive.t +++ /dev/null @@ -1,114 +0,0 @@ -#! /usr/bin/perl - -use lib 't/lib'; - -use Test::More 'no_plan'; - -use NewDB; -use Post; -use Post::Manager; -use Tag; -use Comment; -use Comment::Manager; -use DateTime; - -my $db = NewDB->new(); - -$db->init(); - -my @data = ( - { - addtime => DateTime->new( year => 2008, month => 8, day => 31 )->epoch, - title => 'Linux', - content => 'blah-blah' - }, - { - addtime => DateTime->new( year => 2008, month => 8, day => 31 )->epoch, - title => 'Unix', - content => 'blah-blah' - }, - { - addtime => DateTime->new( year => 2008, month => 7, day => 21 )->epoch, - title => 'Unix', - content => 'blah-blah' - }, - { - addtime => DateTime->new( year => 2008, month => 7, day => 31 )->epoch, - title => 'BSD', - content => 'blah-blah' - }, - { - addtime => DateTime->new( year => 2008, month => 5, day => 1 )->epoch, - title => 'BSD', - content => 'blah-blah' - }, - { - addtime => DateTime->new( year => 2007, month => 2, day => 3 )->epoch, - title => 'BSD', - content => 'blah-blah' - }, - , -); - -foreach my $data ( @data ) { - my $post = Post->new( %$data ); - - $post->save( cascade => 1 ); -} - -my $archive; - -$archive = Post::Manager->get_archive( year => 2006 ); -is( @$archive, 0 ); - -$archive = Post::Manager->get_archive( year => 2007 ); -is( @$archive, 1 ); - -$archive = Post::Manager->get_archive( year => 2008 ); -is( @$archive, 5 ); - -$archive = Post::Manager->get_archive( year => 2008, month => 8 ); -is( @$archive, 2 ); - -$archive = Post::Manager->get_archive( year => 2008, month => 8, day => 31 ); -is( @$archive, 2 ); - -$archive = Post::Manager->get_archive( year => 2008, month => 7, day => 21 ); -is( @$archive, 1 ); -$archive = Post::Manager->get_archive( year => 2008, month => 8, day => 31 ); -is( @$archive, 2 ); - -my $month_list = Post::Manager->get_archive_month_list(); - -is_deeply( - $month_list, - [ - { - count => 2, - year => 2008, - month => 8, - month_name => 'August' - }, - { - count => 2, - year => 2008, - month => 7, - month_name => 'July' - }, - { - count => 1, - year => 2008, - month => 5, - month_name => 'May' - }, - { - count => 1, - year => 2007, - month => 2, - month_name => 'February' - } - ] -); - -my $posts = Post::Manager->get_objects(); -$_->delete( cascade => 1 ) foreach @$posts; diff --git a/Common-RDBO-Helper/t/post-pager.t b/Common-RDBO-Helper/t/post-pager.t deleted file mode 100644 index 0868ae5..0000000 --- a/Common-RDBO-Helper/t/post-pager.t +++ /dev/null @@ -1,55 +0,0 @@ -#! /usr/bin/perl - -use lib 't/lib'; - -use Test::More 'no_plan'; - -use NewDB; -use Post; -use Post::Manager; -use Tag; -use Comment; -use Comment::Manager; -use DateTime; - -my $db = NewDB->new(); - -$db->init(); - -foreach my $i ( 1 .. 25 ) { - my %data = ( - addtime => time, - title => 'foo', - content => 'bar' - ); - - my $post = Post->new( %data ); - $post->save( cascade => 1 ); -} - -my $pager; - -$pager = Post::Manager->get_pager('abc'); - -is_deeply( - $pager, - { - total => 25, - page_size => 20, - page => 1 - } -); - -$pager = Post::Manager->get_pager(3); - -is_deeply( - $pager, - { - total => 25, - page_size => 20, - page => 3 - } -); - -my $posts = Post::Manager->get_objects(); -$_->delete( cascade => 1 ) foreach @$posts; diff --git a/Common-RDBO-Helper/t/post-similar.t b/Common-RDBO-Helper/t/post-similar.t deleted file mode 100644 index a3edcd2..0000000 --- a/Common-RDBO-Helper/t/post-similar.t +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/perl - -use lib 't/lib'; - -use Test::More 'tests' => 4; - -use NewDB; -use Post; -use Post::Manager; - -my $db = NewDB->new(); - -$db->init(); - -my @data = ( - { - addtime => time, - title => 'Linux', - content => 'blah-blah', - tags => [ { name => 'linux' }, { name => 'unix' }, { name => 'bsd' }, ] - }, - { - addtime => time + 5, - title => 'Unix', - content => 'blah-blah', - tags => [ { name => 'linux' }, { name => 'unix' }, ] - }, - { - addtime => time + 10, - title => 'BSD', - content => 'blah-blah', - tags => [ { name => 'linux' }, ] - }, - { - addtime => time, - title => 'Alone', - content => 'blah-blah', - }, -); - -foreach my $data ( @data ) { - my $tags = delete $data->{ tags }; - - my $post = Post->new( %$data ); - - $post->tags( $tags ) if $tags; - - $post->save( cascade => 1 ); -} - -my $posts = Post::Manager->get_posts(); - -is( scalar @$posts, 4 ); - -my $post = Post->new( id => 1 ); -$post->load(); - -my $similar = Post::Manager->get_list_similar( post => $post ); -is( scalar @$similar, 2 ); - -my $similar = Post::Manager->get_list_similar( post => 4 ); -ok( not defined $similar ); - -my $similar = Post::Manager->get_list_similar( post => 5 ); -ok( not defined $similar ); - -my $posts = Post::Manager->get_objects(); -$_->delete( cascade => 1 ) foreach @$posts; diff --git a/Common-RDBO-Helper/t/post.t b/Common-RDBO-Helper/t/post.t deleted file mode 100644 index 47f9cad..0000000 --- a/Common-RDBO-Helper/t/post.t +++ /dev/null @@ -1,101 +0,0 @@ -#! /usr/bin/perl - -use lib 't/lib'; - -use Test::More 'tests' => 13; - -use NewDB; -use Post; -use Post::Manager; -use Tag; -use Comment; -use Comment::Manager; - -my $db = NewDB->new(); - -$db->init(); - -my @data = ( - { - addtime => time, - title => 'Linux', - content => 'blah-blah', - comments => [ - { - addtime => time, - name => 'anon', - content => 'hallo' - } - ], - tags => [ { name => 'linux' }, { name => 'unix' }, { name => 'bsd' }, ] - }, - { - addtime => time + 5, - title => 'Unix', - content => 'blah-blah', - tags => [ { name => 'linux' }, { name => 'unix' }, ] - }, - { - addtime => time + 10, - title => 'BSD', - content => 'blah-blah', - tags => [ { name => 'linux' }, ] - }, -); - -foreach my $data ( @data ) { - my $comments = delete $data->{ comments }; - my $tags = delete $data->{ tags }; - - my $post = Post->new( %$data ); - - $post->tags( $tags ); - $post->comments( $comments ); - - $post->save( cascade => 1 ); -} - -my $posts = Post::Manager->get_posts(); - -is( scalar @$posts, 3 ); - -$posts = Post::Manager->get_list(); - -Comment::Manager->fill_count( - count_method => 'comment_count', - objects => $posts -); - -foreach my $post ( @$posts ) { - ok( $post->title ); - - if ( $post->title eq 'Linux' ) { - is( $post->comment_count, 1 ); - is( @{ $post->tags }, 3 ); - ok( - not defined Post::Manager->get_older( datetime => $post->addtime ) - ); - } elsif ( $post->title eq 'Unix' ) { - ok( Post::Manager->get_older( datetime => $post->addtime ) ); - ok( Post::Manager->get_newer( datetime => $post->addtime ) ); - } elsif ( $post->title eq 'BSD' ) { - ok( - not defined Post::Manager->get_newer( datetime => $post->addtime ) - ); - } -} - -my $tag1 = Tag->new( id => 1 ); -$tag1->load(); - -$posts = Post::Manager->get_list_by_tag( tags => $tag1 ); -is( @$posts, 3 ); - -$posts = Post::Manager->get_list_by_tag( tags => 3 ); -is( @$posts, 1 ); - -$posts = Post::Manager->get_list_by_tag( tags => [ $tag1, 3 ] ); -is( @$posts, 3 ); - -my $posts = Post::Manager->get_objects(); -$_->delete( cascade => 1 ) foreach @$posts; diff --git a/Common-RDBO-Helper/t/set_related_objects_with_first.t b/Common-RDBO-Helper/t/set_related_objects_with_first.t deleted file mode 100644 index 0eab3be..0000000 --- a/Common-RDBO-Helper/t/set_related_objects_with_first.t +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/perl - -use lib 't/lib'; - -use Test::More 'tests' => 1; - -use NewDB; -use Post; -use Post::Manager; -use Article; -use Article::Manager; -use Photo; -use Photo::Manager; - -my $db = NewDB->new(); - -$db->init(); - -my @posts = ( - { - addtime => time, - title => 'Linux', - content => 'blah-blah', - photos => [ - { - addtime => time, - type => 'post', - photo => 'linux.jpg' - }, - - ], - } -); - -my @articles = ( - { - addtime => time, - title => 'FreeBSD', - content => 'blah-blah', - photos => [ - { - addtime => time, - type => 'article', - poster => 1, - photo => 'freebsd.jpg' - }, - { - addtime => time + 10, - type => 'article', - photo => 'freebsd2.jpg' - } - ], - } -); - -foreach my $post ( @posts ) { - my $photos = delete $post->{ photos }; - - my $post = Post->new( %$post ); - - $post->photos( $photos ); - - $post->save( cascade => 1 ); -} - -foreach my $article ( @articles ) { - my $photos = delete $article->{ photos }; - - my $article = Article->new( %$article ); - - $article->photos( $photos ); - - $article->save( cascade => 1 ); -} - -my $articles = Article::Manager->get_objects(); - -Photo::Manager->set_related_objects_with_first( - objects => $articles, - objects_active_column => 'photo', - objects_rel_name => 'photos', - active_column => 'photo', - query => [ type => 'article' ] -); - -is( $articles->[ 0 ]->photo->photo, 'freebsd.jpg' ); - -my $posts = Post::Manager->get_objects(); -$_->delete( cascade => 1 ) foreach @$posts; - -my $articles = Article::Manager->get_objects(); -$_->delete( cascade => 1 ) foreach @$articles; diff --git a/Common-RDBO-Helper/t/tag.t b/Common-RDBO-Helper/t/tag.t deleted file mode 100644 index 3f7a37c..0000000 --- a/Common-RDBO-Helper/t/tag.t +++ /dev/null @@ -1,80 +0,0 @@ -#! /usr/bin/perl - -use lib 't/lib'; - -use Test::More 'no_plan'; - -use NewDB; -use Post; -use Post::Manager; -use Tag; -use Tag::Manager; - -my $db = NewDB->new(); - -$db->init(); - -my @data = ( - { - addtime => time, - title => 'Linux', - content => 'blah-blah', - tags => [ { name => 'linux' }, { name => 'unix' }, { name => 'bsd' }, ] - }, - { - addtime => time + 5, - title => 'Unix', - content => 'blah-blah', - tags => [ { name => 'linux' }, { name => 'unix' }, ] - }, - { - addtime => time + 10, - title => 'BSD', - content => 'blah-blah', - tags => [ { name => 'linux' }, ] - }, -); - -foreach my $data ( @data ) { - my $tags = delete $data->{ tags }; - - my $tag = Post->new( %$data ); - - $tag->tags( $tags ); - - $tag->save( cascade => 1 ); -} - -my $tags = Tag::Manager->get_tags(); - -is( scalar @$tags, 3 ); - -$cloud = Tag::Manager->get_cloud_list(); - -is_deeply( - $cloud, - [ - { - 'level' => 0, - 'count' => 1, - 'name' => 'bsd', - 'id' => '3' - }, - { - 'level' => 3, - 'count' => 3, - 'name' => 'linux', - 'id' => '1' - }, - { - 'level' => 1, - 'count' => 2, - 'name' => 'unix', - 'id' => '2' - } - - ] -); - -my $posts = Post::Manager->get_objects(); -$_->delete( cascade => 1 ) foreach @$posts; -- 2.11.4.GIT