komonjo 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -0
- data/lib/komonjo.rb +21 -0
- data/lib/komonjo/gateways/messages_gateway.rb +23 -8
- data/lib/komonjo/mocks/slack_mock.rb +1 -1
- data/lib/komonjo/models/filters/base.rb +33 -0
- data/lib/komonjo/models/filters/emoji_filter.rb +17 -0
- data/lib/komonjo/models/filters/reply_filter.rb +18 -0
- data/lib/komonjo/models/filters/url_filter.rb +18 -0
- data/lib/komonjo/models/message.rb +19 -1
- data/lib/komonjo/models/mixins/emoji_containable.rb +18 -0
- data/lib/komonjo/models/mixins/reply_containable.rb +18 -0
- data/lib/komonjo/models/mixins/url_containable.rb +17 -0
- data/lib/komonjo/models/partial_message.rb +56 -0
- data/lib/komonjo/models/partial_message_factory.rb +18 -0
- data/lib/komonjo/resources/base.rb +6 -0
- data/lib/komonjo/resources/message.rb +29 -0
- data/lib/komonjo/services/messages_service.rb +2 -1
- data/lib/komonjo/version.rb +1 -1
- metadata +13 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f27280d78b56494a76dcd495c4b74521db4ae7a6
|
4
|
+
data.tar.gz: 2283531da1e02b6eef9fdc6c2b423cd5af9f3d04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 727b7c90c75d729b28e35e58265287e093af7b3b76f079dc2668a2fa133a6c99b695ea55cb8fef89112f610e5631e125b0a375bc10a47004e8a548feeaae8013
|
7
|
+
data.tar.gz: d94f268833c81914e6886b1a929c22ec3efcafd9c789fef980be1dc018e84807df5b5749d79519e5e41a07086a781a62ebc4fb952e05d25b64f10de3d2434240
|
data/.rubocop.yml
CHANGED
data/lib/komonjo.rb
CHANGED
@@ -1,23 +1,44 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
1
3
|
require 'komonjo/extensions/hash_extensions'
|
2
4
|
|
3
5
|
require 'komonjo/client'
|
4
6
|
require 'komonjo/version'
|
7
|
+
|
5
8
|
require 'komonjo/connections/slack_connection'
|
9
|
+
|
6
10
|
require 'komonjo/extensions/to_json'
|
11
|
+
|
7
12
|
require 'komonjo/gateways/channels_gateway'
|
8
13
|
require 'komonjo/gateways/users_gateway'
|
9
14
|
require 'komonjo/gateways/messages_gateway'
|
10
15
|
require 'komonjo/gateways/emojis_gateway'
|
16
|
+
|
11
17
|
require 'komonjo/models/api/response_base'
|
18
|
+
require 'komonjo/models/filters/base'
|
19
|
+
require 'komonjo/models/filters/emoji_filter'
|
20
|
+
require 'komonjo/models/filters/reply_filter'
|
21
|
+
require 'komonjo/models/filters/url_filter'
|
22
|
+
require 'komonjo/models/mixins/emoji_containable'
|
23
|
+
require 'komonjo/models/mixins/reply_containable'
|
24
|
+
require 'komonjo/models/mixins/url_containable'
|
12
25
|
require 'komonjo/models/channel'
|
13
26
|
require 'komonjo/models/message'
|
27
|
+
require 'komonjo/models/partial_message'
|
28
|
+
require 'komonjo/models/partial_message_factory'
|
14
29
|
require 'komonjo/models/profile'
|
15
30
|
require 'komonjo/models/user'
|
16
31
|
require 'komonjo/models/emoji'
|
32
|
+
|
33
|
+
require 'komonjo/resources/base'
|
34
|
+
require 'komonjo/resources/message'
|
35
|
+
|
17
36
|
require 'komonjo/mocks/slack_mock'
|
37
|
+
|
18
38
|
require 'komonjo/services/slack_service'
|
19
39
|
require 'komonjo/services/channels_service'
|
20
40
|
require 'komonjo/services/users_service'
|
21
41
|
require 'komonjo/services/login_service'
|
22
42
|
require 'komonjo/services/messages_service'
|
23
43
|
require 'komonjo/services/emojis_service'
|
44
|
+
|
@@ -5,21 +5,29 @@ module Komonjo
|
|
5
5
|
# Merge history and users
|
6
6
|
class MessagesGateway
|
7
7
|
using HashExtensions
|
8
|
-
|
8
|
+
attr_reader :history, :users, :emojis
|
9
|
+
|
10
|
+
def initialize(history, users, emojis)
|
9
11
|
@history = history.map { |e| Hash[e.symbolize_keys] }
|
10
12
|
@users = users.map do |e|
|
11
|
-
|
12
|
-
|
13
|
-
|
13
|
+
h = Hash[e.symbolize_keys]
|
14
|
+
h[:profile] = Hash[h[:profile].symbolize_keys]
|
15
|
+
Komonjo::Model::User.create(h)
|
16
|
+
end
|
17
|
+
@emojis = emojis.map do |(name, url)|
|
18
|
+
Komonjo::Model::Emoji.create(name, url)
|
14
19
|
end
|
15
20
|
end
|
16
21
|
|
17
22
|
def messages
|
18
|
-
|
23
|
+
history.map do |e|
|
19
24
|
next e unless e[:user]
|
20
25
|
Komonjo::Model::Message.create(e).tap do |message|
|
21
26
|
message.user = find_user(e[:user])
|
22
27
|
message.text = CGI.unescapeHTML(message.text)
|
28
|
+
message.partial_messages.each do |e|
|
29
|
+
e.embed(embed_data)
|
30
|
+
end
|
23
31
|
end
|
24
32
|
end
|
25
33
|
end
|
@@ -27,9 +35,16 @@ module Komonjo
|
|
27
35
|
private
|
28
36
|
|
29
37
|
def find_user(user_id)
|
30
|
-
|
31
|
-
|
32
|
-
|
38
|
+
@users.find { |e| e.id == user_id }.tap do |e|
|
39
|
+
raise "unknown user: #{user_id}" unless e
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def embed_data
|
44
|
+
@embed_data ||= {
|
45
|
+
users: users,
|
46
|
+
emojis: emojis,
|
47
|
+
}
|
33
48
|
end
|
34
49
|
end
|
35
50
|
end
|
@@ -19,7 +19,7 @@ module Komonjo
|
|
19
19
|
|
20
20
|
def channels_history(channel_name)
|
21
21
|
[{ type: 'message', user: 'id001', channel: channel_name,
|
22
|
-
text: '
|
22
|
+
text: '<@id001> hello :bow:' },
|
23
23
|
{ type: 'message', user: 'id002', channel: channel_name,
|
24
24
|
text: 'This is Komonjo' }]
|
25
25
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Komonjo
|
2
|
+
module Model
|
3
|
+
module Filter
|
4
|
+
module Base
|
5
|
+
def match(text)
|
6
|
+
return false unless text
|
7
|
+
text.match(pattern)
|
8
|
+
end
|
9
|
+
|
10
|
+
def parse(text)
|
11
|
+
m = text.match(pattern)
|
12
|
+
if text.index(pattern) == 0
|
13
|
+
_, b = text.split(pattern, 2)
|
14
|
+
return [
|
15
|
+
{ text: m[0], matched: true },
|
16
|
+
{ text: b, matched: false },
|
17
|
+
].delete_if { |e| e[:text].nil? || e[:text] == "" }
|
18
|
+
end
|
19
|
+
a, c = text.split(pattern, 2)
|
20
|
+
return [
|
21
|
+
{ text: a, matched: false },
|
22
|
+
{ text: m[0], matched: true },
|
23
|
+
{ text: c, matched: false },
|
24
|
+
].delete_if { |e| e[:text].nil? || e[:text] == "" }
|
25
|
+
end
|
26
|
+
|
27
|
+
def pattern
|
28
|
+
//
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Komonjo
|
2
|
+
module Model
|
3
|
+
module Filter
|
4
|
+
# URLFilter
|
5
|
+
module ReplyFilter
|
6
|
+
extend Base
|
7
|
+
|
8
|
+
def self.pattern
|
9
|
+
@pattern ||= %r{<@\S+?>}
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.mixin
|
13
|
+
Komonjo::Model::Mixin::ReplyContainable
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Komonjo
|
2
|
+
module Model
|
3
|
+
module Filter
|
4
|
+
# URLFilter
|
5
|
+
module URLFilter
|
6
|
+
extend Base
|
7
|
+
|
8
|
+
def self.pattern
|
9
|
+
@pattern ||= %r{<https?://\S+?>}
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.mixin
|
13
|
+
Komonjo::Model::Mixin::URLContainable
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -14,6 +14,23 @@ module Komonjo
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
def partial_messages
|
18
|
+
@partial_messages ||=
|
19
|
+
begin
|
20
|
+
ret = []
|
21
|
+
tmp = first_partial_message
|
22
|
+
while tmp
|
23
|
+
ret << tmp
|
24
|
+
tmp = tmp.next
|
25
|
+
end
|
26
|
+
ret
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def first_partial_message
|
31
|
+
@first_partial_message ||= PartialMessageFactory.build(text)
|
32
|
+
end
|
33
|
+
|
17
34
|
def timestamp
|
18
35
|
Time.at(@ts.to_f).strftime('%Y-%m-%d %H:%M:%S')
|
19
36
|
end
|
@@ -35,7 +52,8 @@ module Komonjo
|
|
35
52
|
end
|
36
53
|
|
37
54
|
def text_markdown
|
38
|
-
|
55
|
+
t = partial_messages.map(&:markdown).join
|
56
|
+
"\t- #{t}\n"
|
39
57
|
end
|
40
58
|
|
41
59
|
def to_json(*args)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Komonjo
|
2
|
+
module Model
|
3
|
+
module Mixin
|
4
|
+
module EmojiContainable
|
5
|
+
def type
|
6
|
+
:emoji
|
7
|
+
end
|
8
|
+
|
9
|
+
def embed(data)
|
10
|
+
name = text[1..-2]
|
11
|
+
data[:emojis].any? do |e|
|
12
|
+
@markdown = "![emoji:#{e.name}](#{e.url})" if e.name == name
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Komonjo
|
2
|
+
module Model
|
3
|
+
module Mixin
|
4
|
+
module ReplyContainable
|
5
|
+
def type
|
6
|
+
:reply
|
7
|
+
end
|
8
|
+
|
9
|
+
def embed(data)
|
10
|
+
id = text[2..-2]
|
11
|
+
data[:users].any? do |u|
|
12
|
+
@markdown = "@#{u.name}" if u.id == id
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Komonjo
|
2
|
+
module Model
|
3
|
+
class PartialMessage
|
4
|
+
attr_accessor :next
|
5
|
+
attr_reader :text
|
6
|
+
attr_reader :filters
|
7
|
+
attr_reader :markdown
|
8
|
+
|
9
|
+
def initialize(text, filters)
|
10
|
+
@text = text
|
11
|
+
@markdown = text
|
12
|
+
@filters = filters
|
13
|
+
parse
|
14
|
+
end
|
15
|
+
|
16
|
+
def parse
|
17
|
+
f = filters.find { |e| e.match(text) }
|
18
|
+
return unless f
|
19
|
+
arr = f.parse(text)
|
20
|
+
case arr.size
|
21
|
+
when 1
|
22
|
+
a, = arr
|
23
|
+
@text = a[:text]
|
24
|
+
extend f.mixin
|
25
|
+
when 2
|
26
|
+
a, b = arr
|
27
|
+
@text = a[:text]
|
28
|
+
if a[:matched]
|
29
|
+
extend f.mixin
|
30
|
+
@next = PartialMessage.new(b[:text], filters)
|
31
|
+
@next.parse
|
32
|
+
else
|
33
|
+
@next = PartialMessage.new(b[:text], filters).tap do |e|
|
34
|
+
e.extend f.mixin
|
35
|
+
end
|
36
|
+
end
|
37
|
+
when 3
|
38
|
+
a, b, c = arr
|
39
|
+
@text = a[:text]
|
40
|
+
@next = PartialMessage.new(b[:text], filters).tap do |e|
|
41
|
+
e.extend f.mixin
|
42
|
+
e.next = PartialMessage.new(c[:text], filters).tap(&:parse)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
self
|
46
|
+
end
|
47
|
+
|
48
|
+
def type
|
49
|
+
:text
|
50
|
+
end
|
51
|
+
|
52
|
+
def embed(*)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
module Komonjo
|
3
|
+
module Model
|
4
|
+
module PartialMessageFactory
|
5
|
+
def self.build(text)
|
6
|
+
Komonjo::Model::PartialMessage.new(text, filters)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.filters
|
10
|
+
@filters ||= [
|
11
|
+
Komonjo::Model::Filter::ReplyFilter,
|
12
|
+
Komonjo::Model::Filter::URLFilter,
|
13
|
+
Komonjo::Model::Filter::EmojiFilter,
|
14
|
+
]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Komonjo
|
2
|
+
module Resource
|
3
|
+
# Resource representation for Komonjo::Model::Message
|
4
|
+
class Message < Base
|
5
|
+
attr_reader :model
|
6
|
+
|
7
|
+
def initialize(model)
|
8
|
+
@model = model
|
9
|
+
end
|
10
|
+
|
11
|
+
def as_json
|
12
|
+
{
|
13
|
+
markdown: model.markdown,
|
14
|
+
ts: model.ts,
|
15
|
+
type: model.type,
|
16
|
+
channel: model.channel,
|
17
|
+
user: model.user,
|
18
|
+
text: model.text,
|
19
|
+
edited: model.edited,
|
20
|
+
subtype: model.subtype,
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_json(*args)
|
25
|
+
as_json.to_json(*args)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -10,7 +10,8 @@ module Komonjo
|
|
10
10
|
connection = connection(@api_token)
|
11
11
|
history = connection.channels_history(opts)
|
12
12
|
users = connection.users_list
|
13
|
-
|
13
|
+
emojis = connection.emoji_list
|
14
|
+
gateway = Komonjo::Gateway::MessagesGateway.new(history, users, emojis)
|
14
15
|
gateway.messages
|
15
16
|
end
|
16
17
|
end
|
data/lib/komonjo/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: komonjo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hkdnet
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slack-api
|
@@ -110,9 +110,20 @@ files:
|
|
110
110
|
- lib/komonjo/models/api/response_base.rb
|
111
111
|
- lib/komonjo/models/channel.rb
|
112
112
|
- lib/komonjo/models/emoji.rb
|
113
|
+
- lib/komonjo/models/filters/base.rb
|
114
|
+
- lib/komonjo/models/filters/emoji_filter.rb
|
115
|
+
- lib/komonjo/models/filters/reply_filter.rb
|
116
|
+
- lib/komonjo/models/filters/url_filter.rb
|
113
117
|
- lib/komonjo/models/message.rb
|
118
|
+
- lib/komonjo/models/mixins/emoji_containable.rb
|
119
|
+
- lib/komonjo/models/mixins/reply_containable.rb
|
120
|
+
- lib/komonjo/models/mixins/url_containable.rb
|
121
|
+
- lib/komonjo/models/partial_message.rb
|
122
|
+
- lib/komonjo/models/partial_message_factory.rb
|
114
123
|
- lib/komonjo/models/profile.rb
|
115
124
|
- lib/komonjo/models/user.rb
|
125
|
+
- lib/komonjo/resources/base.rb
|
126
|
+
- lib/komonjo/resources/message.rb
|
116
127
|
- lib/komonjo/services/channels_service.rb
|
117
128
|
- lib/komonjo/services/emojis_service.rb
|
118
129
|
- lib/komonjo/services/login_service.rb
|