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