How to name Result classes.
+=item column_accessors
+
+How to name column accessors in Result classes.
+
=back
The values can be:
CamelCase column names in case-preserving mode will also be handled correctly
for relationship name inflection. See L</preserve_case>.
+In this mode, CamelCase L</column_accessors> are normalized based on case
+transition instead of just being lowercased, so C<FooId> becomes C<foo_id>.
+
If you don't have any CamelCase table or column names, you can upgrade without
breaking any of your code.
$self->{naming} = {
relationships => $naming_ver,
monikers => $naming_ver,
+ column_accessors => $naming_ver,
};
}
last;
}
- $self->naming->{relationships} ||= $v;
- $self->naming->{monikers} ||= $v;
+ $self->naming->{relationships} ||= $v;
+ $self->naming->{monikers} ||= $v;
+ $self->naming->{column_accessors} ||= $v;
$self->schema_version_to_dump($real_ver);
}
}
+sub _make_column_accessor_name {
+ my ($self, $column_name) = @_;
+
+ return join '_', map lc, split /(?<=[[:lower:]])[\W_]*(?=[[:upper:]])|[\W_]+/, $column_name;
+}
+
# Set up metadata (cols, pks, etc)
sub _setup_src_meta {
my ($self, $table) = @_;
my $col_info = $self->__columns_info_for($table);
if ($self->preserve_case) {
for my $col (keys %$col_info) {
- $col_info->{$col}{accessor} = lc $col
- if $col ne lc($col);
+ if ($col ne lc($col)) {
+ if ((not exists $self->naming->{column_accessors}) || (($self->naming->{column_accessors} =~ /(\d+)/)[0] >= 7)) {
+ $col_info->{$col}{accessor} = $self->_make_column_accessor_name($col);
+ }
+ else {
+ $col_info->{$col}{accessor} = lc $col;
+ }
+ }
}
}
else {
isa_ok eval { $foo->email_to_ids }, 'DBIx::Class::ResultSet',
'correct rel name inflection in 0.04006 mode';
+
+ ok (($schema->resultset('Routechange')->find(1)->can('quuxsid')),
+ 'correct column accessor in 0.04006 mode');
}
sub run_v5_tests {
isa_ok eval { $foo->email_to_ids }, 'DBIx::Class::ResultSet',
'correct rel name inflection in v5 mode';
+
+ ok (($schema->resultset('Routechange')->find(1)->can('quuxsid')),
+ 'correct column accessor in v5 mode');
}
sub run_v6_tests {
isa_ok eval { $route_change->quuxsid }, $res->{classes}{quuxs},
'correct rel name in v6 mode';
+
+ ok (($schema->resultset('Routechange')->find(1)->can('quuxsid')),
+ 'correct column accessor in v6 mode');
}
sub run_v7_tests {
isa_ok eval { $route_change->quux }, $res->{classes}{quuxs},
'correct rel name based on mixed-case column name in current mode';
+
+ ok (($schema->resultset('RouteChange')->find(1)->can('quuxs_id')),
+ 'correct column accessor in current mode');
}
{