Commit | Line | Data |
1d521afd |
1 | package DBIx::Class::ResultSourceProxy::View; |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use base qw/DBIx::Class::ResultSourceProxy/; |
7 | |
8 | use 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 | |
16 | sub _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 | |
54 | DBIx::Class::ResultSourceProxy::View - provides a classdata view |
55 | object 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 | |
72 | Adds columns to the current class and creates accessors for them. |
73 | |
74 | =cut |
75 | |
76 | =head2 view |
77 | |
78 | __PACKAGE__->view('view_name'); |
79 | |
80 | Gets or sets the view name. |
81 | |
82 | =cut |
83 | |
84 | sub 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 | |
113 | Returns 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 | |
121 | Returns the column metadata hashref for a column. For a description of |
122 | the various types of column data in this hashref, see |
123 | L<DBIx::Class::ResultSource/add_column> |
124 | |
125 | =cut |
126 | |
127 | =head2 columns |
128 | |
129 | my @column_names = $obj->columns; |
130 | |
131 | =cut |
132 | |
133 | 1; |
134 | |
135 | =head1 AUTHORS |
136 | |
137 | Matt S. Trout <mst@shadowcatsystems.co.uk> |
138 | |
139 | =head1 LICENSE |
140 | |
141 | You may distribute this code under the same terms as Perl itself. |
142 | |
143 | =cut |
144 | |