summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-11-14 19:24:34 -0700
committermo khan <mo.khan@gmail.com>2020-11-14 19:24:34 -0700
commit7f51f8087ff4a3941b6e9b8edb59a704653df847 (patch)
treee506f6b615803bd803cf473920311b26d52e56e0
parent98256b5a0ee1dbe0c1265c6292269872a13e6e81 (diff)
refactor: extract And predicatemain
-rw-r--r--domain/movie_library.go9
-rw-r--r--domain/predicate.go6
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)