feat: extract set_fields rule forces Int fields on gff_json merge targets
Glob targets now match via matchPathPattern, so one rule can cover areas/*.are.json. set_fields runs after preserve/merge so the forced value always wins. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -281,6 +281,15 @@ type ExtractGFFJSONMergeRule struct {
|
||||
Target string `json:"target" yaml:"target"`
|
||||
PreserveFields []string `json:"preserve_fields" yaml:"preserve_fields"`
|
||||
MergeLists []ExtractListMergeRule `json:"merge_lists" yaml:"merge_lists"`
|
||||
SetFields []ExtractSetFieldRule `json:"set_fields" yaml:"set_fields"`
|
||||
}
|
||||
|
||||
// ExtractSetFieldRule forces an Int field to a fixed value on every extract,
|
||||
// overriding whatever the toolset saved. Fields absent from the extracted
|
||||
// document are left absent.
|
||||
type ExtractSetFieldRule struct {
|
||||
Field string `json:"field" yaml:"field"`
|
||||
Value int32 `json:"value" yaml:"value"`
|
||||
}
|
||||
|
||||
type ExtractListMergeRule struct {
|
||||
@@ -980,6 +989,12 @@ func validateExtractMergeConfig(config ExtractMergeConfig) []error {
|
||||
seenTargets[normalized] = struct{}{}
|
||||
}
|
||||
|
||||
for setIndex, setRule := range rule.SetFields {
|
||||
if strings.TrimSpace(setRule.Field) == "" {
|
||||
failures = append(failures, fmt.Errorf("%s.set_fields[%d].field must not be empty", prefix, setIndex))
|
||||
}
|
||||
}
|
||||
|
||||
for listIndex, listRule := range rule.MergeLists {
|
||||
listPrefix := fmt.Sprintf("%s.merge_lists[%d]", prefix, listIndex)
|
||||
if strings.TrimSpace(listRule.Field) == "" {
|
||||
@@ -1346,6 +1361,9 @@ func normalizeConfig(cfg *Config) {
|
||||
}
|
||||
cfg.Extract.Merge.GFFJSON[i].Target = target
|
||||
cfg.Extract.Merge.GFFJSON[i].PreserveFields = normalizeStringSlice(cfg.Extract.Merge.GFFJSON[i].PreserveFields)
|
||||
for j := range cfg.Extract.Merge.GFFJSON[i].SetFields {
|
||||
cfg.Extract.Merge.GFFJSON[i].SetFields[j].Field = strings.TrimSpace(cfg.Extract.Merge.GFFJSON[i].SetFields[j].Field)
|
||||
}
|
||||
for j := range cfg.Extract.Merge.GFFJSON[i].MergeLists {
|
||||
cfg.Extract.Merge.GFFJSON[i].MergeLists[j].Field = strings.TrimSpace(cfg.Extract.Merge.GFFJSON[i].MergeLists[j].Field)
|
||||
cfg.Extract.Merge.GFFJSON[i].MergeLists[j].KeyField = strings.TrimSpace(cfg.Extract.Merge.GFFJSON[i].MergeLists[j].KeyField)
|
||||
|
||||
Reference in New Issue
Block a user