Class: BubBot::ServerManager

Inherits:
Object
  • Object
show all
Defined in:
lib/bub_bot/server_manager.rb

Constant Summary collapse

ROOT_KEY =
'bub_server_list'.freeze

Instance Method Summary collapse

Instance Method Details

#claimed_by(username) ⇒ Object



57
58
59
60
61
# File 'lib/bub_bot/server_manager.rb', line 57

def claimed_by(username)
  list
    .select { |server, claim_data| claim_data['user'] == username }
    .keys
end

#first_unclaimedObject



63
64
65
# File 'lib/bub_bot/server_manager.rb', line 63

def first_unclaimed
  list.key({})
end

#listObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/bub_bot/server_manager.rb', line 35

def list
  claims = redis.hgetall(ROOT_KEY).to_h

  known_server_names.each_with_object({}) do |server_name, claim_map|
    claim_map[server_name] =
      if claim = claims[server_name]
        claim_data = JSON.parse(claim)
        expires_at = DateTime.parse(claim_data['expires_at'])

        # Filter out expired claims
        if expires_at > Time.now
          claim_data['expires_at'] = expires_at
          claim_data
        else
          {}
        end
      else
        {}
      end
  end
end

#namesObject



31
32
33
# File 'lib/bub_bot/server_manager.rb', line 31

def names
  known_server_names
end

#release(server_name) ⇒ Object



27
28
29
# File 'lib/bub_bot/server_manager.rb', line 27

def release(server_name)
  redis.hdel(ROOT_KEY, server_name)
end

#take(options) ⇒ Object

Options:

  • duration (1.hour)

  • server_name (cannoli)

  • user (kevin)

All options required. Do your own defaulting, you lazy bum!



12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/bub_bot/server_manager.rb', line 12

def take(options)
  puts 'takin'

  server_name, duration, user = options.values_at(:server_name, :duration, :user)
  expires_at = duration.from_now

  data = {
    'user' => user,
    'expires_at' => expires_at
  }
  redis.hset(ROOT_KEY, server_name, data.to_json)

  data.merge(server: server_name)
end