Showing 5 changed files with 82 additions and 175 deletions
+2
Changes
... ...
@@ -1,3 +1,5 @@
1
+0.1626
2
+  simplified DBIx::Custom::Model and DBIx::Custom::Table
1 3
 0.1625
2 4
   added experimental DBIx::Custom::Model and DBIx::Custom::Table
3 5
 0.1624
+2 -2
lib/DBIx/Custom.pm
... ...
@@ -1,6 +1,6 @@
1 1
 package DBIx::Custom;
2 2
 
3
-our $VERSION = '0.1625';
3
+our $VERSION = '0.1626';
4 4
 
5 5
 use 5.008001;
6 6
 use strict;
... ...
@@ -523,7 +523,7 @@ sub register_filter {
523 523
 }
524 524
 
525 525
 our %VALID_SELECT_ARGS
526
-  = map { $_ => 1 } qw/auto_filter_table table column where append relation filter param/;
526
+  = map { $_ => 1 } qw/auto_filter_table table column where append relation filter/;
527 527
 
528 528
 sub select {
529 529
     my ($self, %args) = @_;
+25 -15
lib/DBIx/Custom/Model.pm
... ...
@@ -6,18 +6,27 @@ use warnings;
6 6
 use base 'Object::Simple';
7 7
 
8 8
 use Carp 'croak';
9
-use DBIx::Custom::Table;
10 9
 
11 10
 __PACKAGE__->attr(dbi => sub { DBIx::Custom->new });
11
+__PACKAGE__->attr(table_class => 'DBIx::Custom::Table');
12
+__PACKAGE__->attr(tables => sub { {} });
12 13
 
13 14
 sub table {
14
-    my ($self, $table) = @_;
15
-      
16
-    $self->{tables}{$table}
17
-        = DBIx::Custom::Table->new(name => $table, dbi => $self->dbi)
18
-      unless defined $self->{tables}{$table};
15
+    my ($self, $name) = @_;
19 16
     
20
-    return $self->{tables}{$table};
17
+    # Table class
18
+    my $table_class = $self->table_class;
19
+    croak qq{Invalid table class name "$table_class"}
20
+      unless $table_class =~ /^[\w:]+$/;
21
+    eval "use $table_class";
22
+    croak $@ if $@;
23
+    
24
+    # Create table
25
+    $self->tables->{$name}
26
+        = $table_class->new(name => $name, dbi => $self->dbi)
27
+      unless defined $self->tables->{$name};
28
+    
29
+    return $self->{tables}{$name};
21 30
 }
22 31
 
23 32
 1;
... ...
@@ -35,14 +44,15 @@ use base 'DBIx::Custom::Model';
35 44
 sub new {
36 45
     my $self = shift->SUPER::new(@_);
37 46
     
38
-    $self->table('books')->helper(
39
-        insert_multi => sub {
47
+    my $dbi = DBIx::Custom->connect(...);
48
+    
49
+    $self->dbi($dbi);
50
+    
51
+    $self->table('book')->helper(
52
+        insert => sub {
40 53
             my $self = shift;
41 54
             
42
-            my $dbi = $self->dbi;
43
-            
44
-            # ...
45
-            
55
+            return $self->dbi->insert(table => $self->name, @_);
46 56
         }
47 57
     );
48 58
     
... ...
@@ -56,7 +66,7 @@ and implements the following new ones.
56 66
 
57 67
 =head2 C<table>
58 68
 
59
-    my $table = $model->table('books');
69
+    my $table = $model->table('book');
60 70
 
61
-Create a table object if not exists or get it.
71
+Get a L<DBIx::Custom::Table>, or create a L<DBIx::Custom::Table> object if not exists.
62 72
 
+5 -145
lib/DBIx/Custom/Table.pm
... ...
@@ -9,87 +9,6 @@ use Carp 'croak';
9 9
 
10 10
 __PACKAGE__->attr(['dbi', 'name']);
11 11
 
12
-sub new {
13
-    my $self = shift->SUPER::new(@_);
14
-    
15
-    my $insert = sub {
16
-        my $self = shift;
17
-        
18
-        return $self->dbi->insert(table => $self->name, param => shift);
19
-    };
20
-    
21
-    my $update = sub {
22
-        my $self = shift;
23
-        
24
-        return $self->dbi->update(table => $self->name, param => shift,
25
-                                  where => shift);
26
-    };
27
-    
28
-    my $update_all = sub {
29
-        my $self = shift;
30
-        
31
-        return $self->dbi->update_all(table => $self->name, param => shift);
32
-    };
33
-    
34
-    my $delete = sub {
35
-        my $self = shift;
36
-        
37
-        return $self->dbi->delete(table => $self->name, where => shift);
38
-    };
39
-    
40
-    my $delete_all = sub {
41
-        my $self = shift;
42
-        
43
-        return $self->dbi->delete_all(table => $self->name);
44
-    };
45
-    
46
-    my $select = sub {
47
-        my $self = shift;
48
-        
49
-        my $where  = {};
50
-        my $column = ['*'];
51
-        my $append = '';
52
-        
53
-        foreach my $arg (@_) {
54
-            my $type = ref $arg;
55
-            
56
-            if ($type eq 'ARRAY') {
57
-                $column = $arg;
58
-            }
59
-            elsif ($type eq 'HASH') {
60
-                $where = $arg;
61
-            }
62
-            else {
63
-                $append = $arg;
64
-            }
65
-        }
66
-        
67
-        return $self->dbi->select(
68
-            table  => $self->name,
69
-            where  => $where,
70
-            column => $column,
71
-            append => $append
72
-        );
73
-    };
74
-    
75
-    $self->helper(
76
-        insert => $insert,
77
-        insert_simple => $insert,
78
-        update => $update,
79
-        update_simple => $update,
80
-        update_all => $update_all,
81
-        update_all_simple => $update_all,
82
-        delete => $delete,
83
-        delete_simple => $delete,
84
-        delete_all => $delete_all,
85
-        delete_all_simple => $delete_all,
86
-        select => $select,
87
-        select_simple => $select
88
-    );
89
-    
90
-    return $self;
91
-}
92
-
93 12
 our $AUTOLOAD;
94 13
 
95 14
 sub AUTOLOAD {
... ...
@@ -123,7 +42,7 @@ sub DESTROY { }
123 42
 
124 43
 =head1 NAME
125 44
 
126
-DBIx::Custom::Model - Modele base class(experimental)
45
+DBIx::Custom::Model - Table base class(experimental)
127 46
 
128 47
 =head1 SYNOPSIS
129 48
 
... ...
@@ -139,69 +58,10 @@ and implements the following new ones.
139 58
 =head2 C<helper>
140 59
 
141 60
     $table->helper(insert => sub {
142
-        # ...
61
+        my $self = shift;
62
+        
63
+        return $self->dbi->insert(table => $self->name, @_);
143 64
     });
144
-
145
-=head2 C<new>
146
-
147
-    my $table = DBIx::Custom->new;
148
-    
149
-=head2 C<insert>
150
-
151
-    $table->insert(\%param);
152
-
153
-Insert.
154
-
155
-=head2 C<insert_simple>
156
-
157
-Same as C<insert()>.
158
-
159
-=head2 C<update>
160
-
161
-    $table->update(\%param, \%where);
162
-
163
-Update.
164
-
165
-=head2 C<update_simple>
166
-
167
-Same as C<update()>.
168
-
169
-=head2 C<update_all>
170
-
171
-    $table->update_all(\%param);
172
-
173
-Update all.
174
-
175
-=head2 C<update_all_simple>
176
-
177
-Same as C<update_all>.
178
-
179
-=head2 C<delete>
180
-
181
-    $table->delete(\%where);
182
-
183
-=head2 C<delete_simple()>
184
-
185
-Same as C<delete_all()>.
186
-
187
-=head2 C<delete_all>
188
-
189
-    $table->delete_all(\%where);
190
-
191
-=head2 C<delete_all_simple()>
192
-
193
-Same as C<delete_all()>.
194
-
195
-=head2 C<select>
196
-
197
-    $table->select(\%where);
198
-    $table->select(\@column);
199
-    $table->select($append);
200 65
     
201
-    # And any combination
202
-    $table->select(\%where, \@column, $append);
203
-
204
-=head2 C<select_simple>
205
-
206
-Same as C<select()>.
66
+Add helper method to a L<DBIx::Custom::Table> object.
207 67
 
+48 -13
t/dbix-custom-core-sqlite.t
... ...
@@ -754,31 +754,66 @@ test 'model';
754 754
     package MyModel1;
755 755
     
756 756
     use base 'DBIx::Custom::Model';
757
+    
758
+    sub new {
759
+        my $self = shift->SUPER::new(@_);
760
+        
761
+        my $dbi = DBIx::Custom->connect($NEW_ARGS->{0});
762
+        
763
+        $self->dbi($dbi);
764
+        
765
+        $self->table('table1')->helper(
766
+            insert => sub { 
767
+                my $self = shift;
768
+                $self->dbi->insert(table => $self->name, @_);
769
+            },
770
+            update => sub {
771
+                my $self = shift;
772
+                $self->dbi->update(table => $self->name, @_);
773
+            },
774
+            update_all => sub {
775
+                my $self = shift;
776
+                $self->dbi->update_all(table => $self->name, @_);
777
+            },
778
+            delete => sub {
779
+                my $self = shift;
780
+                $self->dbi->delete(table => $self->name, @_);
781
+            },
782
+            delete_all => sub {
783
+                my $self = shift;
784
+                $self->dbi->delete_all(table => $self->name, @_);
785
+            },
786
+            select => sub {
787
+                my $self = shift;
788
+                $self->dbi->select(table => $self->name, @_);
789
+            },
790
+        );
791
+        return $self;
792
+    }
757 793
 }
758 794
 $model = MyModel1->new;
759
-$model->dbi->connect($NEW_ARGS->{0});
760 795
 $model->dbi->execute($CREATE_TABLE->{0});
761 796
 $table = $model->table('table1');
762
-$table->insert({key1 => 1, key2 => 2});
763
-$table->insert_simple({key1 => 3, key2 => 4});
797
+$table->insert(param => {key1 => 1, key2 => 2});
798
+$table->insert(param => {key1 => 3, key2 => 4});
764 799
 $rows = $table->select->fetch_hash_all;
765 800
 is_deeply($rows, [{key1 => 1, key2 => 2}, {key1 => 3, key2 => 4}],
766 801
                  "$test: select");
767
-$rows = $table->select({key2 => 2},
768
-                       'order by key1', ['key1', 'key2'])->fetch_hash_all;
802
+$rows = $table->select(where => {key2 => 2}, append => 'order by key1',
803
+                              column => ['key1', 'key2'])->fetch_hash_all;
769 804
 is_deeply($rows, [{key1 => 1, key2 => 2}],
770
-                 "$test: insert insert_simple select select_simple");
771
-$table->update({key1 => 3}, {key2 => 2});
772
-$table->update_simple({key1 => 5}, {key2 => 4});
773
-$rows = $table->select_simple({key2 => 2})->fetch_hash_all;
805
+                 "$test: insert insert select");
806
+$table->update(param => {key1 => 3}, where => {key2 => 2});
807
+$table->update(param => {key1 => 5}, where => {key2 => 4});
808
+$rows = $table->select(where => {key2 => 2})->fetch_hash_all;
774 809
 is_deeply($rows, [{key1 => 3, key2 => 2}],
775 810
                  "$test: update");
776
-$table->delete({key2 => 2});
811
+$table->delete(where => {key2 => 2});
777 812
 $rows = $table->select->fetch_hash_all;
778 813
 is_deeply($rows, [{key1 => 5, key2 => 4}], "$test: delete");
814
+$table->update_all(param => {key1 => 3});
815
+$rows = $table->select->fetch_hash_all;
816
+is_deeply($rows, [{key1 => 3, key2 => 4}], "$test: update_all");
779 817
 $table->delete_all;
780 818
 $rows = $table->select->fetch_hash_all;
781 819
 is_deeply($rows, [], "$test: delete_all");
782
-$table->helper('insert' => sub { 5 });
783
-is($table->insert, 5, "$test : helper");
784
-