[Jifty-commit] r6151 - in Net-Jifty/branches/classbuilder: . lib/Net/Jifty/Meta
Jifty commits
jifty-commit at lists.jifty.org
Wed Dec 17 01:20:23 EST 2008
Author: sartak
Date: Wed Dec 17 01:20:23 2008
New Revision: 6151
Added:
Net-Jifty/branches/classbuilder/lib/Net/Jifty/Meta/Attribute.pm
Modified:
Net-Jifty/branches/classbuilder/ (props changed)
Net-Jifty/branches/classbuilder/lib/Net/Jifty/ClassBuilder.pm
Log:
r77661 at onn: sartak | 2008-12-17 01:20:19 -0500
Use our new attribute metaclass
Modified: Net-Jifty/branches/classbuilder/lib/Net/Jifty/ClassBuilder.pm
==============================================================================
--- Net-Jifty/branches/classbuilder/lib/Net/Jifty/ClassBuilder.pm (original)
+++ Net-Jifty/branches/classbuilder/lib/Net/Jifty/ClassBuilder.pm Wed Dec 17 01:20:23 2008
@@ -1,14 +1,19 @@
package Net::Jifty::ClassBuilder;
use Moose;
+use Net::Jifty::Meta::Class;
+use Net::Jifty::Meta::Attribute;
+use Net::Jifty::Record;
+
has connection => (
is => 'rw',
isa => 'Net::Jifty',
required => 1,
);
-use constant metaclass => 'Net::Jifty::Meta::Class';
-use constant superclass => 'Net::Jifty::Record';
+use constant metaclass => 'Net::Jifty::Meta::Class';
+use constant attribute_metaclass => 'Net::Jifty::Meta::attribute';
+use constant superclass => 'Net::Jifty::Record';
sub build_class {
my $self = shift;
@@ -44,6 +49,7 @@
my $type_constraint = $self->create_type_constraint($spec);
$args{isa} = $type_constraint if defined($type_constraint);
+ $args{metaclass} = $self->attribute_metaclass;
$meta->add_attribute($name => %args);
}
Added: Net-Jifty/branches/classbuilder/lib/Net/Jifty/Meta/Attribute.pm
==============================================================================
--- (empty file)
+++ Net-Jifty/branches/classbuilder/lib/Net/Jifty/Meta/Attribute.pm Wed Dec 17 01:20:23 2008
@@ -0,0 +1,33 @@
+package Net::Jifty::Meta::Attribute;
+use Moose;
+extends 'Moose::Meta::Attribute';
+
+around get_value => sub {
+ my $orig = shift;
+ my ($self, $instance) = @_;
+
+ my $value = $orig->(@_);
+ return $value if defined($value);
+
+ # have we already asked the server for this record?
+ if (!exists($instance->{__net_jifty_cache})) {
+ # ask the server
+ $instance->{__net_jifty_cache} = $connection->read(
+ $self->associated_class->model_name,
+ id => $instance->id,
+ );
+ }
+
+ return $instance->{$self->name} = delete $instance->{__net_jifty_cache}{$self->name};
+};
+
+after set_value => sub {
+ my ($self, $instance, $value) = @_;
+ $instance->add_change({ $self->name => $value });
+};
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;
+
More information about the Jifty-commit
mailing list