Skip to content

Commit

Permalink
feat: Added the possibility of setting "adapter" to RefParam.
Browse files Browse the repository at this point in the history
  • Loading branch information
mathrunet committed Apr 5, 2024
1 parent 1e412fc commit 998c46c
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 66 deletions.
6 changes: 3 additions & 3 deletions packages/masamune_builder/lib/model/document_model_class.dart
Original file line number Diff line number Diff line change
Expand Up @@ -210,11 +210,11 @@ List<Spec> documentModelClass(
}
switch (e.reference!.type) {
case ReferenceValueType.single:
return "ModelRefBuilder( modelRef: (value) => value.${e.name}, document: (modelQuery) => $doc(modelQuery), value: (value, doc) => value.copyWith( ${e.name}: doc ), adapter: $doc.defaultModelAdapter, accessQuery: $doc.defaultModelAccessQuery, validationQueries: $doc.defaultValidationQueries, )";
return "ModelRefBuilder( modelRef: (value) => value.${e.name}, document: (modelQuery) => $doc(modelQuery), value: (value, doc) => value.copyWith( ${e.name}: doc ), adapter: ${e.reference?.adapter.isNotEmpty ?? false ? e.reference?.adapter : "$doc.defaultModelAdapter"}, accessQuery: $doc.defaultModelAccessQuery, validationQueries: $doc.defaultValidationQueries, )";
case ReferenceValueType.list:
return "ModelRefListBuilder( modelRef: (value) => value.${e.name}, document: (modelQuery) => $doc(modelQuery), value: (value, docs) => value.copyWith( ${e.name}: docs ), adapter: $doc.defaultModelAdapter, accessQuery: $doc.defaultModelAccessQuery, validationQueries: $doc.defaultValidationQueries, )";
return "ModelRefListBuilder( modelRef: (value) => value.${e.name}, document: (modelQuery) => $doc(modelQuery), value: (value, docs) => value.copyWith( ${e.name}: docs ), adapter: ${e.reference?.adapter.isNotEmpty ?? false ? e.reference?.adapter : "$doc.defaultModelAdapter"}, accessQuery: $doc.defaultModelAccessQuery, validationQueries: $doc.defaultValidationQueries, )";
case ReferenceValueType.map:
return "ModelRefMapBuilder( modelRef: (value) => value.${e.name}, document: (modelQuery) => $doc(modelQuery), value: (value, docs) => value.copyWith( ${e.name}: docs ), adapter: $doc.defaultModelAdapter, accessQuery: $doc.defaultModelAccessQuery, validationQueries: $doc.defaultValidationQueries, )";
return "ModelRefMapBuilder( modelRef: (value) => value.${e.name}, document: (modelQuery) => $doc(modelQuery), value: (value, docs) => value.copyWith( ${e.name}: docs ), adapter: ${e.reference?.adapter.isNotEmpty ?? false ? e.reference?.adapter : "$doc.defaultModelAdapter"}, accessQuery: $doc.defaultModelAccessQuery, validationQueries: $doc.defaultValidationQueries, )";
}
}).join(",")}]"),
),
Expand Down
37 changes: 30 additions & 7 deletions packages/masamune_builder/lib/value/parameter_value.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,37 @@ class ParamaterValue {
required = element.isRequired;
isSearchable = _searchParamChecker.hasAnnotationOfExact(element);
if (_refParamChecker.hasAnnotationOfExact(element)) {
String? res;
for (final item in element.metadata) {
final match = _refParamRegExp.firstMatch(item.toSource());
if (match != null) {
res = match.group(1);
break;
String? referenceDoc;
String? referenceAdapter;
for (final meta in element.metadata) {
final source = meta.toSource();
final refParamMatch = _refParamRegExp.firstMatch(source);
if (refParamMatch != null) {
final adapterMatch = _adapterRegExp.firstMatch(source);
referenceDoc = refParamMatch
.group(1)
?.replaceAll(adapterMatch?.group(0) ?? "", "")
.trim()
.trimString(",")
.trim();
}
final adapterMatch = _adapterRegExp.firstMatch(source);
if (adapterMatch != null) {
final match = adapterMatch.group(1)?.trim().trimString(",").trim();
if (match.isNotEmpty) {
referenceAdapter = match!.trimString("'").trimString('"');
} else {
referenceAdapter = null;
}
}
}
final referenceDoc = res?.trim();
final referenceType = type.typeArguments.first;
final referenceValue = referenceType.toString();
if (referenceDoc.isNotEmpty && referenceValue.isNotEmpty) {
reference = ReferenceValue(
valueType: referenceValue,
documentType: referenceDoc!,
adapter: referenceAdapter,
type: type.isDartCoreList
? ReferenceValueType.list
: type.isDartCoreMap
Expand Down Expand Up @@ -70,6 +86,7 @@ class ParamaterValue {
}
}
static final _refParamRegExp = RegExp(r"^@RefParam\((.+)\)$");
static final _adapterRegExp = RegExp(r"adapter\s*:\s*([^,\)]+),?");

/// Parameter Element.
///
Expand Down Expand Up @@ -128,6 +145,7 @@ class ReferenceValue {
required this.valueType,
required this.documentType,
required this.type,
this.adapter,
});

/// Value Type.
Expand All @@ -145,6 +163,11 @@ class ReferenceValue {
/// 値のタイプ。
final ReferenceValueType type;

/// Model adapter.
///
/// モデルアダプター。
final String? adapter;

@override
String toString() {
return "$valueType($documentType, $type)";
Expand Down

0 comments on commit 998c46c

Please sign in to comment.