class Lita::Handlers::GitlabMergerequests
Constants
- PROJECTS_LIST_KEY
- REMINDER_SETTINGS_HASH_KEY
- SCHEDULER
Public Instance Methods
add_project(response)
click to toggle source
# File lib/lita/handlers/gitlab_mergerequests.rb, line 104 def add_project(response) project = response.matches[0][0].strip response.reply 'Add a to be monitored project into list.' response.reply "Trying to add '#{project}'.." if projects.find { |p| p.path_with_namespace == project } response.reply "Found '#{project}'!" if redis.lrange(PROJECTS_LIST_KEY, 0, -1).include?(project) response.reply 'Project is already in list.' else response.reply "Adding project '#{project}' into list..." redis.rpush(PROJECTS_LIST_KEY, project) response.reply 'Done! :tada:' end else response.reply "'#{project}' is not found in your project(s), you may want to check the input." end end
configure_gitlab(_payload)
click to toggle source
# File lib/lita/handlers/gitlab_mergerequests.rb, line 136 def configure_gitlab(_payload) Gitlab.configure do |c| c.endpoint = config.api_endpoint c.private_token = config.personal_access_token end end
formatted_pending_mrs()
click to toggle source
# File lib/lita/handlers/gitlab_mergerequests.rb, line 71 def formatted_pending_mrs formatted_pending_mrs = [] pending_mrs.each do |p_mr| formatted_pending_mrs << "In *'#{p_mr[:project]}'*" formatted_pending_mrs << p_mr[:merge_requests].map { |mr| "• #{mr.iid} <#{mr.web_url}|#{mr.title}> - #{(mr.assignee.nil? ? '_no assignee_' : mr.assignee.username)}" }.join("\n") end formatted_pending_mrs.join("\n") end
get_reminder(response)
click to toggle source
# File lib/lita/handlers/gitlab_mergerequests.rb, line 181 def get_reminder(response) if reminder_settings response.reply "Current reminder cron expression is '#{reminder_settings['cron']}'" else response.reply 'No reminder found.' end end
list_pending_mrs(response)
click to toggle source
# File lib/lita/handlers/gitlab_mergerequests.rb, line 85 def list_pending_mrs(response) response.reply 'List pending merge requests.' if projects_in_list.empty? response.reply "Mmm... you haven't add any project yet." else response.reply formatted_pending_mrs unless formatted_pending_mrs.empty? end response.reply 'Done.' end
list_projects(response)
click to toggle source
# File lib/lita/handlers/gitlab_mergerequests.rb, line 95 def list_projects(response) response.reply 'List currently monitoring projects.' if projects_in_list.empty? response.reply "Mmm... you haven't add any project yet." else response.reply(projects_in_list.map { |p| p.prepend('• ') }.join("\n")) end end
pending_mrs()
click to toggle source
# File lib/lita/handlers/gitlab_mergerequests.rb, line 57 def pending_mrs pending_mrs = [] projects_in_list.each do |p| merge_requests = Gitlab.merge_requests(p, state: 'opened', wip: 'no') next unless merge_requests.count.positive? pending_mrs << { project: p, merge_requests: merge_requests } end pending_mrs end
projects()
click to toggle source
# File lib/lita/handlers/gitlab_mergerequests.rb, line 49 def projects Gitlab.projects(membership: true).auto_paginate end
projects_in_list()
click to toggle source
# File lib/lita/handlers/gitlab_mergerequests.rb, line 53 def projects_in_list redis.lrange(PROJECTS_LIST_KEY, 0, -1) end
reminder_settings()
click to toggle source
# File lib/lita/handlers/gitlab_mergerequests.rb, line 159 def reminder_settings reminder_settings = redis.hgetall(REMINDER_SETTINGS_HASH_KEY) # Hash if reminder_settings.empty? nil else reminder_settings end end
remove_project(response)
click to toggle source
# File lib/lita/handlers/gitlab_mergerequests.rb, line 123 def remove_project(response) project = response.matches[0][0].strip response.reply 'Remove a currently monitoring project from list.' response.reply "Trying to remove '#{response.matches[0][0]}'.." if redis.lrange(PROJECTS_LIST_KEY, 0, -1).include?(project) response.reply 'Project is in list, removing it...' redis.lrem(PROJECTS_LIST_KEY, 0, project) response.reply 'Done! :tada:' else response.reply "#{project}' is not found in list." end end
remove_reminder(response)
click to toggle source
# File lib/lita/handlers/gitlab_mergerequests.rb, line 189 def remove_reminder(response) if reminder_settings response.reply 'Removing reminder...' redis.del(REMINDER_SETTINGS_HASH_KEY) SCHEDULER.cron_jobs.each(&:unschedule) response.reply 'Done!' else response.reply 'No reminder found.' end end
runas(response)
click to toggle source
# File lib/lita/handlers/gitlab_mergerequests.rb, line 80 def runas(response) api_user = Gitlab.client.user response.reply "Current API operator account is owned by: #{api_user.name}" end
set_reminder(response)
click to toggle source
# File lib/lita/handlers/gitlab_mergerequests.rb, line 143 def set_reminder(response) cron_expression = response.matches[0][0].strip response.reply "Setting cron expression '#{cron_expression}' for you or the current channel." begin Rufus::Scheduler.parse(cron_expression) redis.hset(REMINDER_SETTINGS_HASH_KEY, 'cron', cron_expression) redis.hset(REMINDER_SETTINGS_HASH_KEY, 'user', response.message.source.user.id) redis.hset(REMINDER_SETTINGS_HASH_KEY, 'room', response.message.source.room) set_reminder_cron rescue ArgumentError => error response.reply "Seems like you give me an invalid cron expression '#{cron_expression}' (*Error:* #{error.message})" rescue StandardError => error response.reply "Oops! (*Error:* #{error.message})" end end
set_reminder_cron(_payload = nil)
click to toggle source
# File lib/lita/handlers/gitlab_mergerequests.rb, line 168 def set_reminder_cron(_payload = nil) if reminder_settings log.info "Setting reminder as cron expression '#{reminder_settings['cron']}'" SCHEDULER.cron_jobs.each(&:unschedule) SCHEDULER.cron reminder_settings['cron'] do |_job| target = Source.new(user: reminder_settings['user'], room: reminder_settings['room']) robot.send_messages(target, formatted_pending_mrs) end else log.info 'No reminder found.' end end