about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/wittle/puzzles_controller.rb85
1 files changed, 67 insertions, 18 deletions
diff --git a/app/controllers/wittle/puzzles_controller.rb b/app/controllers/wittle/puzzles_controller.rb index 8dc2ac8..9d846f9 100644 --- a/app/controllers/wittle/puzzles_controller.rb +++ b/app/controllers/wittle/puzzles_controller.rb
@@ -1,17 +1,35 @@
1module Wittle 1module Wittle
2 class PuzzlesController < ApplicationController 2 class PuzzlesController < ApplicationController
3 before_action :prepare_session
4 after_action :commit_session
5
3 def about 6 def about
4 @normal_puzzle = Puzzle.normal.order(created_at: :desc).first 7 @normal_puzzle = Puzzle.normal.order(created_at: :desc).first
5 @normal_started = ((session[:started_puzzles] || []).include? @normal_puzzle.id) 8 if @session_puzzles["normal"]["id"] == @normal_puzzle.id
6 @normal_solved = ((session[:played_puzzles] || []).include? @normal_puzzle.id) 9 @normal_started = @session_puzzles["normal"]["started"]
10 @normal_solved = @session_puzzles["normal"]["solved"]
11 else
12 @normal_started = false
13 @normal_solved = false
14 end
7 15
8 @hard_puzzle = Puzzle.hard.order(created_at: :desc).first 16 @hard_puzzle = Puzzle.hard.order(created_at: :desc).first
9 @hard_started = ((session[:started_puzzles] || []).include? @hard_puzzle.id) 17 if @session_puzzles["hard"]["id"] == @hard_puzzle.id
10 @hard_solved = ((session[:played_puzzles] || []).include? @hard_puzzle.id) 18 @hard_started = @session_puzzles["hard"]["started"]
19 @hard_solved = @session_puzzles["hard"]["solved"]
20 else
21 @hard_started = false
22 @hard_solved = false
23 end
11 24
12 @expert_puzzle = Puzzle.expert.order(created_at: :desc).first 25 @expert_puzzle = Puzzle.expert.order(created_at: :desc).first
13 @expert_started = ((session[:started_puzzles] || []).include? @expert_puzzle.id) 26 if @session_puzzles["expert"]["id"] == @expert_puzzle.id
14 @expert_solved = ((session[:played_puzzles] || []).include? @expert_puzzle.id) 27 @expert_started = @session_puzzles["expert"]["started"]
28 @expert_solved = @session_puzzles["expert"]["solved"]
29 else
30 @expert_started = false
31 @expert_solved = false
32 end
15 end 33 end
16 34
17 def index 35 def index
@@ -20,23 +38,34 @@ module Wittle
20 38
21 def show 39 def show
22 @puzzle = Puzzle.find(params[:id]) 40 @puzzle = Puzzle.find(params[:id])
23 @playable = @puzzle.latest? && !((session[:played_puzzles] || []).include? @puzzle.id)
24 @already_started = ((session[:started_puzzles] || []).include? @puzzle.id)
25 41
26 unless @playable 42 if @puzzle.latest?
27 if (session[:puzzle_solutions] || {}).has_key? @puzzle.id.to_s 43 if @session_puzzles[@puzzle.category]["id"] == @puzzle.id
28 @solution = session[:puzzle_solutions][@puzzle.id.to_s] 44 @playable = !(@session_puzzles[@puzzle.category]["solved"])
45 @already_started = @session_puzzles[@puzzle.category]["started"]
46
47 unless @playable
48 @solution = @session_puzzles[@puzzle.category]["path"]
49 end
29 else 50 else
30 @solution = @puzzle.solved_data 51 @playable = true
52 @already_started = false
31 end 53 end
54 else
55 @playable = false
56 @already_started = false
57 @solution = @puzzle.solved_data
32 end 58 end
33 end 59 end
34 60
35 def start 61 def start
36 @puzzle = Puzzle.find(params[:id]) 62 @puzzle = Puzzle.find(params[:id])
37 63
38 session[:started_puzzles] ||= [] 64 if @session_puzzles[@puzzle.category]["id"] != @puzzle.id
39 session[:started_puzzles] << @puzzle.id 65 @session_puzzles[@puzzle.category] = { "id" => @puzzle.id }
66 end
67
68 @session_puzzles[@puzzle.category]["started"] = true
40 end 69 end
41 70
42 def solve 71 def solve
@@ -51,11 +80,12 @@ module Wittle
51 80
52 @time = (params.include? :time) ? params[:time] : nil 81 @time = (params.include? :time) ? params[:time] : nil
53 82
54 session[:played_puzzles] ||= [] 83 if @session_puzzles[@puzzle.category]["id"] != @puzzle.id
55 session[:played_puzzles] << @puzzle.id 84 @session_puzzles[@puzzle.category] = { "id" => @puzzle.id }
85 end
56 86
57 session[:puzzle_solutions] ||= {} 87 @session_puzzles[@puzzle.category]["solved"] = true
58 session[:puzzle_solutions][@puzzle.id] = params[:solved] 88 @session_puzzles[@puzzle.category]["path"] = params[:solved]
59 end 89 end
60 90
61 def submit 91 def submit
@@ -67,5 +97,24 @@ module Wittle
67 97
68 redirect_to @puzzle 98 redirect_to @puzzle
69 end 99 end
100
101 private
102
103 def prepare_session
104 if cookies.encrypted[:puzzles].nil?
105 @session_puzzles = { "normal" => { id: nil }, "hard" => { id: nil }, "expert" => { id: nil } }
106 else
107 @session_puzzles = JSON.parse(cookies.encrypted[:puzzles])
108 end
109
110 # Temporary hack
111 if session.has_key? :puzzle_solutions
112 session[:puzzle_solutions].clear()
113 end
114 end
115
116 def commit_session
117 cookies.encrypted[:puzzles] = JSON.generate(@session_puzzles)
118 end
70 end 119 end
71end 120end