ruboty-slack_events 0.2.0 → 0.3.0
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 +4 -4
- data/.rspec +1 -0
- data/CHANGELOG.md +4 -0
- data/Rakefile +3 -1
- data/lib/ruboty/adapters/slack_events.rb +4 -4
- data/lib/ruboty/slack_events/filter/rubotify.rb +66 -0
- data/lib/ruboty/slack_events/{mention → filter}/slackify.rb +2 -1
- data/lib/ruboty/slack_events/version.rb +1 -1
- data/lib/ruboty/slack_events.rb +2 -2
- metadata +5 -4
- data/lib/ruboty/slack_events/mention/rubotify.rb +0 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c779a46edaf630035527d72df0e40a57eb8104421f8151eeb8c3623202ce8537
|
4
|
+
data.tar.gz: bcbf6cb2c83dc15cea1c270404820dd6f9bdefa570de19478425c77265915626
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c3c5e4fd09c22b7c52adcdcc556494d83cf559d88f548c71e2f050c939e004b8d3b793be1f81dbe03e95ce327aab65009d57001a1c2d9b48be7a8c0fa20dfdb1
|
7
|
+
data.tar.gz: 0f4192b9d52fb4c49ef47cdd7986ea50b86b5af077dfc392a4d62062867b5884094ea79b222e093dd7947bff122838c37b88e7a6146e63fce54fb8b813ba89b2
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
data/CHANGELOG.md
CHANGED
data/Rakefile
CHANGED
@@ -3,9 +3,11 @@
|
|
3
3
|
require "bundler/gem_tasks"
|
4
4
|
require "rubocop/rake_task"
|
5
5
|
require "bump/tasks"
|
6
|
+
require "rspec/core/rake_task"
|
6
7
|
|
7
8
|
Bump.changelog = true
|
8
9
|
|
9
10
|
RuboCop::RakeTask.new
|
11
|
+
RSpec::Core::RakeTask.new(:spec)
|
10
12
|
|
11
|
-
task default:
|
13
|
+
task default: %i[rubocop spec]
|
@@ -62,12 +62,12 @@ module Ruboty
|
|
62
62
|
@resolvers ||= ::Ruboty::SlackEvents::Resolvers.new(slack_client:)
|
63
63
|
end
|
64
64
|
|
65
|
-
def slackify #: ::Ruboty::SlackEvents::
|
66
|
-
@slackify ||= ::Ruboty::SlackEvents::
|
65
|
+
def slackify #: ::Ruboty::SlackEvents::Filter::Slackify
|
66
|
+
@slackify ||= ::Ruboty::SlackEvents::Filter::Slackify.new(resolvers:)
|
67
67
|
end
|
68
68
|
|
69
|
-
def rubotify #: ::Ruboty::SlackEvents::
|
70
|
-
@rubotify ||= ::Ruboty::SlackEvents::
|
69
|
+
def rubotify #: ::Ruboty::SlackEvents::Filter::Rubotify
|
70
|
+
@rubotify ||= ::Ruboty::SlackEvents::Filter::Rubotify.new(resolvers:)
|
71
71
|
end
|
72
72
|
|
73
73
|
def ignore_bot_message?
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "cgi"
|
4
|
+
|
5
|
+
module Ruboty
|
6
|
+
module SlackEvents
|
7
|
+
module Filter
|
8
|
+
# Convert Slack text format to Ruboty format
|
9
|
+
# For more details of Slack text format, see: https://api.slack.com/reference/surfaces/formatting
|
10
|
+
class Rubotify
|
11
|
+
attr_reader :resolvers #: Resolvers
|
12
|
+
|
13
|
+
# @rbs resolvers: Resolvers
|
14
|
+
def initialize(resolvers:)
|
15
|
+
@resolvers = resolvers
|
16
|
+
end
|
17
|
+
|
18
|
+
# @rbs text: String
|
19
|
+
def call(text) #: String
|
20
|
+
text
|
21
|
+
.then { replace_user_mentions(_1) }
|
22
|
+
.then { replace_link(_1) }
|
23
|
+
.then { unescape(_1) }
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
# @rbs text: String
|
29
|
+
def replace_user_mentions(text) #: String
|
30
|
+
text.gsub(/<@(?<user_id>\w+)>/) do |user_mention|
|
31
|
+
user_id = Regexp.last_match[:user_id]
|
32
|
+
|
33
|
+
user_info = resolvers.user_resolver.user_info_by_id(user_id)
|
34
|
+
|
35
|
+
next user_mention unless user_info
|
36
|
+
|
37
|
+
"@#{user_info.name}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# @rbs text: String
|
42
|
+
def replace_link(text) #: String
|
43
|
+
text.gsub(/<(?<url>[^\>|]+)(?:\|(?<text>[^\>]+))?>/) do |link|
|
44
|
+
url = Regexp.last_match[:url]
|
45
|
+
text = Regexp.last_match[:text]
|
46
|
+
|
47
|
+
begin
|
48
|
+
next link unless URI.parse(url).scheme
|
49
|
+
rescue URI::InvalidURIError, URI::InvalidComponentError
|
50
|
+
next link
|
51
|
+
end
|
52
|
+
|
53
|
+
text || url
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# Unescape HTML entities in the text.
|
58
|
+
# See: https://api.slack.com/reference/surfaces/formatting#escaping
|
59
|
+
# @rbs text: String
|
60
|
+
def unescape(text) #: String
|
61
|
+
CGI.unescapeHTML(text)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/ruboty/slack_events.rb
CHANGED
@@ -9,8 +9,8 @@ end
|
|
9
9
|
require_relative "slack_events/version"
|
10
10
|
|
11
11
|
require_relative "slack_events/api/socket_client"
|
12
|
-
require_relative "slack_events/
|
13
|
-
require_relative "slack_events/
|
12
|
+
require_relative "slack_events/filter/slackify"
|
13
|
+
require_relative "slack_events/filter/rubotify"
|
14
14
|
require_relative "slack_events/resolvers"
|
15
15
|
require_relative "slack_events/logger"
|
16
16
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruboty-slack_events
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomoya Chiba
|
8
8
|
bindir: exe
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-04-
|
10
|
+
date: 2025-04-04 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: async-websocket
|
@@ -58,6 +58,7 @@ executables: []
|
|
58
58
|
extensions: []
|
59
59
|
extra_rdoc_files: []
|
60
60
|
files:
|
61
|
+
- ".rspec"
|
61
62
|
- ".rubocop.yml"
|
62
63
|
- CHANGELOG.md
|
63
64
|
- CODE_OF_CONDUCT.md
|
@@ -69,9 +70,9 @@ files:
|
|
69
70
|
- lib/ruboty/slack_events.rb
|
70
71
|
- lib/ruboty/slack_events/api/socket_client.rb
|
71
72
|
- lib/ruboty/slack_events/app_info.rb
|
73
|
+
- lib/ruboty/slack_events/filter/rubotify.rb
|
74
|
+
- lib/ruboty/slack_events/filter/slackify.rb
|
72
75
|
- lib/ruboty/slack_events/logger.rb
|
73
|
-
- lib/ruboty/slack_events/mention/rubotify.rb
|
74
|
-
- lib/ruboty/slack_events/mention/slackify.rb
|
75
76
|
- lib/ruboty/slack_events/resolvers.rb
|
76
77
|
- lib/ruboty/slack_events/resolvers/user_resolver.rb
|
77
78
|
- lib/ruboty/slack_events/version.rb
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Ruboty
|
4
|
-
module SlackEvents
|
5
|
-
module Mention
|
6
|
-
class Rubotify
|
7
|
-
attr_reader :resolvers #: Resolvers
|
8
|
-
|
9
|
-
# @rbs resolvers: Resolvers
|
10
|
-
def initialize(resolvers:)
|
11
|
-
@resolvers = resolvers
|
12
|
-
end
|
13
|
-
|
14
|
-
# @rbs text: String
|
15
|
-
def call(text) #: String
|
16
|
-
replace_user_mentions(text)
|
17
|
-
end
|
18
|
-
|
19
|
-
# @rbs text: String
|
20
|
-
def replace_user_mentions(text) #: String
|
21
|
-
text.gsub(/<@(?<user_id>\w+)>/) do |user_mention|
|
22
|
-
user_id = Regexp.last_match[:user_id]
|
23
|
-
|
24
|
-
user_info = resolvers.user_resolver.user_info_by_id(user_id)
|
25
|
-
|
26
|
-
next user_mention unless user_info
|
27
|
-
|
28
|
-
"@#{user_info.name}"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|