Skip to content

Commit

Permalink
ref(filter): rename refine pkg to filter (#155)
Browse files Browse the repository at this point in the history
  • Loading branch information
plastikfan committed Sep 3, 2024
1 parent 1fdbb41 commit 9dedd41
Show file tree
Hide file tree
Showing 26 changed files with 276 additions and 251 deletions.
4 changes: 2 additions & 2 deletions director.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package tv
import (
"io/fs"

"github.com/snivilised/traverse/internal/feat/filter"
"github.com/snivilised/traverse/internal/feat/hiber"
"github.com/snivilised/traverse/internal/feat/refine"
"github.com/snivilised/traverse/internal/feat/resume"
"github.com/snivilised/traverse/internal/feat/sampling"
"github.com/snivilised/traverse/internal/kernel"
Expand All @@ -29,7 +29,7 @@ func features(o *pref.Options, mediator types.Mediator,
// order. How can we decouple ourselves from this
// requirement? => the cure is worse than the disease
//
hiber.IfActive, refine.IfActive, sampling.IfActive,
hiber.IfActive, filter.IfActive, sampling.IfActive,
}
)

Expand Down
48 changes: 48 additions & 0 deletions internal/feat/filter/base.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package filter

import (
"github.com/snivilised/traverse/core"
"github.com/snivilised/traverse/enums"
"github.com/snivilised/traverse/internal/third/lo"
)

// Base Filter ================================================================

// Base base filter struct.
type Base struct {
name string
pattern string
scope enums.FilterScope // defines which file system nodes the filter should be applied to
negate bool // select to define a negative match
ifNotApplicable bool
}

// Description description of the filter
func (f *Base) Description() string {
return f.name
}

// Source text defining the filter
func (f *Base) Source() string {
return f.pattern
}

func (f *Base) IsApplicable(node *core.Node) bool {
return (f.scope & node.Extension.Scope) > 0
}

func (f *Base) Scope() enums.FilterScope {
return f.scope
}

func (f *Base) invert(result bool) bool {
return lo.Ternary(f.negate, !result, result)
}

func (f *Base) Validate() error {
if f.scope == enums.ScopeUndefined {
f.scope = enums.ScopeAll
}

return nil
}
30 changes: 30 additions & 0 deletions internal/feat/filter/child.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package filter

import (
"github.com/snivilised/traverse/internal/third/lo"
)

// Child Filter ===============================================================

// Child filter used when subscription is FoldersWithFiles
type Child struct {
Name string
Pattern string
Negate bool
}

func (f *Child) Description() string {
return f.Name
}

func (f *Child) Validate() error {
return nil
}

func (f *Child) Source() string {
return f.Pattern
}

func (f *Child) invert(result bool) bool {
return lo.Ternary(f.Negate, !result, result)
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package refine
package filter

import (
"io/fs"
Expand All @@ -10,7 +10,7 @@ import (
)

type ExtendedGlobFilter struct {
Filter
Base
baseGlob string
suffixes []string
anyExtension bool
Expand Down Expand Up @@ -75,7 +75,7 @@ func (f *ExtendedGlobFilter) IsMatch(node *core.Node) bool {
// ChildExtendedGlobFilter ==========================================================

type ChildExtendedGlobFilter struct {
ChildFilter
Child
baseGlob string
exclusion string
suffixes []string
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package refine
package filter

// 📦 pkg: refine - defines filters
// 📦 pkg: filter - defines filters

import (
"github.com/snivilised/traverse/core"
Expand Down
6 changes: 3 additions & 3 deletions internal/feat/refine/glob.go → internal/feat/filter/glob.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package refine
package filter

import (
"io/fs"
Expand All @@ -10,7 +10,7 @@ import (

// GlobFilter wildcard filter.
type GlobFilter struct {
Filter
Base
}

// IsMatch does this node match the filter
Expand All @@ -26,7 +26,7 @@ func (f *GlobFilter) IsMatch(node *core.Node) bool {
// ChildGlobFilter ============================================================

type ChildGlobFilter struct {
ChildFilter
Child
}

// Matching returns the collection of files contained within this
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package refine
package filter

import (
"slices"
Expand Down Expand Up @@ -56,7 +56,7 @@ func newNodeFilter(def *core.FilterDef,
base, exclusion := splitGlob(segments[0])

filter = &ExtendedGlobFilter{
Filter: Filter{
Base: Base{
name: def.Description,
scope: def.Scope,
pattern: def.Pattern,
Expand All @@ -73,7 +73,7 @@ func newNodeFilter(def *core.FilterDef,

case enums.FilterTypeRegex:
filter = &RegexFilter{
Filter: Filter{
Base: Base{
name: def.Description,
scope: def.Scope,
pattern: def.Pattern,
Expand All @@ -84,7 +84,7 @@ func newNodeFilter(def *core.FilterDef,

case enums.FilterTypeGlob:
filter = &GlobFilter{
Filter: Filter{
Base: Base{
name: def.Description,
scope: def.Scope,
pattern: def.Pattern,
Expand Down Expand Up @@ -186,7 +186,7 @@ func newChildFilter(def *core.ChildFilterDef) (core.ChildTraverseFilter, error)
base, exclusion := splitGlob(segments[0])

filter = &ChildExtendedGlobFilter{
ChildFilter: ChildFilter{
Child: Child{
Name: def.Description,
Pattern: def.Pattern,
Negate: def.Negate,
Expand All @@ -201,7 +201,7 @@ func newChildFilter(def *core.ChildFilterDef) (core.ChildTraverseFilter, error)

case enums.FilterTypeRegex:
filter = &ChildRegexFilter{
ChildFilter: ChildFilter{
Child: Child{
Name: def.Description,
Pattern: def.Pattern,
Negate: def.Negate,
Expand All @@ -210,7 +210,7 @@ func newChildFilter(def *core.ChildFilterDef) (core.ChildTraverseFilter, error)

case enums.FilterTypeGlob:
filter = &ChildGlobFilter{
ChildFilter: ChildFilter{
Child: Child{
Name: def.Description,
Pattern: def.Pattern,
Negate: def.Negate,
Expand Down Expand Up @@ -247,7 +247,7 @@ func newSampleFilter(def *core.SampleFilterDef,
}

base := SampleFilter{
Filter: Filter{
Base: Base{
name: def.Description,
scope: def.Scope.Scrub(),
pattern: def.Pattern,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package refine
package filter

import (
"fmt"
Expand Down
10 changes: 5 additions & 5 deletions internal/feat/refine/regex.go → internal/feat/filter/regex.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package refine
package filter

import (
"io/fs"
Expand All @@ -12,13 +12,13 @@ import (

// RegexFilter regex filter.
type RegexFilter struct {
Filter
Base
rex *regexp.Regexp
}

// Validate ensures the filter definition is valid, panics when invalid
func (f *RegexFilter) Validate() error {
if err := f.Filter.Validate(); err != nil {
if err := f.Base.Validate(); err != nil {
return err
}

Expand All @@ -42,7 +42,7 @@ func (f *RegexFilter) IsMatch(node *core.Node) bool {
// ChildRegexFilter ===========================================================

type ChildRegexFilter struct {
ChildFilter
Child
rex *regexp.Regexp
}

Expand Down Expand Up @@ -76,7 +76,7 @@ type SampleRegexFilter struct {

// Validate ensures the filter definition is valid, panics when invalid
func (f *SampleRegexFilter) Validate() error {
if err := f.Filter.Validate(); err != nil {
if err := f.Base.Validate(); err != nil {
return err
}

Expand Down
73 changes: 3 additions & 70 deletions internal/feat/refine/base.go → internal/feat/filter/sample.go
Original file line number Diff line number Diff line change
@@ -1,94 +1,27 @@
package refine
package filter

import (
"io/fs"

"github.com/snivilised/traverse/core"
"github.com/snivilised/traverse/enums"
"github.com/snivilised/traverse/internal/third/lo"
"github.com/snivilised/traverse/nfs"
)

// Filter =====================================================================

// Filter base filter struct.
type Filter struct {
name string
pattern string
scope enums.FilterScope // defines which file system nodes the filter should be applied to
negate bool // select to define a negative match
ifNotApplicable bool
}

// Description description of the filter
func (f *Filter) Description() string {
return f.name
}

// Source text defining the filter
func (f *Filter) Source() string {
return f.pattern
}

func (f *Filter) IsApplicable(node *core.Node) bool {
return (f.scope & node.Extension.Scope) > 0
}

func (f *Filter) Scope() enums.FilterScope {
return f.scope
}

func (f *Filter) invert(result bool) bool {
return lo.Ternary(f.negate, !result, result)
}

func (f *Filter) Validate() error {
if f.scope == enums.ScopeUndefined {
f.scope = enums.ScopeAll
}

return nil
}

// ChildFilter ================================================================

// ChildFilter filter used when subscription is FoldersWithFiles
type ChildFilter struct {
Name string
Pattern string
Negate bool
}

func (f *ChildFilter) Description() string {
return f.Name
}

func (f *ChildFilter) Validate() error {
return nil
}

func (f *ChildFilter) Source() string {
return f.Pattern
}

func (f *ChildFilter) invert(result bool) bool {
return lo.Ternary(f.Negate, !result, result)
}

// BaseSampleFilter ===========================================================
type (
candidates func(entries []fs.DirEntry) (wanted, others []fs.DirEntry)
)

type SampleFilter struct {
Filter
Base
}

// NewSampleFilter only needs to be called explicitly when defining
// a custom sample filter.
func NewSampleFilter(scope enums.FilterScope) SampleFilter {
return SampleFilter{
Filter: Filter{
Base: Base{
scope: scope,
},
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package refine
package filter

import (
"io/fs"

"github.com/snivilised/traverse/core"
"github.com/snivilised/traverse/enums"
"github.com/snivilised/traverse/internal/filtering"
"github.com/snivilised/traverse/internal/measure"
"github.com/snivilised/traverse/internal/third/lo"
"github.com/snivilised/traverse/internal/types"
Expand Down Expand Up @@ -66,7 +67,7 @@ type nativeScheme struct {
}

func (f *nativeScheme) create() error {
filter, err := newNodeFilter(f.o.Filter.Node, &f.o.Filter)
filter, err := filtering.NewNodeFilter(f.o.Filter.Node, &f.o.Filter)
if err != nil {
return err
}
Expand Down
Loading

0 comments on commit 9dedd41

Please sign in to comment.