tokite 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 42f015a1f6506f8fa787106a51d82f4947ef26f9
4
- data.tar.gz: cf9f1533ccb4e27eeb99132c5551df9588169a38
2
+ SHA256:
3
+ metadata.gz: 73bba954a04f930ead15e40578f8ca568af8556be9c590aebc0af83b0a10acfb
4
+ data.tar.gz: 9d1621ce6e6bd627fccc1b1a5c67b3da1fa531ea7eef6378f9d599b8765c61cf
5
5
  SHA512:
6
- metadata.gz: d802bf0c26babe1c2c076539ecb7bea0bcec17e5a9263827a64282fc13c173f9b61bb35b2ce64934f5bb94924f4e06d3cb6bf38a9bf21a923a0abdecab696f62
7
- data.tar.gz: 65409e232f6a19aaf482aa42b85fdecb52e86c8530a4f9129ad59e11b18ec7f3b773f6d95e6cc991aed0dbaee48269a8c61156766dff8bb59dff50b9e392fd80
6
+ metadata.gz: 4e25b16e531706114b7ea766af525058055c2b0679d30ccd9b03fcb13f05fb19bb00071d354b2bd0e995489d408fe743ed14c3e86b910759732415b13dde8581
7
+ data.tar.gz: cd61a51ed21d5a7410b7930ac77c8c1d6022c7853f081546333fa069f4a09c4339e5ec1b84d8de3aa7c8eda52d2433102097e971f88ea2e5a646b978f60c0b4e
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Tokite [![CircleCI](https://circleci.com/gh/hogelog/tokite.svg?style=svg)](https://circleci.com/gh/hogelog/tokite) [![Gem Version](https://badge.fury.io/rb/tokite.svg)](https://badge.fury.io/rb/tokite)
1
+ # Tokite [![Gem Version](https://badge.fury.io/rb/tokite.svg)](https://badge.fury.io/rb/tokite)
2
2
 
3
3
  Tokite send GitHub event (pull-request, issue and comment) to Slack.
4
4
 
@@ -23,8 +23,9 @@ end
23
23
  ### Setup database
24
24
  ```console
25
25
  $ ./bin/rails db:create
26
- $ ./bin/rails tokite:ridgepole:install
27
- $ ./bin/rails tokite:ridgepole:apply
26
+ $ ./bin/rails app:tokite:ridgepole:install
27
+ $ ./bin/rails app:tokite:ridgepole:apply
28
+ $ RAILS_ENV=test ./bin/rails app:tokite:ridgepole:apply
28
29
  ```
29
30
 
30
31
  ### Setup yarn pkg
@@ -34,8 +35,8 @@ $ ./bin/rails tokite:yarn:install
34
35
 
35
36
  ## Configuration
36
37
  <table>
37
- <tr><th>GITHUB_CLIENT_ID</th><td>Google+ OAuth2 client ID</td></tr>
38
- <tr><th>GITHUB_CLIENT_SECRET</th><td>Google+ OAuth2 client secret</td></tr>
38
+ <tr><th>GITHUB_CLIENT_ID</th><td>GitHub OAuth2 client ID</td></tr>
39
+ <tr><th>GITHUB_CLIENT_SECRET</th><td>GitHub OAuth2 client secret</td></tr>
39
40
  <tr><th>GITHUB_HOST (optional)</th><td>GitHub Enterprise host</td></tr>
40
41
  <tr><th>SECRET_KEY_BASE</th><td><code>rails secret</code> key</td></tr>
41
42
  <tr><th>SLACK_WEBHOOK_URL</th><td>Slack incoming webhook url</td></tr>
@@ -67,11 +68,14 @@ Tokite support only below events now.
67
68
 
68
69
  <table>
69
70
  <tr><th>Name</th><th>Description</th><th>Example</th></tr>
70
- <tr><td>repo:</td><td>Match repository name.</td><td>repo:hogelog/tokite</td></tr>
71
+ <tr><td>repo:</td><td>Match repository name.</td><td>repo:cookpad/tokite</td></tr>
71
72
  <tr><td>title:</td><td>Match pull_request or issues title.</td><td>title:Bug</td></tr>
72
73
  <tr><td>event:</td><td>Match event type pull_request, issues, issue_comment, pull_request_review, pull_request_review_comment.</td><td>event:/pull_request|issues|pull_request_review|pull_request_review_comment/</td></tr>
73
74
  <tr><td>body:</td><td>Match body text.</td><td>body:"review please"</td></tr>
74
75
  <tr><td>user:</td><td>Match user name.</td><td>user:hogelog</td></tr>
76
+ <tr><td>label:</td><td>Match pull_request or issue label.</td><td>label:Feature</td></tr>
75
77
  <tr><td>review_state:</td><td>Match pull_request_review state.</td><td>review_state:/commented|approved|changes_requested/</td></tr>
78
+ <tr><td>requested_reviewer:</td><td>Match user name of review requested reviewer</td><td>requested_reviewer:hogelog</td></tr>
79
+ <tr><td>requested_team:</td><td>Match team name of review requested team</td><td>requested_team:cookpad/chef</td></tr>
76
80
  <tr><td>unspecified</td><td>Match title or body field.</td><td>review please</td></tr>
77
81
  </table>
@@ -3,15 +3,15 @@
3
3
  module Tokite
4
4
  class HooksController < ActionController::API
5
5
  GITHUB_EVENT_HEADER = "X-GitHub-Event"
6
-
6
+
7
7
  def create
8
8
  logger.debug("Hook triggered: #{github_event}")
9
9
  Hook.fire!(github_event, request.request_parameters)
10
10
  render plain: "ok"
11
11
  end
12
-
12
+
13
13
  private
14
-
14
+
15
15
  def github_event
16
16
  request.headers[GITHUB_EVENT_HEADER]
17
17
  end
@@ -7,9 +7,12 @@ module Tokite
7
7
  end
8
8
 
9
9
  def new
10
- github_repos = octokit_client.repositories.select{|r| r.permissions.admin }.delete_if(&:fork)
10
+ github_repos = octokit_client.repositories.
11
+ select{|r| r.permissions.admin }.
12
+ delete_if(&:fork).
13
+ delete_if(&:archived)
11
14
  @repositories = github_repos.map do |repo|
12
- Repository.new(name: repo.full_name, url: repo.html_url)
15
+ Repository.new(name: repo.full_name, url: repo.html_url, private: repo.private)
13
16
  end
14
17
  Repository.all.pluck(:name).each do |existing_name|
15
18
  @repositories.delete_if {|repo| repo.name == existing_name }
@@ -17,11 +20,22 @@ module Tokite
17
20
  end
18
21
 
19
22
  def create
20
- params[:names].each do |name|
21
- github_repo = octokit_client.repository(name)
22
- Repository.hook!(octokit_client, github_repo)
23
+ if params[:names].nil?
24
+ flash[:error] = "Error: No repository was selected"
25
+ else
26
+ github_repos = params[:names].map do |name|
27
+ octokit_client.repository(name)
28
+ end
29
+ errors = github_repos.select(&:archived).map(&:full_name)
30
+ if errors != []
31
+ flash[:error] = %(Error: The following repositories have been archived: #{errors.join(", ")})
32
+ else
33
+ github_repos.each do |repo|
34
+ Repository.hook!(octokit_client, repo)
35
+ end
36
+ flash[:info] = "Import repositories."
37
+ end
23
38
  end
24
- flash[:info] = "Import repositories."
25
39
  redirect_to repositories_path
26
40
  end
27
41
 
@@ -46,7 +46,7 @@ module Tokite
46
46
  private
47
47
 
48
48
  def rule_params
49
- params.require(:rule).permit(:user_id, :name, :query, :channel, :icon_emoji, :additional_text)
49
+ params.require(:rule).permit(:user_id, :name, :query, :channel, :icon_emoji, :additional_text, :display_name)
50
50
  end
51
51
  end
52
52
  end
@@ -1,7 +1,7 @@
1
1
  module Tokite
2
2
  class Hook
3
3
  attr_reader :event
4
-
4
+
5
5
  HOOK_EVENTS = {
6
6
  "pull_request" => HookEvent::PullRequest,
7
7
  "issues" => HookEvent::Issues,
@@ -9,16 +9,16 @@ module Tokite
9
9
  "pull_request_review" => HookEvent::PullRequestReview,
10
10
  "pull_request_review_comment" => HookEvent::PullRequestReviewComment,
11
11
  }.freeze
12
-
12
+
13
13
  def self.fire!(github_event, hook_params)
14
14
  event_class = HOOK_EVENTS[github_event]
15
15
  Hook.new(event_class.new(hook_params)).fire! if event_class
16
16
  end
17
-
17
+
18
18
  def initialize(event)
19
19
  @event = event
20
20
  end
21
-
21
+
22
22
  def fire!
23
23
  return unless event.notify?
24
24
  payloads = []
@@ -32,6 +32,7 @@ module Tokite
32
32
  if payloads.none? {|payload| payload[:channel] == rule.channel && payload[:emoji] == emoji && payload[:additional_text] == additional_text }
33
33
  payloads << {
34
34
  channel: rule.channel,
35
+ username: rule.display_name.presence || "tokite",
35
36
  text: event.slack_text,
36
37
  emoji: emoji,
37
38
  additional_text: additional_text,
@@ -40,11 +41,25 @@ module Tokite
40
41
  end
41
42
  end
42
43
  payloads.each do |payload|
43
- notify!(channel: payload[:channel], text: payload[:text], icon_emoji: payload[:emoji], attachments: payload[:attachments])
44
- notify!(channel: payload[:channel], text: payload[:additional_text], icon_emoji: payload[:emoji], parse: "full") if payload[:additional_text].present?
44
+ notify!(
45
+ channel: payload[:channel],
46
+ text: payload[:text],
47
+ icon_emoji: payload[:emoji],
48
+ attachments: payload[:attachments],
49
+ username: payload[:username]
50
+ )
51
+ if payload[:additional_text].present?
52
+ notify!(
53
+ channel: payload[:channel],
54
+ text: payload[:additional_text],
55
+ icon_emoji: payload[:emoji],
56
+ parse: "full",
57
+ username: payload[:username]
58
+ )
59
+ end
45
60
  end
46
61
  end
47
-
62
+
48
63
  def notify!(payload)
49
64
  NotifyGithubHookEventJob.perform_now(payload.compact)
50
65
  end
@@ -7,17 +7,18 @@ module Tokite
7
7
  repo: hook_params[:repository][:full_name],
8
8
  body: hook_params[:comment][:body],
9
9
  user: hook_params[:comment][:user][:login],
10
+ label: hook_params[:issue][:labels].map { |label| label[:name] },
10
11
  }
11
12
  end
12
-
13
+
13
14
  def notify?
14
15
  %w(created).include?(hook_params[:action])
15
16
  end
16
-
17
+
17
18
  def slack_text
18
19
  "[#{hook_params[:repository][:full_name]}] New comment by #{hook_params[:comment][:user][:login]} on issue <#{hook_params[:comment][:html_url]}|##{hook_params[:issue][:number]}: #{hook_params[:issue][:title]}>"
19
20
  end
20
-
21
+
21
22
  def slack_attachment
22
23
  {
23
24
  fallback: hook_params[:comment][:body],
@@ -6,8 +6,9 @@ module Tokite
6
6
  event: "issues",
7
7
  repo: hook_params[:repository][:full_name],
8
8
  title: hook_params[:issue][:title],
9
- body: hook_params[:issue][:body],
9
+ body: hook_params[:issue][:body] || "",
10
10
  user: hook_params[:issue][:user][:login],
11
+ label: hook_params[:issue][:labels].map { |label| label[:name] },
11
12
  }
12
13
  end
13
14
 
@@ -24,7 +25,7 @@ module Tokite
24
25
  title: "##{hook_params[:issue][:number]} #{hook_params[:issue][:title]}",
25
26
  title_link: hook_params[:issue][:html_url],
26
27
  fallback: "#{hook_params[:issue][:title]}\n#{hook_params[:issue][:body]}",
27
- text: hook_params[:issue][:body],
28
+ text: hook_params[:issue][:body] || "",
28
29
  color: "good",
29
30
  }
30
31
  end
@@ -8,23 +8,40 @@ module Tokite
8
8
  title: hook_params[:pull_request][:title],
9
9
  body: hook_params[:pull_request][:body],
10
10
  user: hook_params[:pull_request][:user][:login],
11
+ label: hook_params[:pull_request][:labels].map { |label| label[:name] },
12
+ requested_reviewer: hook_params[:requested_reviewer]&.[](:login) || hook_params[:pull_request][:requested_reviewers].map { |reviewer| reviewer[:login] },
13
+ requested_team: hook_params[:pull_request][:requested_teams].map { |team| parse_team_name(team) },
11
14
  }
12
15
  end
13
-
16
+
17
+ def parse_team_name(team)
18
+ html_url = team[:html_url]
19
+ if /\/orgs\/(?<org_name>[^\s\/]+)\/teams\/(?<team_name>[^\s\/]+)\z/ =~ html_url
20
+ org_name + "/" + team_name
21
+ else
22
+ team[:slug] || team[:name]
23
+ end
24
+ end
25
+
14
26
  def notify?
15
- %w(opened).include?(hook_params[:action])
27
+ %w(opened review_requested).include?(hook_params[:action])
16
28
  end
17
-
29
+
18
30
  def slack_text
19
- "[#{hook_params[:repository][:full_name]}] Pull request submitted by <#{hook_params[:pull_request][:user][:html_url]}|#{hook_params[:pull_request][:user][:login]}>"
31
+ case hook_params[:action]
32
+ when 'opened'
33
+ "[#{hook_params[:repository][:full_name]}] Pull request submitted by <#{hook_params[:pull_request][:user][:html_url]}|#{hook_params[:pull_request][:user][:login]}>"
34
+ when 'review_requested'
35
+ "[#{hook_params[:repository][:full_name]}] Pull request review requested by <#{hook_params[:pull_request][:user][:html_url]}|#{hook_params[:pull_request][:user][:login]}>"
36
+ end
20
37
  end
21
-
38
+
22
39
  def slack_attachment
23
40
  {
24
41
  title: "##{hook_params[:pull_request][:number]} #{hook_params[:pull_request][:title]}",
25
42
  title_link: hook_params[:pull_request][:html_url],
26
43
  fallback: "#{hook_params[:pull_request][:title]}\n#{hook_params[:pull_request][:body]}",
27
- text: hook_params[:pull_request][:body],
44
+ text: hook_params[:pull_request][:body] || "No description provided.",
28
45
  color: "good",
29
46
  }
30
47
  end
@@ -5,16 +5,17 @@ module Tokite
5
5
  {
6
6
  event: "pull_request_review",
7
7
  repo: hook_params[:repository][:full_name],
8
- body: hook_params[:review][:body],
8
+ body: hook_params[:review][:body] || "",
9
9
  user: hook_params[:review][:user][:login],
10
10
  review_state: hook_params[:review][:state],
11
11
  }
12
12
  end
13
13
 
14
14
  def notify?
15
- return false unless hook_params[:action] == "submitted"
16
- if hook_params[:review][:state] == "commented"
17
- hook_params[:review][:body]
15
+ if hook_params[:action] != "submitted"
16
+ false
17
+ elsif hook_params[:review][:state] == "commented"
18
+ hook_params[:review][:body] != nil
18
19
  else
19
20
  true
20
21
  end
@@ -35,7 +36,6 @@ module Tokite
35
36
  end
36
37
 
37
38
  def slack_attachment
38
- return unless hook_params[:review][:body]
39
39
  case hook_params[:review][:state]
40
40
  when "commented"
41
41
  when "approved"
@@ -44,8 +44,8 @@ module Tokite
44
44
  color = "warning"
45
45
  end
46
46
  {
47
- fallback: hook_params[:review][:body],
48
- text: hook_params[:review][:body],
47
+ fallback: hook_params[:review][:body] || "",
48
+ text: hook_params[:review][:body] || "",
49
49
  color: color,
50
50
  }
51
51
  end
@@ -1,7 +1,7 @@
1
1
  module Tokite
2
2
  class Rule < ApplicationRecord
3
3
  attr_reader :search_query
4
-
4
+
5
5
  belongs_to :user
6
6
 
7
7
  validates :name, presence: true
@@ -19,27 +19,27 @@ module Tokite
19
19
  rule.match?(event)
20
20
  end
21
21
  end
22
-
22
+
23
23
  def search_query
24
24
  @search_query ||= SearchQuery.new(query)
25
25
  end
26
-
26
+
27
27
  def match?(event)
28
28
  search_query.match?(event.fields)
29
29
  end
30
-
30
+
31
31
  def slack_attachment_fallback
32
32
  "#{name} by #{user.name}"
33
33
  end
34
-
34
+
35
35
  def slack_attachment_text
36
36
  "#{rule_name_link} (#{user_link}) "
37
37
  end
38
-
38
+
39
39
  def rule_name_link
40
40
  "<#{Tokite::Engine.routes.url_helpers.edit_rule_url(self)}|#{name}>"
41
41
  end
42
-
42
+
43
43
  def user_link
44
44
  "<#{Tokite::Engine.routes.url_helpers.user_url(user)}|#{user.name}>"
45
45
  end
@@ -47,8 +47,8 @@ module Tokite
47
47
  private
48
48
 
49
49
  def validate_query
50
- SearchQuery.parse(query)
51
- rescue SearchQuery::ParseError => e
50
+ SearchQuery.validate(query)
51
+ rescue SearchQuery::QueryError => e
52
52
  errors.add(:query, e.message)
53
53
  end
54
54
 
@@ -6,7 +6,11 @@ module Tokite
6
6
 
7
7
  DEFAULT_FIELDS = %i(title body)
8
8
 
9
- class ParseError < StandardError
9
+ class QueryError < StandardError
10
+ end
11
+ class QueryParseError < QueryError
12
+ end
13
+ class QueryRegexpError < QueryError
10
14
  end
11
15
 
12
16
  class Parser < Parslet::Parser
@@ -37,7 +41,16 @@ module Tokite
37
41
  def self.parse(query)
38
42
  Array.wrap(parser.parse(query))
39
43
  rescue Parslet::ParseFailed => e
40
- raise ParseError, e
44
+ raise QueryParseError, e
45
+ end
46
+
47
+ def self.validate(query)
48
+ tree = SearchQuery.parse(query)
49
+ tree.each do |word|
50
+ Regexp.compile(word[:regexp_word].to_s, Regexp::IGNORECASE) if word[:regexp_word]
51
+ end
52
+ rescue RegexpError => e
53
+ raise QueryRegexpError, e
41
54
  end
42
55
 
43
56
  def initialize(query)
@@ -49,13 +62,25 @@ module Tokite
49
62
  tree.all? do |word|
50
63
  field = word[:field]
51
64
  if field
52
- targets = doc[field.to_sym] ? [doc[field.to_sym].downcase] : []
65
+ targets =
66
+ case doc[field.to_sym]
67
+ when Array
68
+ doc[field.to_sym].map(&:downcase)
69
+ when nil
70
+ []
71
+ else
72
+ [doc[field.to_sym].downcase]
73
+ end
53
74
  else
54
75
  targets = DEFAULT_FIELDS.map{|field| doc[field]&.downcase }.compact
55
76
  end
56
77
  if word[:regexp_word]
57
- regexp = Regexp.compile(word[:regexp_word].to_s, Regexp::IGNORECASE)
58
- matched = targets.any?{|text| regexp.match?(text) }
78
+ begin
79
+ regexp = Regexp.compile(word[:regexp_word].to_s, Regexp::IGNORECASE)
80
+ matched = targets.any?{|text| regexp.match?(text) }
81
+ rescue RegexpError
82
+ matched = false
83
+ end
59
84
  else
60
85
  value = word[:word].to_s.downcase
61
86
  matched = targets.any?{|text| text.index(value) }
@@ -20,6 +20,8 @@
20
20
  %span.nav-item.is-tab= current_user.name_with_provider
21
21
 
22
22
  %section.section
23
+ - if flash[:error]
24
+ .notification.is-danger= flash[:error]
23
25
  - if flash[:info]
24
26
  .notification.is-success= flash[:info]
25
27
 
@@ -7,6 +7,8 @@
7
7
  %label.checkbox
8
8
  = check_box_tag "names[]", repo.name, false, id: "names_#{sanitize_to_id(repo.name)}", multiple: true
9
9
  = repo.name
10
+ - if repo.private?
11
+ %span.tag.is-danger{style: "height: 1.5em"} private
10
12
  = link_to "@", repo.url
11
13
 
12
14
  .vspace-40
@@ -4,6 +4,7 @@
4
4
  = form_text_field f, :channel, size: 40, class: "input"
5
5
  = form_text_field f, :icon_emoji, size: 40, class: "input"
6
6
  = form_text_field f, :additional_text, size: 40, class: "input"
7
+ = form_text_field f, :display_name, size: 40, class: "input"
7
8
  .field.columns
8
9
  .column.is-8= f.submit "Update", class: "button is-primary"
9
10
  - if @rule.persisted?
@@ -41,7 +42,7 @@
41
42
  %tr
42
43
  %td repo:
43
44
  %td Match repository name.
44
- %td repo:hogelog/tokite
45
+ %td repo:cookpad/tokite
45
46
  %tr
46
47
  %td title:
47
48
  %td Match pull_request or issues title.
@@ -58,10 +59,22 @@
58
59
  %td user:
59
60
  %td Match user name.
60
61
  %td user:hogelog
62
+ %tr
63
+ %td label:
64
+ %td Match pull_request or issue label.
65
+ %td label:Feature
61
66
  %tr
62
67
  %td review_state:
63
68
  %td Match pull_request_review state.
64
69
  %td review_state:/commented|approved|changes_requested/
70
+ %tr
71
+ %td requested_reviewer:
72
+ %td Match user name of review requested reviewer.
73
+ %td requested_reviewer:hogelog
74
+ %tr
75
+ %td requested_team:
76
+ %td Match team name of review requested team.
77
+ %td requested_team:cookpad/chef
65
78
  %tr
66
79
  %td unspecified
67
80
  %td Match title or body field.
@@ -1,3 +1,3 @@
1
1
  module Tokite
2
- VERSION = '0.4.0'
2
+ VERSION = '0.5.0'
3
3
  end
@@ -2,6 +2,7 @@ create_table "tokite_repositories", force: :cascade do |t|
2
2
  t.string "name", limit: 200, null: false
3
3
  t.string "url", limit: 200, null: false
4
4
  t.datetime "created_at", null: false
5
+ t.boolean "private", null: false, default: false
5
6
  end
6
7
 
7
8
  add_index "tokite_repositories", ["name"], name: "tokite_repositories_uniq_name", unique: true, using: :btree
@@ -3,10 +3,11 @@ create_table "tokite_rules", force: :cascade do |t|
3
3
  t.string "name", limit: 50, null: false
4
4
  t.string "query", limit: 2000, null: false
5
5
  t.string "channel", limit: 100, null: false
6
- t.string "icon_emoji", limit: 20, null: false, default: ""
6
+ t.string "icon_emoji", limit: 30, null: false, default: ""
7
7
  t.string "additional_text", limit: 200, null: false, default: ""
8
8
  t.datetime "created_at", null: false
9
9
  t.datetime "updated_at", null: false
10
+ t.string "display_name", limit: 60, null: false, default: ""
10
11
  end
11
12
 
12
13
  add_index "tokite_rules", ["user_id", "name"], name: "tokite_rule_uniq_name", unique: true, using: :btree
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tokite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - hogelog
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-12 00:00:00.000000000 Z
11
+ date: 2023-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 5.1.1
19
+ version: '5.2'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 5.2.8.1
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
- version: 5.1.1
29
+ version: '5.2'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 5.2.8.1
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: pg
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +50,14 @@ dependencies:
44
50
  requirements:
45
51
  - - "~>"
46
52
  - !ruby/object:Gem::Version
47
- version: '5.0'
53
+ version: '5.1'
48
54
  type: :runtime
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
58
  - - "~>"
53
59
  - !ruby/object:Gem::Version
54
- version: '5.0'
60
+ version: '5.1'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: haml
57
63
  requirement: !ruby/object:Gem::Requirement
@@ -156,14 +162,14 @@ dependencies:
156
162
  requirements:
157
163
  - - ">="
158
164
  - !ruby/object:Gem::Version
159
- version: '0'
165
+ version: 3.9.0
160
166
  type: :development
161
167
  prerelease: false
162
168
  version_requirements: !ruby/object:Gem::Requirement
163
169
  requirements:
164
170
  - - ">="
165
171
  - !ruby/object:Gem::Version
166
- version: '0'
172
+ version: 3.9.0
167
173
  - !ruby/object:Gem::Dependency
168
174
  name: factory_bot_rails
169
175
  requirement: !ruby/object:Gem::Requirement
@@ -251,11 +257,11 @@ files:
251
257
  - schema/tokite_rules.schema
252
258
  - schema/tokite_secure_user_tokens.schema
253
259
  - schema/tokite_users.schema
254
- homepage: https://github.com/hogelog/tokite/
260
+ homepage: https://github.com/cookpad/tokite/
255
261
  licenses:
256
262
  - MIT
257
263
  metadata: {}
258
- post_install_message:
264
+ post_install_message:
259
265
  rdoc_options: []
260
266
  require_paths:
261
267
  - lib
@@ -270,9 +276,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
270
276
  - !ruby/object:Gem::Version
271
277
  version: '0'
272
278
  requirements: []
273
- rubyforge_project:
274
- rubygems_version: 2.6.11
275
- signing_key:
279
+ rubygems_version: 3.1.6
280
+ signing_key:
276
281
  specification_version: 4
277
282
  summary: Customizable Slack notification from GitHub
278
283
  test_files: []