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