[Jifty-commit] r5629 - in Net-Jifty/trunk: .
Jifty commits
jifty-commit at lists.jifty.org
Fri Aug 1 09:41:33 EDT 2008
Author: sartak
Date: Fri Aug 1 09:41:33 2008
New Revision: 5629
Modified:
Net-Jifty/trunk/ (props changed)
Net-Jifty/trunk/lib/Net/Jifty.pm
Log:
r68238 at onn: sartak | 2008-08-01 09:41:21 -0400
Remove classbuilder stuff, that's now in a branch
Modified: Net-Jifty/trunk/lib/Net/Jifty.pm
==============================================================================
--- Net-Jifty/trunk/lib/Net/Jifty.pm (original)
+++ Net-Jifty/trunk/lib/Net/Jifty.pm Fri Aug 1 09:41:33 2008
@@ -1,7 +1,6 @@
#!/usr/bin/env perl
package Net::Jifty;
use Moose;
-use Net::Jifty::Record;
use LWP::UserAgent;
use HTTP::Request;
@@ -939,150 +938,6 @@
return $user->{email};
}
-=head2 create_model_class Name -> ClassName
-
-Creates a new model class for the given Name.
-
-=cut
-
-sub create_model_class {
- my $self = shift;
- my $model = shift;
-
- my $class = $self->name_model_class($model);
-
- if ($class->can('_net_jifty_model_class_created')) {
- return $class->meta->name;
- }
-
- # retrieve and massage spec from the server..
- my $spec = $self->get_model_spec($model);
- my ($attributes, $methods) = $self->_moosify_columns($spec);
-
- if ($class->can('meta')) {
- $class->meta->make_mutable;
- }
-
- my $meta = Moose::Meta::Class->create(
- $class,
- superclasses => ['Net::Jifty::Record'],
- attributes => $attributes,
- methods => {
- %$methods,
- _net_jifty_model_class_created => sub { 1 },
- },
- );
-
- for my $attribute (@$attributes) {
- my $name = $attribute->name;
- my $reader = $attribute->get_read_method;
- my $writer = $attribute->get_write_method;
-
- next unless $reader && $writer;
-
- $meta->add_after_method_modifier($writer => sub {
- my $self = shift;
- return if @_ == 0; # read
- $self->update($name, $self->$reader);
- });
- }
-
- $meta->add_attribute('+_model_class',
- default => $model,
- );
-
- $meta->make_immutable;
-
- return $meta->name;
-}
-
-sub _moosify_columns {
- my $self = shift;
- my $model_spec = shift;
- my @attributes;
- my %methods;
-
- for my $column (keys %$model_spec) {
- next if $column eq 'id'; # already taken care of
- my $spec = $model_spec->{$column};
- my %opts;
-
- # the key name. this may be different for refers columns
- $opts{init_arg} = $column;
-
- $opts{is} = $spec->{readable} && $spec->{writable} ? 'rw'
- : $spec->{readable} ? 'ro'
- : undef;
- $opts{isa} = $self->_moosify_type($spec->{type});
- delete $opts{isa} if !defined($opts{isa});
-
- $opts{required} = $spec->{mandatory};
-
- if ($spec->{refers_to}) {
- my %refer_opts;
- $spec->{by} ||= 'id';
-
- # end up with column=owner_id and refer_name=owner
- $column =~ s/_id$//;
- my $refer_name = $column;
- $column .= $spec->{by};
-
- $refer_opts{lazy} = 1;
- $refer_opts{isa} = $spec->{refers_to};
- my ($refer_class, $refer_by) = ($opts{isa}, $spec->{by});
-
- $refer_opts{default} = sub {
- my $self = shift;
- my $class = $self->_interface->create_model_class($refer_class);
-
- # get the scalar referral value (probably the numeric ID)
- my $attr = $self->meta->get_attribute($column);
- my $value = $attr->get_read_method_ref->($self);
-
- $class->load($self->_interface, $refer_by, $value);
- };
- push @attributes, Moose::Meta::Attribute->new($refer_name, %refer_opts);
- }
-
- push @attributes, Moose::Meta::Attribute->new($column, %opts);
- }
-
- return (\@attributes, \%methods);
-}
-
-my %types = (
- serial => 'Int',
-);
-
-sub _moosify_type {
- my $self = shift;
- my $type = lc(shift);
-
- return $types{$type} if exists $types{$type};
-
- return 'Int' if $type =~ /int/;
- return 'Str' if $type =~ /char|text/;
- return 'Num' if $type =~ /numeric|decimal|real|double|float/;
- return 'Bool' if $type =~ /bool/;
-
- Carp::carp "Unhandled type: $type";
- return undef;
-}
-
-sub name_model_class {
- my $self = shift;
- my $model = shift;
-
- my ($last) = $model =~ /.*::(.*)/;
- $last = $model if !$last; # no ::
-
- if (blessed($self) eq 'Net::Jifty') {
- return "Net::Jifty::Record::$last";
- }
-
- return blessed($self) . "::$last";
-}
-
=head1 SEE ALSO
L<Jifty>, L<Net::Hiveminder>
More information about the Jifty-commit
mailing list