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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 379a36019341bb032cc54179b83fa534dd3e1b60
4
- data.tar.gz: 7cda8018351ce8edd97f8a005260d221d2a8bb77
3
+ metadata.gz: f27280d78b56494a76dcd495c4b74521db4ae7a6
4
+ data.tar.gz: 2283531da1e02b6eef9fdc6c2b423cd5af9f3d04
5
5
  SHA512:
6
- metadata.gz: 7c34fc0cb26ae30e1ff13714bedfc6128fe402687a382fb095aad731b81d6d0bc721c970c041cda348c98a1605adc1e9961dc899bb575d7835f8fdbb37f9b256
7
- data.tar.gz: d117ddb72f8702e3b11be1a3a56f0365020e269541466f6d408582fda172de9b812078b421f80a4350757fba3a43194db6d4bdda46c7c9b2f7afbfd7abada927
6
+ metadata.gz: 727b7c90c75d729b28e35e58265287e093af7b3b76f079dc2668a2fa133a6c99b695ea55cb8fef89112f610e5631e125b0a375bc10a47004e8a548feeaae8013
7
+ data.tar.gz: d94f268833c81914e6886b1a929c22ec3efcafd9c789fef980be1dc018e84807df5b5749d79519e5e41a07086a781a62ebc4fb952e05d25b64f10de3d2434240
@@ -17,3 +17,5 @@ Metrics/LineLength:
17
17
  Enabled: false
18
18
  Style/StringLiterals:
19
19
  Enabled: false
20
+ Style/TrailingComma:
21
+ Enabled: false
@@ -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
- def initialize(history, users)
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
- ret = Hash[e.symbolize_keys]
12
- ret[:profile] = Hash[ret[:profile].symbolize_keys]
13
- ret
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
- @history.map do |e|
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
- user = @users.find { |e| e[:id] == user_id }
31
- raise "unknown user: #{user_id}" unless user
32
- Komonjo::Model::User.create(user)
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: 'Hello, world' },
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,17 @@
1
+ module Komonjo
2
+ module Model
3
+ module Filter
4
+ module EmojiFilter
5
+ extend Base
6
+
7
+ def self.pattern
8
+ @pattern ||= /:\S+?:/
9
+ end
10
+
11
+ def self.mixin
12
+ Komonjo::Model::Mixin::EmojiContainable
13
+ end
14
+ end
15
+ end
16
+ end
17
+ 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
- "\t- #{@text}\n"
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,17 @@
1
+ module Komonjo
2
+ module Model
3
+ module Mixin
4
+ # URLContainable
5
+ module URLContainable
6
+ def type
7
+ :url
8
+ end
9
+
10
+ def embed(_)
11
+ url = text[1..-2]
12
+ @markdown = "[#{url}](#{url})"
13
+ end
14
+ end
15
+ end
16
+ end
17
+ 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,6 @@
1
+ module Komonjo
2
+ module Resource
3
+ class Base
4
+ end
5
+ end
6
+ 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
- gateway = Komonjo::Gateway::MessagesGateway.new(history, users)
13
+ emojis = connection.emoji_list
14
+ gateway = Komonjo::Gateway::MessagesGateway.new(history, users, emojis)
14
15
  gateway.messages
15
16
  end
16
17
  end
@@ -1,3 +1,3 @@
1
1
  module Komonjo
2
- VERSION = "0.1.8".freeze
2
+ VERSION = "0.1.9".freeze
3
3
  end
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.8
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-09-19 00:00:00.000000000 Z
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