class Lita::Handlers::Reviewme

Constants

DEFAULT_GITHUB_MSG
InvalidConfig
REDIS_LIST

Public Instance Methods

add_reviewer(response, room: get_room(response)) click to toggle source
# File lib/lita/handlers/reviewme.rb, line 71
def add_reviewer(response, room: get_room(response))
  reviewer = response.matches.flatten.first
  ns_redis(room.id).lpush(REDIS_LIST, reviewer)
  response.reply("added #{reviewer} to reviews")
end
display_reviewers(response, room: get_room(response)) click to toggle source
# File lib/lita/handlers/reviewme.rb, line 83
def display_reviewers(response, room: get_room(response))
  reviewers = ns_redis(room.id).lrange(REDIS_LIST, 0, -1)
  response.reply("Responding via private message...")
  response.reply_privately("#{room.name}: #{reviewers.join(', ')}")
end
generate_assignment(response, room: get_room(response)) click to toggle source
# File lib/lita/handlers/reviewme.rb, line 89
def generate_assignment(response, room: get_room(response))
  reviewer = next_reviewer(room)
  response.reply(reviewer.to_s)
end
mention_reviewer(response, room: get_room(response)) click to toggle source
# File lib/lita/handlers/reviewme.rb, line 113
def mention_reviewer(response, room: get_room(response))
  url = response.matches.flatten.first
  reviewer = next_reviewer(room)
  response.reply(chat_mention(reviewer, url))
end
remove_reviewer(response, room: get_room(response)) click to toggle source
# File lib/lita/handlers/reviewme.rb, line 77
def remove_reviewer(response, room: get_room(response))
  reviewer = response.matches.flatten.first
  ns_redis(room.id).lrem(REDIS_LIST, 0, reviewer)
  response.reply("removed #{reviewer} from reviews")
end
review_on_github(response, room: get_room(response)) click to toggle source
# File lib/lita/handlers/reviewme.rb, line 94
def review_on_github(response, room: get_room(response))
  validate_config
  github = Lita::Reviewme::Github.new(config, response.match_data[:repo], response.match_data[:id])

  if reviewer = next_reviewer(room, github.owner)
    github.assign(reviewer)
    response.reply("#{reviewer} should be on it...")
  else
    response.reply('Sorry, no reviewers found')
  end
rescue Lita::Reviewme::Github::UnknownOwner
  response.reply("Unable to check who issued the pull request. Sorry if you end up being assigned your own PR!")
rescue Lita::Reviewme::Github::CannotPostComment
  url = response.match_data[:url]
  response.reply("I couldn't post a comment or request a reviewer. (Are the permissions right?) #{chat_mention(reviewer, url)}")
rescue InvalidConfig => error
  response.reply(error.message)
end

Private Instance Methods

chat_mention(reviewer, url) click to toggle source
# File lib/lita/handlers/reviewme.rb, line 140
def chat_mention(reviewer, url)
  "#{reviewer}: :eyes: #{url}"
end
get_room(response) click to toggle source
# File lib/lita/handlers/reviewme.rb, line 144
def get_room(response)
  room_id = response.message.source.room
  Lita::Room.find_by_id(room_id) || Lita::Room.new(room_id)
end
next_reviewer(room, owner = nil) click to toggle source
# File lib/lita/handlers/reviewme.rb, line 127
def next_reviewer(room, owner = nil)
  reviewer = ns_redis(room.id).rpoplpush(REDIS_LIST, REDIS_LIST)
  return unless reviewer

  if reviewer == owner
    return if ns_redis(room.id).llen(REDIS_LIST) == 1

    reviewer = next_reviewer(room, owner)
  end

  reviewer
end
ns_redis(namespace) click to toggle source
# File lib/lita/handlers/reviewme.rb, line 149
def ns_redis(namespace)
  Redis::Namespace.new(namespace, redis: redis)
end
validate_config() click to toggle source
# File lib/lita/handlers/reviewme.rb, line 121
def validate_config
  if !config.github_comment and !config.github_request_review
    raise InvalidConfig, 'I am configured to neither leave a comment nor start a review. Check config.handlers.reviewme in lita_config.rb.'
  end
end