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 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