snakeCapitalCaseConversion function
default naming conversion function
This default function use snake lower case for SQL naming while follow Dart capital case.
Implementation
String snakeCapitalCaseConversion(String name, [bool toSQL = true]) {
if (toSQL) {
final buffer = StringBuffer();
final ucodes = name.codeUnits;
for (var i = 0; i < ucodes.length; i++) {
if (ucodes[i] == 95) {
// underscore _, first one is ignored
if (i == 0) continue;
buffer.writeCharCode(ucodes[i]);
} else if ((96 < ucodes[i] && ucodes[i] < 123) ||
(47 < ucodes[i] && ucodes[i] < 58)) {
// a-z 0-9
buffer.writeCharCode(ucodes[i]);
} else if (64 < ucodes[i] && ucodes[i] < 91) {
// underscore _
if (i > 0) buffer.writeCharCode(95);
// A-Z -> a-z
buffer.writeCharCode(ucodes[i] + 32);
} else {
throw Exception('Invalid dart identifier $name.');
}
}
return buffer.toString();
} else if (name.contains('_')) {
final buffer = StringBuffer();
var index = 0, start = 0;
while ((index = name.indexOf('_', start)) != -1) {
if (buffer.isEmpty) {
buffer.write(name.substring(start, index));
} else {
buffer.write(name[start].toUpperCase());
buffer.write(name.substring(++start, index));
}
start = index + 1;
}
if (start < name.length) {
buffer.write(name[start].toUpperCase());
buffer.write(name.substring(++start));
}
return buffer.toString();
} else {
return name;
}
}