class Lita::Handlers::LockerMisc

Misc Locker handlers

Public Instance Methods

dequeue(response) click to toggle source

rubocop:enable Performance/RegexpMatch rubocop:enable Performance/RedundantMatch

# File lib/lita/handlers/locker_misc.rb, line 70
def dequeue(response)
  name = response.match_data['label']
  user = response.user
  return response.reply(t('subject.does_not_exist', name: name)) unless Label.exists?(name)
  l = Label.new(name)
  return response.reply(t('label.unknown_in_queue', name: name, user: user.name)) unless l.wait_queue.include?(user.id)
  l.wait_queue.delete(user.id)
  l.dedupe!
  response.reply(t('label.removed_from_queue', name: name, user: user.name))
end
list(response) click to toggle source
# File lib/lita/handlers/locker_misc.rb, line 81
def list(response)
  username = response.match_data['username']
  user = Lita::User.fuzzy_find(username)
  return response.reply(t('user.unknown', user: username)) unless user
  l = user_locks(user)
  return response.reply(t('user.no_active_locks', user: user.name)) if l.empty?
  composed = ''
  l.each do |label_name|
    composed += "Label: #{label_name}\n"
  end
  response.reply(composed)
end
log(response) click to toggle source
# File lib/lita/handlers/locker_misc.rb, line 42
def log(response)
  name = response.match_data['label']
  return response.reply(failed(t('subject.does_not_exist', name: name))) unless Label.exists?(name)
  l = Label.new(name)
  l.journal.range(-10, -1).each do |entry|
    response.reply(t('label.log_entry', entry: entry))
  end
end
status(response) click to toggle source

rubocop:disable Performance/RedundantMatch rubocop:disable Performance/RegexpMatch

# File lib/lita/handlers/locker_misc.rb, line 53
def status(response)
  name = response.match_data['label']
  unless name.match(/\*/)
    # Literal query
    return response.reply(status_label(name)) if Label.exists?(name)
    return response.reply(status_resource(name)) if Resource.exists?(name)
    return response.reply(failed(t('status.does_not_exist', name: name)))
  end
  # Wildcard query
  matcher = Regexp.new(name.gsub(/\*/, '.*'))
  labels = Label.list.select { |label| label =~ matcher }
  return response.reply(failed(t('status.does_not_exist', name: name))) if labels.empty?
  response.reply(labels.map { |l| status_label(l) }.join("\n"))
end

Private Instance Methods

status_label(name) click to toggle source
# File lib/lita/handlers/locker_misc.rb, line 96
def status_label(name)
  l = Label.new(name)
  return unlocked(t('label.desc', name: name, state: l.state.value)) unless l.locked?
  if l.wait_queue.count > 0
    queue = []
    l.wait_queue.each do |u|
      usr = Lita::User.find_by_id(u)
      queue.push(usr.name)
    end
    locked(t('label.desc_owner_queue', name: name,
                                       state: l.state.value,
                                       owner_name: l.owner.name,
                                       time: l.held_for,
                                       queue: queue.join(', ')))
  else
    locked(t('label.desc_owner', name: name,
                                 state: l.state.value,
                                 owner_name: l.owner.name,
                                 time: l.held_for))
  end
end
status_resource(name) click to toggle source
# File lib/lita/handlers/locker_misc.rb, line 118
def status_resource(name)
  r = Resource.new(name)
  t('resource.desc', name: name, state: r.state.value)
end