lita-pullrequests 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 177ca635bc45eb15a13d62c68e2e251743ca1edf
4
- data.tar.gz: 10140d8e50828f11627c1a1a909b8c533e4fdada
3
+ metadata.gz: b2eeaab6bd4a825ee5ce6018fb4c2de5b7e1d514
4
+ data.tar.gz: da7813b33b98caa2b6b51dd03f79de499d92f2df
5
5
  SHA512:
6
- metadata.gz: 2982816a7cfe109c0e1213c4b282d8190af2f9ed7b6cb8b978787b75d629fac1ae1e7e6085aa186a660530a13039f7b81d8b6e2eea893bf82aef4a4951d04af3
7
- data.tar.gz: 39c7b3e47f7599df01b7f697abc265b26b06f2568649d441c284e47cab188fcf252132c823728c895d54afca47264df52c5eb5dfccad38ed8c485f3f724da538
6
+ metadata.gz: 19bc54da7c1049c1f770ad2ae62a2b6cff3e6ff67ef88ca3a8e5441ca76c0fcc707d63e2973a3a7890a7d541c7765873b4196039621eedfd4e6bcadcfe5a25bc
7
+ data.tar.gz: b146587dfa273e7b887b0aa98b456eb890f7835f5e33e69084bb6819a611afcef17f4b93263ab38230f1e601d653f799aef0a83ee6efa711ccd37dbbe5c07c0c
@@ -1,3 +1,5 @@
1
+ require "rufus-scheduler"
2
+
1
3
  module Lita
2
4
  module Handlers
3
5
  class Pullrequests < Handler
@@ -6,6 +8,11 @@ module Lita
6
8
  config :review_label, type: String, required: false
7
9
  config :merge_label, type: String, required: false
8
10
 
11
+ on :loaded, :remember_reminder
12
+
13
+ SCHEDULER = Rufus::Scheduler.new
14
+ REDIS_KEY = "pullrequests-cron"
15
+
9
16
  route(/^(pull request( me)?)|(give me something to review)$/, :get_random_pr, command: true, help: {
10
17
  "give me something to review" => "Shows you a random pull request that needs reviewing.",
11
18
  "pull request (me)" => "Shows you a random pull request that needs reviewing."
@@ -15,20 +22,23 @@ module Lita
15
22
  "(summarize|all) pull requests" => "Lists all pull requests that need action."
16
23
  })
17
24
 
25
+ route(/^set pull requests reminder for (.*)$/, :set_reminder, command: true, help: {
26
+ "set pull requests reminder for CRON EXPRESSION" => "Sets a cron task that will trigger a pr summary."
27
+ })
18
28
 
19
- # Helper method
20
- def truncate(str, truncate_at, options = {})
21
- return str unless str.length > truncate_at
29
+ def remember_reminder(payload)
30
+ reminder = redis.hgetall(REDIS_KEY)["reminder-info"]
31
+ if reminder
32
+ info = MultiJson.load(reminder)
33
+ job = SCHEDULER.cron info["cron_expression"] do |job|
34
+ target = Source.new(user: info["u_id"], room: info["room"])
35
+ robot.send_messages(target, formatted_pull_request_summary)
36
+ end
22
37
 
23
- omission = options[:omission] || '...'
24
- length_with_room_for_omission = truncate_at - omission.length
25
- stop = if options[:separator]
26
- str.rindex(options[:separator], length_with_room_for_omission) || length_with_room_for_omission
38
+ log.info "Created cron job: #{info['cron_expression']}."
27
39
  else
28
- length_with_room_for_omission
40
+ log.info "no reminder found."
29
41
  end
30
-
31
- "#{str[0, stop]}#{omission}"
32
42
  end
33
43
 
34
44
  def fetch_pull_requests
@@ -41,15 +51,8 @@ module Lita
41
51
  def get_random_pr(chat)
42
52
  pr = pulls_that_need_reviews.sample
43
53
  if pr
