Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 5a7ae14c

Von Sven Schöling vor mehr als 11 Jahren hinzugefügt

  • ID 5a7ae14c769710c1de947b115cf2cd0c38d3df7e
  • Vorgänger 26dcea15
  • Nachfolger ff6cd9b7

CustomVariables: modules nicht mehr zur Compilezeit inferieren

Um module zu inferieren müssen die Zielobjekte bekannt sein, das kann aber zu
zirkulären Includes mitten im RDBO initialize führen.

Nachlagern geht auch nicht, weil die Daten für relationships benötigt werden.

Ohne also die Relationships tief ins RDBO auto_foreign_key Modell zu hacken,
ist das Inferieren nicht möglich, deshalb erstmal manuell konfigurieren.

Unterschiede anzeigen:

SL/DB/DeliveryOrderItem.pm
sub_module => 'delivery_order_item',
cvars_alias => 1,
overloads => {
parts_id => 'SL::DB::Part',
parts_id => {
class => 'SL::DB::Part',
module => 'IC',
}
},
);
SL/DB/Helper/CustomVariables.pm
use Carp;
use Data::Dumper;
use List::Util qw(first);
use SL::DB::CustomVariableConfig;
use constant META_CVARS => 'cvars_config';
......
sub _all_configs {
my (%params) = @_;
require SL::DB::CustomVariableConfig;
$params{module}
? SL::DB::Manager::CustomVariableConfig->get_all(query => [ module => $params{module} ])
: SL::DB::Manager::CustomVariableConfig->get_all;
......
my ($module, %params) = @_;
keys %{ $params{overloads} }; # reset each iterator
while (my ($fk, $class) = each %{ $params{overloads} }) {
return ($fk, $class) if $class->meta->{META_CVARS()}->{module} eq $module;
while (my ($fk, $def) = each %{ $params{overloads} }) {
return ($fk, $def->{class}) if $def->{module} eq $module;
}
croak "unknown overload, cannot resolve module $module";
......
my (%params) = @_;
my %modules;
while (my ($fk, $class) = each %{ $params{overloads} }) {
eval "require $class"; # make sure the class is loaded
my $module = $class->meta->{META_CVARS()}->{module};
next if ref $module;
$modules{$module} = 1;
for my $def (values %{ $params{overloads} || {} }) {
$modules{$def->{module}} = 1;
}
return [ keys %modules ];
......
sub_module => 'orderitems',
cvars_alias => 1,
overloads => {
parts_id => 'SL::DB::Part',
parts_id => {
class => 'SL::DB::Part',
module => 'IC',
}
}
);
SL/DB/InvoiceItem.pm
sub_module => 'invoice',
cvars_alias => 1,
overloads => {
parts_id => 'SL::DB::Part',
parts_id => {
class => 'SL::DB::Part',
module => 'IC',
},
},
);
SL/DB/OrderItem.pm
sub_module => 'orderitems',
cvars_alias => 1,
overloads => {
parts_id => 'SL::DB::Part',
parts_id => {
class => 'SL::DB::Part',
module => 'IC',
}
},
);

Auch abrufbar als: Unified diff