Showing 7 changed files with 91 additions and 79 deletions
+25 -32
lib/DBIx/Custom.pm
... ...
@@ -1,7 +1,11 @@
1
+package DBIx::Custom;
2
+use base 'Object::Simple::Base';
3
+
4
+use strict;
5
+use warnings;
6
+
1 7
 use 5.008001;
2 8
 
3
-package DBIx::Custom;
4
-use Object::Simple;
5 9
 
6 10
 our $VERSION = '0.0901';
7 11
 
... ...
@@ -10,42 +14,33 @@ use DBI;
10 14
 use DBIx::Custom::Result;
11 15
 use DBIx::Custom::SQL::Template;
12 16
 
17
+my $p = __PACKAGE__;
13 18
 
14
-### Accessors
15
-sub dbh : Attr {}
19
+$p->attr('dbh');
16 20
 
17
-sub _query_caches     : ClassAttr { type => 'hash',  build => sub {{}} }
18
-sub _query_cache_keys : ClassAttr { type => 'array', build => sub {[]} }
19
-sub query_cache_max   : ClassAttr { build => 50 }
21
+$p->class_attr(_query_caches     => (type => 'hash',  default => sub { {} }))
22
+  ->class_attr(_query_cache_keys => (type => 'array', default => sub { [] }))
23
+  ->class_attr(query_cache_max   => 50);
20 24
 
21
-sub user         : HybridAttr { clone => 'scalar' }
22
-sub password     : HybridAttr { clone => 'scalar' }
23
-sub data_source  : HybridAttr { clone => 'scalar' }
24
-sub database     : HybridAttr { clone => 'scalar' }
25
-sub host         : HybridAttr { clone => 'scalar' }
26
-sub port         : HybridAttr { clone => 'scalar' }
27
-sub bind_filter  : HybridAttr { clone => 'scalar' }
28
-sub fetch_filter : HybridAttr { clone => 'scalar' }
25
+$p->hybrid_attr([qw/user password data_source
26
+                   database host port 
27
+                   bind_filter fetch_filter/] => (clone => 'scalar'));
29 28
 
30
-sub no_bind_filters  : HybridAttr { type  => 'array', build => sub {[]}, 
31
-                                    clone => 'array' }
29
+$p->hybrid_attr([qw/no_bind_filters no_fetch_filters/]
30
+            => (type => 'array', default => sub { [] }, clone => 'array'));
32 31
 
33
-sub no_fetch_filters : HybridAttr { type  => 'array', build => sub { [] },
34
-                                    clone => 'array' }
32
+$p->hybrid_attr(options => (type  => 'hash', default => sub { {} },
33
+                            clone => 'hash'));
35 34
 
36
-sub options : HybridAttr { type  => 'hash', build => sub {{}}, clone => 'hash' } 
35
+$p->hybrid_attr([qw/filters formats/]
36
+            => (type => 'hash', default => sub { {} },
37
+                deref => 1,     clone   => 'hash'));
37 38
 
38
-sub filters : HybridAttr { type  => 'hash', build => sub {{}},
39
-                           clone => 'hash', deref => 1 }
39
+$p->hybrid_attr(result_class => (default => 'DBIx::Custom::Result',
40
+                                 clone   => 'scalar'));
40 41
 
41
-sub formats : HybridAttr { type  => 'hash', build => sub { {} },
42
-                           clone => 'hash', deref => 1 }
43
-
44
-sub result_class : HybridAttr { build => 'DBIx::Custom::Result',
45
-                                clone => 'scalar' }
46
-
47
-sub sql_tmpl : HybridAttr { build => sub {DBIx::Custom::SQL::Template->new},
48
-                            clone => sub {$_[0] ? $_[0]->clone : undef} }
42
+$p->hybrid_attr(sql_tmpl => (default => sub {DBIx::Custom::SQL::Template->new},
43
+                             clone => sub {$_[0] ? $_[0]->clone : undef}));
49 44
 
50 45
 ### Methods
51 46
 
... ...
@@ -736,8 +731,6 @@ sub filter_off {
736 731
     return $self;
737 732
 }
738 733
 
739
-Object::Simple->build_class;
740
-
741 734
 =head1 NAME
742 735
 
743 736
 DBIx::Custom - Customizable DBI
+5 -5
lib/DBIx/Custom/MySQL.pm 1000644 → 1000755
... ...
@@ -5,12 +5,12 @@ use warnings;
5 5
 use strict;
6 6
 use Carp 'croak';
7 7
 
8
-my $class = __PACKAGE__;
8
+my $p = __PACKAGE__;
9 9
 
