diff options
author | Joris | 2017-01-16 22:23:38 +0100 |
---|---|---|
committer | Joris | 2017-01-16 22:23:38 +0100 |
commit | 36fc53409c9119ac94788d8296d6b171eb0a6500 (patch) | |
tree | d75a3f3232ed73e2c9859200f5d88995d379dc08 /src/main/scala/reading/models/FilterFactory.scala | |
parent | e9e235a10cabc20ceaf110420d4618e83e425631 (diff) | |
download | reading-36fc53409c9119ac94788d8296d6b171eb0a6500.tar.gz reading-36fc53409c9119ac94788d8296d6b171eb0a6500.tar.bz2 reading-36fc53409c9119ac94788d8296d6b171eb0a6500.zip |
Add navigation history with urls
Diffstat (limited to 'src/main/scala/reading/models/FilterFactory.scala')
-rw-r--r-- | src/main/scala/reading/models/FilterFactory.scala | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/main/scala/reading/models/FilterFactory.scala b/src/main/scala/reading/models/FilterFactory.scala new file mode 100644 index 0000000..269af82 --- /dev/null +++ b/src/main/scala/reading/models/FilterFactory.scala @@ -0,0 +1,67 @@ +package reading.models + +trait FilterFactory[T] { + def create(in: T): Filter +} + +object FilterFactory { + implicit object PeriodFilter extends FilterFactory[Period] { + def create(period: Period): Filter = + new Filter { + def filter(book: Book): Boolean = book.period == Some(period) + val kind: FilterKind = FilterKind.Period + val nonFormattedName: String = period.toString() + val name: String = period.prettyPrint() + } + } + + implicit object ThemeFilter extends FilterFactory[Theme] { + def create(theme: Theme): Filter = + new Filter { + def filter(book: Book): Boolean = book.themes.contains(theme) + val kind: FilterKind = FilterKind.Theme + val nonFormattedName: String = theme.toString() + val name: String = theme.prettyPrint() + } + } + + implicit object GenreFilter extends FilterFactory[Genre] { + def create(genre: Genre): Filter = + new Filter { + def filter(book: Book): Boolean = book.genres.contains(genre) + val kind: FilterKind = FilterKind.Genre + val nonFormattedName: String = genre.toString() + val name: String = genre.prettyPrint() + } + } + + implicit object ProgramFilter extends FilterFactory[Program] { + def create(program: Program): Filter = + new Filter { + def filter(book: Book): Boolean = book.programs.contains(program) + val kind: FilterKind = FilterKind.Program + val nonFormattedName: String = program.toString() + val name: String = program.prettyPrint() + } + } + + implicit object GradeFilter extends FilterFactory[Grade] { + def create(grade: Grade): Filter = + new Filter { + def filter(book: Book): Boolean = book.programs.map(Program.grade).contains(grade) + val kind: FilterKind = FilterKind.Grade + val nonFormattedName: String = grade.toString() + val name: String = grade.prettyPrint() + } + } + + implicit object LevelFilter extends FilterFactory[Level] { + def create(level: Level): Filter = + new Filter { + def filter(book: Book): Boolean = book.level == level + val kind: FilterKind = FilterKind.Level + val nonFormattedName: String = level.toString() + val name: String = level.prettyPrint() + } + } +} |