d1f3b3cf57dd24a630b704b0866916160a897b0c
[nit.git] / contrib / nitrpg / src / reactors.nit
1 # This file is part of NIT ( http://www.nitlanguage.org ).
2 #
3 # Copyright 2014-2015 Alexandre Terrasa <alexandre@moz-code.org>
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 # Various implementations of `GameReactor` can be found here.
18 #
19 # TODO This module use a lot of magic numbers for nitcoin rewards.
20 # This should be extracted from configuration or stored elsewhere.
21 module reactors
22
23 import game
24
25 # Reacts to event that can affect players (like giving nitcoins).
26 class PlayerReactor
27 super GameReactor
28
29 redef fun react_event(game, e) do e.react_player_event(game)
30 end
31
32 redef class GithubEvent
33 # Reacts to a player related event.
34 #
35 # Called by `PlayerReactor::react_event`.
36 # No-op by default.
37 private fun react_player_event(game: Game) do end
38 end
39
40 redef class PullRequestEvent
41
42 # Rewards player for opened pull requests.
43 redef fun react_player_event(game) do
44 if action == "opened" then
45 var player = pull.user.player(game)
46 player.nitcoins += 10
47 player.save
48 end
49 end
50 end
51
52 redef class IssueCommentEvent
53
54 # Rewards player for review comments.
55 #
56 # Actuallty we look if the comment contains the string `"+1"`.
57 #
58 # TODO only give nitcoins if reviewers < 2
59 redef fun react_player_event(game) do
60 # FIXME use a more precise way to locate reviews
61 if comment.body.has("\\+1\\b".to_re) then
62 var player = comment.user.player(game)
63 player.nitcoins += 2
64 player.save
65 end
66 end
67 end