diff options
| author | mo khan <mo.khan@gmail.com> | 2020-11-14 19:24:34 -0700 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-11-14 19:24:34 -0700 |
| commit | 7f51f8087ff4a3941b6e9b8edb59a704653df847 (patch) | |
| tree | e506f6b615803bd803cf473920311b26d52e56e0 | |
| parent | 98256b5a0ee1dbe0c1265c6292269872a13e6e81 (diff) | |
refactor: extract And predicatemain
| -rw-r--r-- | domain/movie_library.go | 9 | ||||
| -rw-r--r-- | domain/predicate.go | 6 |
2 files changed, 12 insertions, 3 deletions
diff --git a/domain/movie_library.go b/domain/movie_library.go index 455f327..91fffcf 100644 --- a/domain/movie_library.go +++ b/domain/movie_library.go @@ -48,6 +48,11 @@ func MovieReleasedAfter(year int) Predicate { return m.Year > year } } +func MovieReleasedBefore(year int) Predicate { + return func(m Movie) bool { + return m.Year < year + } +} func (self *MovieLibrary) FindAllMoviesByPixar() []Movie { return self.FindAll(MovieProducedBy("Pixar")) @@ -66,9 +71,7 @@ func (self *MovieLibrary) FindAllMoviesPublishedAfter2004() []Movie { } func (self *MovieLibrary) FindAllMoviesPublishedBetween1982And2003() []Movie { - return self.FindAll(func(x Movie) bool { - return x.Year > 1982 && x.Year < 2003 - }) + return self.FindAll(MovieReleasedAfter(1982).And(MovieReleasedBefore(2003))) } func (self *MovieLibrary) Add(movie Movie) { diff --git a/domain/predicate.go b/domain/predicate.go index b6ba427..bda03d7 100644 --- a/domain/predicate.go +++ b/domain/predicate.go @@ -8,6 +8,12 @@ func (self Predicate) Or(other Predicate) Predicate { } } +func (self Predicate) And(other Predicate) Predicate { + return func(m Movie) bool { + return self(m) && other(m) + } +} + func (self Predicate) Not() Predicate { return func(m Movie) bool { return !self(m) |
