Commit eac28ff

mo khan <mo@mokhan.ca>
2013-11-09 15:28:02
extract method to search using specification.
1 parent abd49e3
src/movie.coffee
@@ -6,3 +6,14 @@ module.exports = class Movie
 
   equals: (other) ->
     @title == other["title"]
+
+  @by: (studio) ->
+    console.log(studio)
+    new StudioSpecification(studio)
+
+class StudioSpecification
+  constructor: (studio) ->
+    @studio = studio
+
+  matches: (movie) ->
+    @studio == movie.studio
src/movie_library.coffee
@@ -20,6 +20,10 @@ Enumerable =
       results.push(item) if predicate(item)
     results
 
+  all: (specification) ->
+    @find_all (movie) -> 
+      specification.matches(movie)
+
 moduleKeywords = ['extended', 'included']
 
 class Module
@@ -46,10 +50,6 @@ module.exports = class MovieLibrary extends Module
     for movie in @movies
       visitor(movie)
 
-  find_all_movies_by_pixar: ->
-    @find_all (movie) =>
-      movie.studio == Studio.Pixar
-
   find_movies_by_pixar_or_disney: ->
     @find_all (movie) =>
       movie.studio == Studio.Pixar || movie.studio == Studio.Disney
test/movie_library_spec.coffee
@@ -49,7 +49,7 @@ describe "MovieLibrary", ->
         @sut.add(movie)
 
     it "can find all pixar movies", ->
-      results = @sut.find_all_movies_by_pixar()
+      results = @sut.all(Movie.by(Studio.Pixar))
       results.should.include(@toy_story)
       results.should.include(@up)
       results.should.include(@cars)