From 15ce2c033afca22c431fc7a6f1c2bfc790c560d6 Mon Sep 17 00:00:00 2001 From: windyboy Date: Wed, 7 Aug 2024 17:05:42 +0800 Subject: [PATCH] refactor: Update aviation_parser.go to remove unused code and update constants --- internal/parsers/aviation_parser.go | 41 +++++++++++------------- internal/parsers/aviation_parser_test.go | 19 +++++++++++ internal/parsers/constants.go | 3 +- 3 files changed, 40 insertions(+), 23 deletions(-) diff --git a/internal/parsers/aviation_parser.go b/internal/parsers/aviation_parser.go index 0d0f074..efa1c21 100644 --- a/internal/parsers/aviation_parser.go +++ b/internal/parsers/aviation_parser.go @@ -47,6 +47,7 @@ var ( pbnPattern, eetPattern, performancePattern, + regPattern, reroutePattern} ) @@ -63,40 +64,36 @@ func NewBodyParser(body string) *BodyParser { } } -func (bp *BodyParser) GetBodyPatterns() map[string]BodyConfig { - bp.mu.Lock() - defer bp.mu.Unlock() - return bp.bodyPatterns +func (parser *BodyParser) GetBodyPatterns() map[string]BodyConfig { + parser.mu.Lock() + defer parser.mu.Unlock() + return parser.bodyPatterns } -func (bp *BodyParser) SetBodyPatterns(patterns map[string]BodyConfig) { - bp.mu.Lock() - defer bp.mu.Unlock() - bp.bodyPatterns = patterns +func (parser *BodyParser) SetBodyPatterns(patterns map[string]BodyConfig) { + parser.mu.Lock() + defer parser.mu.Unlock() + parser.bodyPatterns = patterns } -func (bp *BodyParser) Parse() (string, interface{}, error) { - bp.mu.Lock() - defer bp.mu.Unlock() +func (parser *BodyParser) Parse() (string, interface{}, error) { + parser.mu.Lock() + defer parser.mu.Unlock() - bp.body = strings.TrimSpace(bp.body) - category := findCategory(bp.body) + parser.body = strings.TrimSpace(parser.body) + category := findCategory(parser.body) if category == "" { return "", nil, fmt.Errorf("no category found in body text") } - if patternConfig, exists := bp.bodyPatterns[category]; exists && patternConfig.Patterns != nil { + if patternConfig, exists := parser.bodyPatterns[category]; exists && patternConfig.Patterns != nil { for _, p := range patternConfig.Patterns { - // if match := p.Expression.FindStringSubmatch(bp.body); match != nil { - // data := extractData(match, p.Expression) - // return bp.createBodyData(data) - // } - if data := extract(bp.body, p.Expression); data != nil { - return bp.createBodyData(data) + if data := extract(parser.body, p.Expression); data != nil { + return parser.createBodyData(data) } } } - return "", nil, fmt.Errorf("no matching pattern found for body: %s", bp.body) + return "", nil, fmt.Errorf("no matching pattern found for body: %s", parser.body) } func findCategory(body string) string { @@ -128,7 +125,7 @@ func extractData(match []string, re *regexp.Regexp) map[string]string { return data } -func (bp *BodyParser) createBodyData(data map[string]string) (string, interface{}, error) { +func (parser *BodyParser) createBodyData(data map[string]string) (string, interface{}, error) { switch category := data["category"]; category { case CategoryArrival: return category, &domain.ARR{ diff --git a/internal/parsers/aviation_parser_test.go b/internal/parsers/aviation_parser_test.go index 9bbad93..89abd1f 100644 --- a/internal/parsers/aviation_parser_test.go +++ b/internal/parsers/aviation_parser_test.go @@ -99,6 +99,25 @@ NNNN` }) + Describe("Other Info", func() { + Context("PBN/A1B2B3B4B5D1L1 NAV/ABAS REG/B6513 EET/ZBPE0112 SEL/KMAL PER/C RIF/FRT N640 ZBYN RMK/TCAS EQUIPPED", func() { + It("should parse the other info correctly", func() { + otherInfo := "PBN/A1B2B3B4B5D1L1 NAV/ABAS REG/B6513 EET/ZBPE0112 SEL/KMAL PER/C RIF/FRT N640 ZBYN RMK/TCAS EQUIPPED" + parsed := parseOther(otherInfo) + Expect(parsed).ToNot(BeNil()) + Expect(parsed[PBN]).To(Equal("A1B2B3B4B5D1L1")) + Expect(parsed[NavigationEquipment]).To(Equal("ABAS")) + Expect(parsed[Register]).To(Equal("B6513")) + Expect(parsed[EstimatedElapsedTime]).To(Equal("ZBPE0112")) + Expect(parsed[SELCALCode]).To(Equal("KMAL")) + Expect(parsed[PerformanceCategory]).To(Equal("C")) + Expect(parsed[RerouteInformation]).To(Equal("FRT N640 ZBYN")) + Expect(parsed[Remarks]).To(Equal("TCAS EQUIPPED")) + }) + }) + + }) + Describe("ParseBody", func() { Context("with ARR body (ARR-CES5470-ZBTJ-ZSHC1614)", func() { diff --git a/internal/parsers/constants.go b/internal/parsers/constants.go index 6ce0063..86e18eb 100644 --- a/internal/parsers/constants.go +++ b/internal/parsers/constants.go @@ -61,9 +61,10 @@ var ( emptyLineRemove = regexp.MustCompile(`(?m)^\s*$`) bodyOnly = regexp.MustCompile(`(.|\n)?(ZCZC(.|\n)*)NNNN(.|\n)?$`) originator = regexp.MustCompile(`(?P[0-9]+)\s(?P[A-Z]+)`) - navPattern = regexp.MustCompile(`(?m)NAV\/(?P