+sub db {
+ my $string = $_[0];
+ my $lookup = $lxoffice_package_names{$_[0]} ||
+ plurify($lxoffice_package_names{singlify($_[0])});
+
+ for my $thing ($string, $lookup) {
+
+ # best guess? its already the name. like part. camelize it first
+ my $class = "SL::DB::" . camelify($thing);
+ return $class if defined *{ $class. '::' };
+
+ # next, someone wants a manager and pluralized.
+ my $manager = "SL::DB::Manager::" . singlify(camelify($thing));
+ return $manager if defined *{ $manager . '::' };
+ }
+
+ die "Can't resolve '$string' as a database model, sorry. Did you perhaps forgot to load it?";
+}
+
+sub camelify {
+ my ($str) = @_;
+ $str =~ s/_+(.)/uc($1)/ge;
+ ucfirst $str;
+}
+
+sub snakify {
+ my ($str) = @_;
+ $str =~ s/(?<!^)\u(.)/'_' . lc($1)/ge;
+ lcfirst $str;
+}
+
+sub plurify {
+ my ($str) = @_;
+ $str . 's';
+}
+
+sub singlify {
+ my ($str) = @_;
+ local $/ = 's';
+ chomp $str;
+ $str;
+}
+