Class: Lita::Handlers::Gitcamp
- Inherits:
-
Handler
- Object
- Handler
- Lita::Handlers::Gitcamp
- Defined in:
- lib/lita/handlers/gitcamp.rb
Class Method Summary collapse
Instance Method Summary collapse
- #basecamp_client ⇒ Object
- #finish_basecamp_tasks(tasks) ⇒ Object
- #get_todos_numbers(issues, owner, repo) ⇒ Object
- #parse_issue_body(body) ⇒ Object
- #parse_payload(payload) ⇒ Object
- #receive(request, responce) ⇒ Object
Class Method Details
.default_config(config) ⇒ Object
10 11 12 13 14 15 16 17 |
# File 'lib/lita/handlers/gitcamp.rb', line 10 def self.default_config(config) config.rooms = :all config.github_token = nil config.notify_chat = true config.basecamp_login = nil config.basecamp_password = nil config.basecamp_account = nil end |
Instance Method Details
#basecamp_client ⇒ Object
71 72 73 74 75 76 77 78 79 80 |
# File 'lib/lita/handlers/gitcamp.rb', line 71 def basecamp_client Bcx.configure do |config| config.account = Lita.config.handlers.gitcamp.basecamp_account end Bcx::Client::HTTP.new( login: Lita.config.handlers.gitcamp.basecamp_login, password: Lita.config.handlers.gitcamp.basecamp_password ) end |
#finish_basecamp_tasks(tasks) ⇒ Object
63 64 65 66 67 68 69 |
# File 'lib/lita/handlers/gitcamp.rb', line 63 def finish_basecamp_tasks(tasks) client = basecamp_client tasks.each do |t| client.projects(t[:project_id]).todos(t[:task_id]).update!(completed: true) end end |
#get_todos_numbers(issues, owner, repo) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/lita/handlers/gitcamp.rb', line 44 def get_todos_numbers(issues, owner, repo) todos = [] client = Octokit::Client.new access_token: Lita.config.handlers.gitcamp.github_token issues.each do |i| # GET /repos/:owner/:repo/issues/:number issue = client.issue("#{owner}/#{repo}", i) todo_id = parse_issue_body(issue.body) todos << todo_id unless todo_id.nil? end todos end |
#parse_issue_body(body) ⇒ Object
57 58 59 60 61 |
# File 'lib/lita/handlers/gitcamp.rb', line 57 def parse_issue_body(body) regex = /basecamp.com\/\d+\/projects\/(\d+)(?:-\w*?)\/todos\/(\d+)/mi captures = body.match(regex).captures {project_id: captures[0], task_id: captures[1]} end |
#parse_payload(payload) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/lita/handlers/gitcamp.rb', line 32 def parse_payload(payload) issues = [] if payload.has_key? "commits" regex = /(?:close|fix|resolve)\w*?\s\#(\d+)/im = payload["commits"].collect {|c| c["message"]}.join(",") issues = .scan(regex).flatten [issues, payload["repository"]["owner"]["name"], payload["repository"]["name"]] end end |
#receive(request, responce) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/lita/handlers/gitcamp.rb', line 19 def receive(request, responce) if request.params.has_key? "payload" payload = JSON.parse(request.params["payload"]) colsed_issues, owner, repo = parse_payload payload return if colsed_issues.empty? tasks = get_todos_numbers(colsed_issues, owner, repo) return if tasks.empty? finish_basecamp_tasks(tasks) responce.reply "Basecamp tasks closed: #{tasks.count}" if Lita.config.handlers.gitcamp.notify_chat end end |