From b8c35ae5f6983e0ec97917defac52eca2e1f9679 Mon Sep 17 00:00:00 2001 From: vti Date: Mon, 20 Oct 2008 22:50:24 +0200 Subject: [PATCH] default_language feature. --- .../lib/Rose/DBx/Object/I18N/Static.pm | 14 +++++++++++-- Rose-DBx-Object-I18N/t/03pod-coverage.t | 8 ++++++++ .../t/available-translations-before-load-i18n.t | 4 ++-- .../t/load-i18n-with-default-language.t | 5 +++-- .../t/load-i18n-with-wrong-language.t | 5 +++-- .../{load-i18n-with-default-language.t => load.t} | 23 ++++++++++++++-------- 6 files changed, 43 insertions(+), 16 deletions(-) create mode 100644 Rose-DBx-Object-I18N/t/03pod-coverage.t copy Rose-DBx-Object-I18N/t/{load-i18n-with-default-language.t => load.t} (50%) diff --git a/Rose-DBx-Object-I18N/lib/Rose/DBx/Object/I18N/Static.pm b/Rose-DBx-Object-I18N/lib/Rose/DBx/Object/I18N/Static.pm index 8259ddb..2c26a01 100644 --- a/Rose-DBx-Object-I18N/lib/Rose/DBx/Object/I18N/Static.pm +++ b/Rose-DBx-Object-I18N/lib/Rose/DBx/Object/I18N/Static.pm @@ -12,6 +12,8 @@ use Rose::DB::Constants qw(IN_TRANSACTION); use Rose::DB::Object::Helpers qw/ has_loaded_related /; +use Rose::Object::MakeMethods::Generic( scalar => [ default_language => {} ] ); + our $Debug = 0; =head1 NAME @@ -36,11 +38,16 @@ sub get_translation_rel_name { sub i18n { my $self = shift; + my %args = @_; my $rel_name = $self->get_translation_rel_name(); - if ( $self->has_loaded_related( $rel_name ) && !$self->{ _i18n } ) { + return $self->{ _i18n } if !keys %args && $self->{ _i18n }; + + if ( $self->has_loaded_related( $rel_name ) ) { $self->{ _i18n } = $self->$rel_name->[ 0 ]; + } else { + $self->load_i18n( %args ); } return $self->{ _i18n }; @@ -117,7 +124,10 @@ sub load_i18n { my $self = shift; my %args = @_; - my $language = $args{ language } || $self->orig_lang; + my $language = + $args{ language } + || $self->default_language + || $self->orig_lang; my $rel_name = $self->get_translation_rel_name(); diff --git a/Rose-DBx-Object-I18N/t/03pod-coverage.t b/Rose-DBx-Object-I18N/t/03pod-coverage.t new file mode 100644 index 0000000..1140a3e --- /dev/null +++ b/Rose-DBx-Object-I18N/t/03pod-coverage.t @@ -0,0 +1,8 @@ +use Test::More; +plan skip_all => "Skipping author tests" if not $ENV{ AUTHOR_TESTING }; + +eval "use Test::Pod::Coverage"; +plan skip_all => "Test::Pod::Coverage required for testing POD coverage" + if $@; + +all_pod_coverage_ok(); diff --git a/Rose-DBx-Object-I18N/t/available-translations-before-load-i18n.t b/Rose-DBx-Object-I18N/t/available-translations-before-load-i18n.t index c2b96f9..016e42b 100644 --- a/Rose-DBx-Object-I18N/t/available-translations-before-load-i18n.t +++ b/Rose-DBx-Object-I18N/t/available-translations-before-load-i18n.t @@ -24,8 +24,8 @@ $u->save(); $u = User->new( id => $u->id ); $u->load(); -eval { $u->available_translations(); }; -ok( $@ ); + +is_deeply( $u->available_translations(), [] ); $u->delete( cascade => 1 ); diff --git a/Rose-DBx-Object-I18N/t/load-i18n-with-default-language.t b/Rose-DBx-Object-I18N/t/load-i18n-with-default-language.t index 63533c4..a76e383 100644 --- a/Rose-DBx-Object-I18N/t/load-i18n-with-default-language.t +++ b/Rose-DBx-Object-I18N/t/load-i18n-with-default-language.t @@ -3,7 +3,7 @@ use strict; use warnings; -use Test::More 'tests' => 4; +use Test::More 'tests' => 5; use lib 't/lib'; @@ -24,7 +24,8 @@ $u->save(); $u = User->new( id => $u->id ); $u->load(); -ok( not defined $u->i18n ); +ok( $u->i18n ); +ok( $u->i18n->lang, 'en' ); ok( $u->load_i18n() ); diff --git a/Rose-DBx-Object-I18N/t/load-i18n-with-wrong-language.t b/Rose-DBx-Object-I18N/t/load-i18n-with-wrong-language.t index cff9389..29938e9 100644 --- a/Rose-DBx-Object-I18N/t/load-i18n-with-wrong-language.t +++ b/Rose-DBx-Object-I18N/t/load-i18n-with-wrong-language.t @@ -3,7 +3,7 @@ use strict; use warnings; -use Test::More 'tests' => 3; +use Test::More 'tests' => 4; use lib 't/lib'; @@ -24,7 +24,8 @@ $u->save(); $u = User->new( id => $u->id ); $u->load(); -ok( not defined $u->i18n ); +ok( $u->i18n ); +ok( $u->i18n->lang, 'en' ); is( $u->load_i18n( language => 'aa', speculative => 1 ), 0 ); diff --git a/Rose-DBx-Object-I18N/t/load-i18n-with-default-language.t b/Rose-DBx-Object-I18N/t/load.t similarity index 50% copy from Rose-DBx-Object-I18N/t/load-i18n-with-default-language.t copy to Rose-DBx-Object-I18N/t/load.t index 63533c4..1a4ba58 100644 --- a/Rose-DBx-Object-I18N/t/load-i18n-with-default-language.t +++ b/Rose-DBx-Object-I18N/t/load.t @@ -1,22 +1,21 @@ -#!/usr/bin/perl +#! /usr/bin/perl use strict; use warnings; -use Test::More 'tests' => 4; +use Test::More 'tests' => 5; use lib 't/lib'; use NewDB; use User; -use User::Manager; my $db = NewDB->new(); $db->init(); my $u = User->new( - name => 'uuu', + name => 'foobar', orig_lang => 'en', signature => 'hello' ); @@ -24,14 +23,22 @@ $u->save(); $u = User->new( id => $u->id ); $u->load(); -ok( not defined $u->i18n ); - -ok( $u->load_i18n() ); is( $u->i18n->lang, 'en' ); - is( $u->i18n->signature, 'hello' ); +is( $u->i18n( language => 'ru' )->lang, 'ru' ); + +$u = User->new( id => $u->id ); +$u->load(); +$u->default_language( 'ru' ); +is( $u->i18n->lang, 'ru' ); + +$u = User->new( id => $u->id ); +$u->load(); +$u->default_language( 'en' ); +is( $u->i18n->lang, 'en' ); + $u->delete( cascade => 1 ); 1; -- 2.11.4.GIT