komonjo 0.1.8 → 0.1.9
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/.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 = "" 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
|