/[Frey]/trunk/lib/Frey/ORM/Item.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /trunk/lib/Frey/ORM/Item.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 969 - (show annotations)
Fri Jan 9 16:02:33 2009 UTC (15 years, 3 months ago) by dpavlin
File size: 2593 byte(s)
start refactoring of Fey RDBMS support into Frey::ORM
1 package Frey::ORM::Item;
2
3 use Data::Dump qw/dump/;
4 use Carp qw/carp/;
5
6 use Moose;
7 extends 'Frey';
8 with 'Frey::ORM::Field';
9 with 'Frey::ORM::Layout';
10 with 'Frey::Storage';
11 #with 'BonusTypes';
12
13 use Moose::Util::TypeConstraints;
14
15 enum 'Render_as' => qw( view edit none );
16 has render_as => (
17 is => 'rw',
18 isa => 'Render_as',
19 required => 1,
20 default => 'view',
21 );
22
23 has fey => (
24 is => 'rw',
25 isa => 'Object', # FIXME Strix::User?
26 # required => 1, # XXX if we require it we can't have Add form
27 );
28
29 has fey_class => (
30 is => 'rw',
31 isa => 'Str',
32 required => 1,
33 );
34
35 has 'display_columns' => (
36 is => 'rw',
37 isa => 'ArrayRef[Str]',
38 lazy_build => 1,
39 );
40
41 has 'labels' => (
42 is => 'rw',
43 isa => 'HashRef[Str]',
44 default => sub {
45 my $self = shift;
46 $self->load( 'var/design/' . $self->fey_class . '-labels' ) || {}
47 },
48 );
49
50
51 sub set_from_hash {
52 my ($self, $f) = @_;
53 my $attrmap = $self->fey->meta->get_attribute_map if $self->fey;
54 my $hash;
55 foreach my $name ( @{ $self->display_columns } ) {
56 my $field_name = $self->field_name($name);
57 if(defined $f->{$field_name}) {
58 $hash->{ $name } = $f->{$field_name};
59
60 if ( defined $attrmap->{$name} ) {
61 my $writer = $attrmap->{$name}->get_write_method;
62 $self->fey->$writer($f->{$field_name});
63 } else {
64 warn "can't store value back into fey->$name";
65 }
66 }
67 }
68 warn "# set_from_hash ", $self->uuid," produced hash = ",dump( $hash ) if $hash;
69 return $hash;
70 }
71
72 sub main {
73 my ( $self ) = @_;
74
75 warn "# item ",$self->uuid, " fey = ",dump( $self->fey ) if $self->debug;
76
77 my $out;
78 if ( $self->render_as eq 'edit' ) {
79 $out .= $self->render_edit;
80 } elsif ( $self->render_as eq 'view' ) {
81 $out .= $self->render_view;
82 } else {
83 warn "no renderer ",dump( $self->render_as ), " skipping...";
84 }
85
86 warn $@ if $@;
87 warn ">>> ",length($out),"\n";
88
89 return $out;
90 };
91
92 sub field_value {
93 my ( $self, $name ) = @_;
94 my $val = '';
95 $val = $self->fey->$name if $self->fey && $self->fey->can($name);
96 return $val;
97 }
98
99 sub field_label {
100 my ( $self, $name ) = @_;
101 my $new_labels = $self->reload( 'var/design/' . $self->fey_class . '-labels' );
102 $self->labels( $new_labels ) if $new_labels;
103 my $label = $self->labels->{$name} || ucfirst($name);
104 return $label;
105 }
106
107 sub _build_display_columns {
108 my $self = shift;
109
110 my $m = $self->fey_class->meta;
111
112 my @cols;
113
114 foreach ( $m->get_attribute_list ) {
115 my $attr = $m->get_attribute( $_ );
116 warn "_build_display_columns $_\n" if $self->debug;
117 # FIXME primary key would have to be read-only!
118 push @cols, $_;
119 }
120
121 warn "## display_columns ",dump( @cols ) if $self->debug;
122
123 return \@cols;
124 }
125
126 1;

  ViewVC Help
Powered by ViewVC 1.1.26