ground work. still to do is tests, docs, better code
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / ResultSourceProxy / View.pm
CommitLineData
1d521afd 1package DBIx::Class::ResultSourceProxy::View;
2
3use strict;
4use warnings;
5
6use base qw/DBIx::Class::ResultSourceProxy/;
7
8use DBIx::Class::ResultSource::View;
9
10__PACKAGE__->mk_classdata(view_class => 'DBIx::Class::ResultSource::View');
11
12__PACKAGE__->mk_classdata('view_definition');
13__PACKAGE__->mk_classdata('view_alias'); # FIXME: Doesn't actually do
14 # anything yet!
15
16sub _init_result_source_instance {
17 my $class = shift;
18
19 $class->mk_classdata('result_source_instance')
20 unless $class->can('result_source_instance');
21
22 my $view = $class->result_source_instance;
23 my $class_has_view_instance = ($view and $view->result_class eq $class);
24 return $view if $class_has_view_instance;
25
26 if( $view ) {
27 $view = $class->view_class->new({
28 %$view,
29 result_class => $class,
30 source_name => undef,
31 schema => undef
32 });
33 }
34 else {
35 $view = $class->view_class->new({
36 name => undef,
37 result_class => $class,
38 source_name => undef,
39 });
40 }
41
42 $class->result_source_instance($view);
43
44 if ($class->can('schema_instance')) {
45 $class =~ m/([^:]+)$/;
46 $class->schema_instance->register_class($class, $class);
47 }
48
49 return $view;
50}
51
52=head1 NAME
53
54DBIx::Class::ResultSourceProxy::View - provides a classdata view
55object and method proxies
56
57=head1 SYNOPSIS
58
59 #optional, for deploy support
60 __PACKAGE__->view_definition('SELECT cdid, artist, title, year FROM foo');
61
62 __PACKAGE__->view('cd');
63 __PACKAGE__->add_columns(qw/cdid artist title year/);
64 __PACKAGE__->set_primary_key('cdid');
65
66=head1 METHODS
67
68=head2 add_columns
69
70 __PACKAGE__->add_columns(qw/cdid artist title year/);
71
72Adds columns to the current class and creates accessors for them.
73
74=cut
75
76=head2 view
77
78 __PACKAGE__->view('view_name');
79
80Gets or sets the view name.
81
82=cut
83
84sub view {
85 my ($class, $view) = @_;
86 return $class->result_source_instance->name unless $view;
87 unless (ref $view) {
88 $view = $class->view_class->new({
89 $class->can('result_source_instance') ?
90 %{$class->result_source_instance||{}} : (),
91 name => $view,
92 result_class => $class,
93 source_name => undef,
94 });
95 }
96
97 $class->mk_classdata('result_source_instance')
98 unless $class->can('result_source_instance');
99
100 $class->result_source_instance($view);
101
102 if ($class->can('schema_instance')) {
103 $class =~ m/([^:]+)$/;
104 $class->schema_instance->register_class($class, $class);
105 }
106 return $class->result_source_instance->name;
107}
108
109=head2 has_column
110
111 if ($obj->has_column($col)) { ... }
112
113Returns 1 if the class has a column of this name, 0 otherwise.
114
115=cut
116
117=head2 column_info
118
119 my $info = $obj->column_info($col);
120
121Returns the column metadata hashref for a column. For a description of
122the various types of column data in this hashref, see
123L<DBIx::Class::ResultSource/add_column>
124
125=cut
126
127=head2 columns
128
129 my @column_names = $obj->columns;
130
131=cut
132
1331;
134
135=head1 AUTHORS
136
137Matt S. Trout <mst@shadowcatsystems.co.uk>
138
139=head1 LICENSE
140
141You may distribute this code under the same terms as Perl itself.
142
143=cut
144