File Coverage

blib/lib/LittleORM/Model/Field.pm
Criterion Covered Total %
statement 12 52 23.0
branch 0 20 0.0
condition 0 6 0.0
subroutine 4 12 33.3
pod 0 8 0.0
total 16 98 16.3


line stmt bran cond sub pod time code
1 1     1   3 use strict;
  1         2  
  1         39  
2              
3             package LittleORM::Model::Field;
4 1     1   4 use Moose;
  1         2  
  1         10  
5              
6             has 'model' => ( is => 'rw',
7             isa => 'Str' );
8              
9             has 'table_alias' => ( is => 'rw', isa => 'Str' );
10              
11             has 'base_attr' => ( is => 'rw',
12             isa => 'Str',
13             default => '' );
14              
15             has 'base_field' => ( is => 'rw',
16             isa => 'LittleORM::Model::Field' );
17              
18             has 'db_func' => ( is => 'rw',
19             isa => 'Str' );
20              
21             has 'db_func_tpl' => ( is => 'rw',
22             isa => 'Str',
23             default => '%s(%s)' );
24              
25             has 'func_args_tpl' => ( is => 'rw',
26             isa => 'Str',
27             default => '%s' );
28              
29             has 'select_as' => ( is => 'rw',
30             isa => 'Str',
31             default => \&get_select_as_field_name );
32              
33             has 'post_process' => ( is => 'rw',
34             isa => 'CodeRef',
35             default => sub { sub { $_[ 0 ] } } );
36              
37             has 'db_field_type' => ( is => 'rw',
38             isa => 'Str' );
39              
40             has '_distinct' => ( is => 'rw',
41             isa => 'Bool',
42             default => 0 );
43              
44             has 'orm_coerce' => ( is => 'rw',
45             isa => 'Bool',
46             default => 1 );
47              
48 1     1   7265 use Carp::Assert 'assert';
  1         3  
  1         11  
49 1     1   172 use Scalar::Util 'blessed';
  1         2  
  1         718  
50              
51             {
52             my $cnt = 0;
53              
54             sub get_select_as_field_name
55             {
56 0     0 0   $cnt ++;
57              
58 0           return '_f' . $cnt; # lowcase
59              
60             }
61             }
62              
63             sub wrap_field
64             {
65 0     0 0   my $self = shift;
66              
67 0           my $rv = LittleORM::Model::Field -> new( base_field => $self,
68             @_ );
69              
70 0           return $rv;
71             }
72              
73             sub determine_ta_for_field_from_another_model
74             {
75 0     0 0   my ( $self, $tables ) = @_;
76              
77 0           my $rv = $self -> table_alias();
78              
79 0 0         unless( $rv )
80             {
81 0           $rv = $self -> model() -> _db_table();
82              
83 0 0         if( $tables )
84             {
85             eocEfjT38ttaOGys:
86 0           foreach my $t ( @{ $tables } )
  0            
87             {
88 0           my ( $table, $alias ) = split( /\s+/, $t );
89 0 0         if( $table eq $rv )
90             {
91 0           $rv = $alias;
92 0           last eocEfjT38ttaOGys;
93             }
94             }
95             }
96             }
97              
98 0           return $rv;
99             }
100              
101             sub this_is_field
102             {
103 0     0 0   my ( $self, $attr ) = @_;
104              
105 0           my $rv = 0;
106              
107 0 0 0       if( blessed( $attr ) and ( $attr -> isa( 'LittleORM::Model::Field' ) ) )
108             {
109 0           $rv = 1;
110             }
111 0           return $rv;
112             }
113              
114             sub assert_model_soft
115             {
116 0     0 0   my ( $self, $model ) = @_;
117 0 0         if( $self -> model() )
118             {
119 0           $self -> assert_model( $model );
120             }
121             }
122              
123             sub assert_model
124             {
125 0     0 0   my ( $self, $model ) = @_;
126              
127 0   0       my $t = ( ref( $model ) or $model );
128 0           assert( $self -> model() eq $t );
129             }
130              
131             sub form_field_name_for_db_select
132             {
133 0     0 0   my ( $self, $table ) = @_;
134              
135 0           my $rv = $self -> base_attr();
136              
137 0 0         if( $rv )
    0          
138             {
139 0           assert( $self -> model() );
140 0 0         $rv = ( $table ? $table . '.' : '' ) .
141             &LittleORM::Model::__get_db_field_name( $self -> model() -> meta() -> find_attribute_by_name( $rv ) );
142              
143             } elsif( my $f = $self -> base_field() )
144             {
145 0           $rv = $f -> form_field_name_for_db_select();
146             }
147              
148 0 0         if( my $f = $self -> db_func() )
149             {
150 0 0         $rv = sprintf( $self -> db_func_tpl(),
151             $f,
152             sprintf( $self -> func_args_tpl(),
153             ( $self -> _distinct() ? ' DISTINCT ' : '' ) . $rv ) );
154             }
155              
156 0           return $rv;
157              
158             }
159              
160             sub form_field_name_for_db_select_with_as
161             {
162 0     0 0   my $self = shift;
163              
164 0           my $rv = $self -> form_field_name_for_db_select( @_ ) . ' AS ' . $self -> select_as();
165              
166 0           return $rv;
167             }
168              
169              
170             394041;