f4aeae8b0e31086104086ed2a73e6c50fcf3c4ac
[nit.git] / contrib / benitlux / src / benitlux_model.nit
1 # This file is part of NIT ( http://www.nitlanguage.org ).
2 #
3 # Copyright 2014 Alexis Laferrière <alexis.laf@xymus.net>
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16
17 # Database and data model to be used by servers and clients
18 module benitlux_model
19
20 import serialization
21
22 # A beer, with a name and description
23 class Beer
24 auto_serializable
25
26 init(name, desc: String)
27 do
28 self.name = name
29 self.desc = desc
30 end
31
32 # Name of the beer
33 var name: String
34
35 # Description on the Web site
36 var desc: String
37
38 redef fun to_s do return "<{name}: {desc}>"
39 end
40
41 # A collection of beer-related events
42 class BeerEvents
43 auto_serializable
44
45 # New beers on the menu
46 var new_beers = new Array[Beer]
47
48 # Beers that have left the menu
49 var gone_beers = new Array[Beer]
50
51 # Beers that are on the menu today, and yesterday
52 var fix_beers = new Array[Beer]
53
54 # Get a human pretty `Array[String]` version of `self`
55 fun to_email_content: Array[String]
56 do
57 var content = new Array[String]
58
59 # New beers
60 for beer in self.new_beers do
61 content.add "+ {beer.name}: {beer.desc}"
62 end
63
64 # Gone beers
65 for beer in self.gone_beers do
66 content.add "- {beer.name}: {beer.desc}"
67 end
68
69 # Fix beers
70 for beer in self.fix_beers do
71 content.add " {beer.name}: {beer.desc}"
72 end
73
74 return content
75 end
76
77 # Get a pretty and short version of `self`
78 fun to_email_title: String
79 do
80 var title = "Benelux Beer Menu"
81
82 # New beers
83 var new_beers_name = new Array[String]
84 for beer in self.new_beers do new_beers_name.add beer.name
85
86 if not new_beers_name.is_empty then
87 title += " (+ {new_beers_name.join(", ")})"
88 end
89
90 return title
91 end
92 end