[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