refactor: move filters out of parser
Filters are now separate structures to include a product or not based on their own set of properties. For now, include and exclude filters are supported. They take a regex as an argument and include a product if the regex matches (or doesn't match) the product name. This commit will allow us to create new filters on product like on a price range. Signed-off-by: Julien Riou <julien@riou.xyz>
This commit is contained in:
parent
b6feb2d656
commit
244c9f68e7
10 changed files with 212 additions and 206 deletions
40
parser.go
40
parser.go
|
@ -1,48 +1,8 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
|
||||
log "github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
// Parser interface to parse an external service and return a list of products
|
||||
type Parser interface {
|
||||
Parse() ([]*Product, error)
|
||||
String() string
|
||||
ShopName() (string, error)
|
||||
}
|
||||
|
||||
// filterInclusive returns a list of products matching the include regex
|
||||
func filterInclusive(includeRegex *regexp.Regexp, products []*Product) []*Product {
|
||||
var filtered []*Product
|
||||
if includeRegex != nil {
|
||||
for _, product := range products {
|
||||
if includeRegex.MatchString(product.Name) {
|
||||
log.Debugf("product %s included because it matches the include regex", product.Name)
|
||||
filtered = append(filtered, product)
|
||||
} else {
|
||||
log.Debugf("product %s excluded because it does not match the include regex", product.Name)
|
||||
}
|
||||
}
|
||||
return filtered
|
||||
}
|
||||
return products
|
||||
}
|
||||
|
||||
// filterExclusive returns a list of products that don't match the exclude regex
|
||||
func filterExclusive(excludeRegex *regexp.Regexp, products []*Product) []*Product {
|
||||
var filtered []*Product
|
||||
if excludeRegex != nil {
|
||||
for _, product := range products {
|
||||
if excludeRegex.MatchString(product.Name) {
|
||||
log.Debugf("product %s excluded because it matches the exclude regex", product.Name)
|
||||
} else {
|
||||
log.Debugf("product %s included because it does not match the exclude regex", product.Name)
|
||||
filtered = append(filtered, product)
|
||||
}
|
||||
}
|
||||
return filtered
|
||||
}
|
||||
return products
|
||||
}
|
||||
|
|
Reference in a new issue