--- bin/ldap2model.pl 2008/04/30 21:27:54 98 +++ bin/ldap2model.pl 2008/04/30 23:44:43 99 @@ -5,8 +5,11 @@ # schema2model.pl - convert LDAP schema file into jifty model # # 04/30/08 20:55:21 CEST Dobrica Pavlinusic +# +# ./bin/ldap2model.pl data/all.ldif hrEduOrg use Net::LDAP::Schema; +use File::Slurp; use Data::Dump qw/dump/; my ( $path, $objectClass ) = @ARGV; @@ -16,9 +19,25 @@ my $schema = Net::LDAP::Schema->new; $schema->parse ( $path ) or die $schema->error; +die "$objectClass objectClass not found in $path\n" unless $schema->objectclass( $objectClass ); + +my $model = qq/package A3C::Model::$objectClass; +use strict; +use warnings; + +use Jifty::DBI::Schema; + +use A3C::Record schema { + +/; + +my $methods; + sub entry { my ( $e, $add ) = @_; - my $out = qq/\tcolumn $_->{name} =>\n\t\tlabel is _('$_->{desc}')/; + my $name = $_->{name} || die "no name?"; + $methods .= qq/sub $_ { \$_[0]->$name }\n/ foreach @{$_->{aliases}}; + my $out = qq/\tcolumn $name =>\n\t\tlabel is _('$_->{desc}')/; $out .= qq/,\n\t\t# single-value/ if $_->{'single-value'}; $out .= qq/,\n\t\tmax_length is $_->{max_length}/ if $_->{'max_length'}; $out .= qq/,\n\t\t$add/ if $add; @@ -26,7 +45,7 @@ return $out; } -my $model = qq/\t# $objectClass super: / . join(' ', $schema->superclass($objectClass)). qq/\n\n/; +$model .= qq/\t# $objectClass super: / . join(' ', $schema->superclass($objectClass)). qq/\n\n/ if $schema->superclass($objectClass); $model .= qq/\t# $objectClass must:\n\n/; @@ -42,4 +61,17 @@ $model .= entry( $_ ); } $schema->may( $objectClass ); -print $model; +$model .= qq/ + +}; + +$methods + +use A3C::DefaultACL; + +1; +/; + +my $model_path = "lib/A3C/Model/$objectClass.pm"; +write_file( $model_path, $model ); +warn "Created $model_path\n";