class BubBot::ServerManager

Constants

ROOT_KEY

Public Instance Methods

claimed_by(username) click to toggle source
# 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_unclaimed() click to toggle source
# File lib/bub_bot/server_manager.rb, line 63
def first_unclaimed
  list.key({})
end
list() click to toggle source
# 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
names() click to toggle source
# File lib/bub_bot/server_manager.rb, line 31
def names
  known_server_names
end
release(server_name) click to toggle source
# File lib/bub_bot/server_manager.rb, line 27
def release(server_name)
  redis.hdel(ROOT_KEY, server_name)
end
take(options) click to toggle source

Options:

  • duration (1.hour)

  • server_name (cannoli)

  • user (kevin)

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

# 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

Private Instance Methods

known_server_names() click to toggle source
# File lib/bub_bot/server_manager.rb, line 69
def known_server_names
  BubBot.configuration.servers
end
redis() click to toggle source
# File lib/bub_bot/server_manager.rb, line 73
def redis
  BubBot::RedisConnection.instance
end