sub make_cvar_accessor {
my ($caller_package, %params) = @_;
- my @module_filter = $params{module} ?
- ("config_id" => [ \"(SELECT custom_variable_configs.id FROM custom_variable_configs WHERE custom_variable_configs.module = '$params{module}')" ]) :
+ my $modules = ('ARRAY' eq ref $params{module}) ?
+ join ',', @{ $params{module} } :
+ $params{module};
+ my @module_filter = $modules ?
+ ("config_id" => [ \"(SELECT custom_variable_configs.id FROM custom_variable_configs WHERE custom_variable_configs.module IN ( '$modules' ))" ]) : # " make emacs happy
();
$caller_package->meta->add_relationships(
my $cvars = $self->custom_variables;
my %cvars_by_config = map { $_->config_id => $_ } @$cvars;
- my @return = map { $cvars_by_config{$_->id} || _new_cvar($self, %params, config => $_) } @$configs;
+ my @return = map(
+ {
+ if ( $cvars_by_config{$_->id} ) {
+ $cvars_by_config{$_->id};
+ }
+ else {
+ my $cvar = _new_cvar($self, %params, config => $_);
+ $self->add_custom_variables($cvar);
+ $cvar;
+ }
+ }
+ @$configs
+ );
return \@return;
}