Skip to content

Commit 4326c7a

Browse files
committed
fix
1 parent 72b406b commit 4326c7a

File tree

4 files changed

+52
-24
lines changed

4 files changed

+52
-24
lines changed

lib/junethack/trophy_calculations.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1025,7 +1025,7 @@ def all_stuff_streak(column, len, user_id, variant)
10251025

10261026
distinct_values = {}
10271027
games.each {|game|
1028-
if game.ascended == 't'
1028+
if game.ascended
10291029
distinct_values[game.column] = 1
10301030
else
10311031
distinct_values = {}

lib/junethack/trophyscore.rb

+45-20
Original file line numberDiff line numberDiff line change
@@ -30,30 +30,55 @@ def fastest_ascension_gametime(variant=nil)
3030

3131
# returns a list of all ascension streaks per variant
3232
def ascension_streaks(variant=nil)
33-
games = repository.adapter.select "select ascended, user_id, server_id, endtime, 0 as streaks from games where version = ? and user_id in (select user_id from games where ascended='t') order by server_id, endtime desc", variant
33+
sql = <<-SQL
34+
SELECT ascended,
35+
user_id,
36+
server_id,
37+
endtime,
38+
0 AS streaks
39+
FROM games
40+
WHERE version = ?
41+
AND user_id IN (SELECT user_id FROM games WHERE ascended = 't')
42+
ORDER BY server_id,
43+
endtime DESC
44+
SQL
3445

35-
# calculate streaks
36-
streaks = Hash.new(0)
37-
max_streaks = Hash.new(0)
38-
# streaks are per server and per variant
39-
server_id = 0
40-
games.each {|game|
41-
streaks[game.user_id] = 0 if game.ascended == 'f' or game.server_id != server_id
42-
server_id = game.server_id
46+
games = repository.adapter.select(sql, variant)
4347

44-
streaks[game.user_id] += 1 if game.ascended == 't'
48+
# calculate streaks
49+
streaks = Hash.new(0)
50+
max_streaks = Hash.new(0)
51+
# streaks are per server and per variant
52+
server_id = 0
53+
games.each { |game|
54+
streaks[game.user_id] = 0 if !game.ascended or game.server_id != server_id
55+
server_id = game.server_id
4556

46-
if streaks[game.user_id] > max_streaks[game.user_id]
47-
max_streaks[game.user_id] = streaks[game.user_id]
48-
end
49-
}
57+
streaks[game.user_id] += 1 if game.ascended
58+
59+
if streaks[game.user_id] > max_streaks[game.user_id]
60+
max_streaks[game.user_id] = streaks[game.user_id]
61+
end
62+
}
63+
64+
# construct return object
65+
sql = <<-SQL
66+
SELECT user_id,
67+
(SELECT login FROM users WHERE user_id = id) AS USER,
68+
max(endtime) AS endtime,
69+
0 AS streaks
70+
FROM games
71+
WHERE version = ?
72+
AND user_id IN (SELECT user_id FROM games WHERE ascended = 't')
73+
GROUP BY user_id
74+
ORDER BY max(endtime) DESC
75+
SQL
5076

51-
# construct return object
52-
streaks = repository.adapter.select "select user_id, (select name from users where user_id = id) as user, endtime, 0 as streaks from games where version = ? and user_id in (select user_id from games where ascended='t') group by user_id order by endtime desc", variant
53-
return streaks.delete_if {|game|
54-
game.streaks = max_streaks[game.user_id]
55-
game.streaks == 1
56-
}.sort_by {|game| -game.streaks }
77+
streaks = repository.adapter.select(sql, variant)
78+
return streaks.delete_if { |game|
79+
game.streaks = max_streaks[game.user_id]
80+
game.streaks == 1
81+
}.sort_by {|game| -game.streaks }
5782
end
5883

5984
def longest_ascension_streaks(variant=nil)

lib/junethack/userscore.rb

+3-3
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ def longest_ascension_streak(variant=nil)
5555
# streaks are per server and per variant
5656
server_id = 0
5757
games_ascended.each {|game|
58-
asc = 0 if game.ascended == 'f' or game.server_id != server_id
58+
asc = 0 if !game.ascended or game.server_id != server_id
5959
server_id = game.server_id
6060

61-
asc += 1 if game.ascended == 't'
61+
asc += 1 if game.ascended
6262

63-
max_asc = asc if asc > max_asc
63+
max_asc = asc if asc > max_asc
6464
}
6565
return max_asc
6666
end

spec/unittests/trophies_achievements/trophy_spec.rb

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
require 'userscore'
55

66
describe TrophyScore do
7+
before do
8+
Game.destroy
9+
end
710

811
context "given 2 ascended games from the same user with identical score points" do
912
server = Server.create(name: 'server_highscore')

0 commit comments

Comments
 (0)