10
-$class->add_format(
11
-    datetime => $class->formats->{SQL99_datetime},
12
-    date     => $class->formats->{SQL99_date},
13
-    time     => $class->formats->{SQL99_time},
10
+$p->add_format(
11
+    datetime => $p->formats->{SQL99_datetime},
12
+    date     => $p->formats->{SQL99_date},
13
+    time     => $p->formats->{SQL99_time},
14 14
 );
15 15
 
16 16
 
+21 -12
lib/DBIx/Custom/Query.pm 1000644 → 1000755
... ...
@@ -1,26 +1,29 @@
1 1
 package DBIx::Custom::Query;
2
-use Object::Simple;
2
+use base 'Object::Simple::Base';
3 3
 
4 4
 use strict;
5 5
 use warnings;
6 6
 
7
-sub sql             : Attr {}
8
-sub key_infos       : Attr {}
9
-sub bind_filter     : Attr {}
10
-sub fetch_filter     : Attr {}
11
-sub sth             : Attr {}
7
+my $p = __PACKAGE__;
12 8
 
13
-sub no_bind_filters      : Attr { type => 'array', trigger => sub {
9
+$p->attr([qw/sql key_infos bind_filter fetch_filter sth/])
10
+  ->attr(_no_bind_filters_map => sub { {} })
11
+  ->attr(no_fetch_filters => (type => 'array', default => sub { [] }));
12
+
13
+$p->attr(no_bind_filters => (type => 'array', trigger => sub {
14 14
     my $self = shift;
15 15
     my $no_bind_filters = $self->no_bind_filters || [];
16 16
     my %no_bind_filters_map = map {$_ => 1} @{$no_bind_filters};
17 17
     $self->_no_bind_filters_map(\%no_bind_filters_map);
18
-}}
19
-sub _no_bind_filters_map : Attr {default => sub { {} }}
20
-
21
-sub no_fetch_filters     : Attr { type => 'array', default => sub { [] } }
18
+}));
22 19
 
23
-Object::Simple->build_class;
20
+sub new {
21
+    my $self = shift->SUPER::new(@_);
22
+    
23
+    Object::Simple::Util->init_attrs($self, 'no_bind_filters');
24
+    
25
+    return $self;
26
+}
24 27
 
25 28
 =head1 NAME
26 29
 
... ...
@@ -92,6 +95,12 @@ Set and get key informations
92 95
     $query     = $query->key_infos($key_infos);
93 96
     $key_infos = $query->key_infos;
94 97
 
98
+=head1 Methods
99
+
100
+=head2 new
101
+
102
+    my $query = DBIx::Custom::Query->new;
103
+    
95 104
 =head1 AUTHOR
96 105
 
97 106
 Yuki Kimoto, C<< <kimoto.yuki at gmail.com> >>
+20 -10
lib/DBIx/Custom/Result.pm 1000644 → 1000755
... ...
@@ -1,23 +1,31 @@
1 1
 package DBIx::Custom::Result;
2
-use Object::Simple;
2
+use base 'Object::Simple::Base';
3 3
 
4 4
 use strict;
5 5
 use warnings;
6 6
 use Carp 'croak';
7 7
 
8
-# Attributes
9
-sub _dbi             : Attr {}
10
-sub sth              : Attr {}
11
-sub fetch_filter     : Attr {}
8
+use Object::Simple::Util;
12 9
 
13
-sub no_fetch_filters : Attr { type => 'array', trigger => sub {
10
+my $p = __PACKAGE__;
11
+
12
+$p->attr([qw/_dbi sth fetch_filter/])
13
+  ->attr(_no_fetch_filters_map => sub { {} });
14
+
15
+$p->attr(no_fetch_filters => (type => 'array', trigger => sub {
14 16
     my $self = shift;
15 17
     my $no_fetch_filters = $self->no_fetch_filters || [];
16 18
     my %no_fetch_filters_map = map {$_ => 1} @{$no_fetch_filters};
17 19
     $self->_no_fetch_filters_map(\%no_fetch_filters_map);
18
-}}
20
+}));
19 21
 
20
-sub _no_fetch_filters_map : Attr {default => sub { {} }}
22
+sub new {
23
+    my $self = shift->SUPER::new(@_);
24
+    
25
+    Object::Simple::Util->init_attrs($self, 'no_fetch_filters');
26
+    
27
+    return $self;
28
+}
21 29
 
22 30
 # Fetch (array)
23 31
 sub fetch {
... ...
@@ -193,8 +201,6 @@ sub error {
193 201
     return wantarray ? ($sth->errstr, $sth->err, $sth->state) : $sth->errstr;
194 202
 }
195 203
 
196
-Object::Simple->build_class;
197
-
198 204
 =head1 NAME
199 205
 
200 206
 DBIx::Custom::Result - DBIx::Custom Resultset
... ...
@@ -238,6 +244,10 @@ Set and Get no filter keys when fetching
238 244
 
239 245
 =head1 Methods
240 246
 
247
+=head2 new
248
+
249
+    my $result = DBIx::Custom::Result->new;
250
+
241 251
 =head2 fetch
242 252
 
243 253
 Fetch a row
+13 -13
lib/DBIx/Custom/SQL/Template.pm
... ...
@@ -1,5 +1,5 @@
1 1
 package DBIx::Custom::SQL::Template;
2
-use Object::Simple; Object::Simple->build_class;
2
+use base 'Object::Simple::Base';
3 3
 
4 4
 use strict;
5 5
 use warnings;
... ...
@@ -7,7 +7,17 @@ use Carp 'croak';
7 7
 
8 8
 use DBIx::Custom::Query;
9 9
 
10
-__PACKAGE__->add_tag_processor(
10
+my $p = __PACKAGE__;
11
+
12
+$p->hybrid_attr(tag_processors => (type  => 'hash', default => sub { {} },
13
+                                   deref => 1,      clone   => 'hash'));
14
+
15
+$p->hybrid_attr(tag_start => (default => '{', clone => 'scalar'))
16
+  ->hybrid_attr(tag_end   => (default => '}', clone => 'scalar'));
17
+
18
+$p->hybrid_attr(tag_syntax => (clone => 'scalar'));
19
+
20
+$p->add_tag_processor(
11 21
     '?'      => \&DBIx::Custom::SQL::Template::TagProcessors::expand_basic_tag,
12 22
     '='      => \&DBIx::Custom::SQL::Template::TagProcessors::expand_basic_tag,
13 23
     '<>'     => \&DBIx::Custom::SQL::Template::TagProcessors::expand_basic_tag,
... ...
@@ -21,7 +31,7 @@ __PACKAGE__->add_tag_processor(
21 31
     'update' => \&DBIx::Custom::SQL::Template::TagProcessors::expand_update_tag
22 32
 );
23 33
 
24
-__PACKAGE__->tag_syntax(<< 'EOS');
34
+$p->tag_syntax(<< 'EOS');
25 35
 [tag]                     [expand]
26 36
 {? name}                  ?
27 37
 {= name}                  name = ?
... ...
@@ -39,16 +49,6 @@ __PACKAGE__->tag_syntax(<< 'EOS');
39 49
 {update key1 key2}    set key1 = ?, key2 = ?
40 50
 EOS
41 51
 
42
-# Accessor is created by Object::Simple.
43
-
44
-### Class-Object accessors
45
-
46
-
47
-sub tag_start      : HybridAttr { build => '{', clone => 'scalar' }
48
-sub tag_end        : HybridAttr { build => '}', clone => 'scalar' }
49
-sub tag_syntax     : HybridAttr { clone => 'scalar' }
50
-sub tag_processors : HybridAttr { type  => 'hash', build => sub {{}},
51
-                                  clone => 'hash', deref => 1 }
52 52
 
53 53
 # Add Tag processor
54 54
 sub add_tag_processor {
+5 -5
lib/DBIx/Custom/SQLite.pm 1000644 → 1000755
... ...
@@ -5,12 +5,12 @@ use strict;
5 5
 use warnings;
6 6
 use Carp 'croak';
7 7
 
8
-my $class = __PACKAGE__;
8
+my $p = __PACKAGE__;
9 9
 
10
-$class->add_format(
11
-    datetime => $class->formats->{SQL99_datetime},
12
-    date     => $class->formats->{SQL99_date},
13
-    time     => $class->formats->{SQL99_time},
10
+$p->add_format(
11
+    datetime => $p->formats->{SQL99_datetime},
12
+    date     => $p->formats->{SQL99_date},
13
+    time     => $p->formats->{SQL99_time},
14 14
 );
15 15
 
16 16
 sub connect {
+2 -2
t/dbix-custom-core-sqlite.t 1000644 → 1000755
... ...
@@ -730,8 +730,8 @@ test 'Cache';
730 730
 $dbi = DBIx::Custom->new($NEW_ARGS->{0});
731 731
 DBIx::Custom->query_cache_max(2);
732 732
 $dbi->do($CREATE_TABLE->{0});
733
-DBIx::Custom->delete_class_attr('_query_caches');
734
-DBIx::Custom->delete_class_attr('_query_cache_keys');
733
+delete $DBIx::Custom::CLASS_ATTRS->{_query_caches};
734
+delete $DBIx::Custom::CLASS_ATTRS->{_query_cache_keys};
735 735
 $tmpls[0] = "insert into table1 {insert key1 key2}";
736 736
 $queries[0] = $dbi->create_query($tmpls[0]);
737 737
 is(DBIx::Custom->_query_caches->{$tmpls[0]}{sql}, $queries[0]->sql, "$test : sql first");