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/Helper/CustomVariables.pm
4 4
use Carp;
5 5
use Data::Dumper;
6 6
use List::Util qw(first);
7
use SL::DB::CustomVariableConfig;
8 7

  
9 8
use constant META_CVARS => 'cvars_config';
10 9

  
......
113 112

  
114 113
sub _all_configs {
115 114
  my (%params) = @_;
115

  
116
  require SL::DB::CustomVariableConfig;
117

  
116 118
  $params{module}
117 119
    ? SL::DB::Manager::CustomVariableConfig->get_all(query => [ module => $params{module} ])
118 120
    : SL::DB::Manager::CustomVariableConfig->get_all;
......
122 124
  my ($module, %params) = @_;
123 125

  
124 126
  keys %{ $params{overloads} }; # reset each iterator
125
  while (my ($fk, $class) = each %{ $params{overloads} }) {
126
    return ($fk, $class) if $class->meta->{META_CVARS()}->{module} eq $module;
127
  while (my ($fk, $def) = each %{ $params{overloads} }) {
128
    return ($fk, $def->{class}) if $def->{module} eq $module;
127 129
  }
128 130

  
129 131
  croak "unknown overload, cannot resolve module $module";
......
155 157
  my (%params) = @_;
156 158
  my %modules;
157 159

  
158
  while (my ($fk, $class) = each %{ $params{overloads} }) {
159
    eval "require $class"; # make sure the class is loaded
160
    my $module = $class->meta->{META_CVARS()}->{module};
161
    next if ref $module;
162
    $modules{$module} = 1;
160
  for my $def (values %{ $params{overloads} || {} }) {
161
    $modules{$def->{module}} = 1;
163 162
  }
164 163

  
165 164
  return [ keys %modules ];
......
200 199
    sub_module  => 'orderitems',
201 200
    cvars_alias => 1,
202 201
    overloads   => {
203
      parts_id    => 'SL::DB::Part',
202
      parts_id    => {
203
        class => 'SL::DB::Part',
204
        module => 'IC',
205
      }
204 206
    }
205 207
  );
206 208

  

Auch abrufbar als: Unified diff