Class: Lita::Handlers::Reviewme

Inherits:
Handler
  • Object
show all
Defined in:
lib/lita/handlers/reviewme.rb

Constant Summary collapse

InvalidConfig =
Class.new(StandardError)
REDIS_LIST =
"reviewers"
DEFAULT_GITHUB_MSG =
":eyes: %{reviewer}"

Instance Method Summary collapse

Instance Method Details

#add_reviewer(response, room: get_room(response)) ⇒ Object



71
72
73
74
75
# 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)) ⇒ Object



83
84
85
86
87
# 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)) ⇒ Object



89
90
91
92
# 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)) ⇒ Object



113
114
115
116
117
# 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)) ⇒ Object



77
78
79
80
81
# 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)) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# 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