main
1Studio = require('./studio')
2Module = require('./module')
3Enumerable = require('./enumerable')
4
5module.exports = class MovieLibrary extends Module
6 @include Enumerable
7
8 constructor: ->
9 @movies = []
10
11 add: (movie) ->
12 @movies.push(movie) unless @includes(movie)
13
14 count: ->
15 @movies.length
16
17 each: (visitor) ->
18 for movie in @movies
19 visitor(movie)
20
21 sort_by_title_ascending: ->
22 @movies.sort (x, y) ->
23 return 1 if x.title > y.title
24 return -1 if x.title < y.title
25 return 0
26
27 sort_by_title_descending: ->
28 @movies.sort (y, x) ->
29 return 1 if x.title > y.title
30 return -1 if x.title < y.title
31 return 0
32
33 sorted_by_year_published: ->
34 @movies.sort (x, y) ->
35 x.year_published - y.year_published
36
37 sorted_by_year_published_descending: ->
38 @movies.sort (x, y) ->
39 y.year_published - x.year_published
40
41 sorted_by_studio_rankings_then_by_year_published: (rankings) ->
42 @movies.sort (x, y) =>
43 result = rankings.indexOf(x.studio) - rankings.indexOf(y.studio)
44 if result == 0 then (x.year_published - y.year_published) else result