44
- title, user, body = pr["title"], pr["user"]["login"], truncate(pr["body"], 200)
45
- url = pr["pull_request"]["html_url"]
46
-
47
- chat.reply %Q(
48
- #{title} - #{user}
49
- #{url}
50
- -------------------
51
- #{body}
52
- )
54
+ title, user, url = pr["title"], pr["user"]["login"], pr["pull_request"]["html_url"]
55
+ chat.reply "_#{title}_ - #{user} \n #{url}"
53
56
  else
54
57
  chat.reply "No pull requests need reviews right now!"
55
58
  end
@@ -73,7 +76,7 @@ module Lita
73
76
  end
74
77
  end
75
78
 
76
- def list_all_pull_requests(chat)
79
+ def formatted_pull_request_summary
77
80
  response = ":heavy_exclamation_mark: *Pull Requests that need review*:\n"
78
81
 
79
82
  response += pulls_that_need_reviews.map do |pr|
@@ -89,8 +92,27 @@ module Lita
89
92
  url = pr["pull_request"]["html_url"]
90
93
  "- _#{title}_ - #{user} \n #{url}"
91
94
  end.join("\n\n")
95
+ end
96
+
97
+ def list_all_pull_requests(chat)
98
+ chat.reply(formatted_pull_request_summary)
99
+ end
100
+
101
+ def set_reminder(chat)
102
+ input = chat.matches[0][0].split(" ")
103
+ cron_expression = input[0..4].join(" ")
104
+ job = SCHEDULER.cron cron_expression do |job|
105
+ list_all_pull_requests(chat)
106
+ end
107
+
108
+ redis.hset(REDIS_KEY, "reminder-info", {
109
+ :cron_expression => cron_expression,
110
+ :j_id => job,
111
+ :u_id => chat.message.source.user.id,
112
+ :room => chat.message.source.room
113
+ }.to_json)
92
114
 
93
- chat.reply(response)
115
+ chat.reply("I will post a pull request summary according to this cron: #{cron_expression}")
94
116
  end
95
117
  end
96
118
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-pullrequests"
3
- spec.version = "0.0.3"
3
+ spec.version = "0.0.4"
4
4
  spec.authors = ["Taylor Lapeyre"]
5
5
  spec.email = ["taylorlapeyre@gmail.com"]
6
6
  spec.description = %q{A Lita handler to help you keep track of your pull requests.}
@@ -15,6 +15,7 @@ Gem::Specification.new do |spec|
15
15
  spec.require_paths = ["lib"]
16
16
 
17
17
  spec.add_runtime_dependency "lita", ">= 4.1"
18
+ spec.add_runtime_dependency "rufus-scheduler"
18
19
 
19
20
  spec.add_development_dependency "bundler", "~> 1.3"
20
21
  spec.add_development_dependency "rake"
@@ -13,6 +13,7 @@ describe Lita::Handlers::Pullrequests, lita_handler: true do
13
13
  it { is_expected.to route_command("give me something to review").to(:get_random_pr) }
14
14
  it { is_expected.to route_command("all pull requests").to(:list_all_pull_requests) }
15
15
  it { is_expected.to route_command("summarize pull requests").to(:list_all_pull_requests) }
16
+ it { is_expected.to route_command("set pull requests reminder for 0 20 * * 1-5").to(:set_reminder) }
16
17
 
17
18
  it { is_expected.to_not route_command("all pull requests").to(:get_random_pr) }
18
19
 
@@ -28,4 +29,9 @@ describe Lita::Handlers::Pullrequests, lita_handler: true do
28
29
  expect(replies.last).to match /Example of a pull request ready for merge/
29
30
  expect(replies.last).to match /Example of a pull request ready for review/
30
31
  end
32
+
33
+ it "can schedule a reminder" do
34
+ send_command("set pull requests reminder for 0 20 * * 1-5")
35
+ expect(replies.last).to match /0 20 \* \* 1\-5/
36
+ end
31
37
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-pullrequests
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taylor Lapeyre
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rufus-scheduler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement