simple_slack 0.2.6 → 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/lib/simple_slack/client.rb +5 -0
- data/lib/simple_slack/poster.rb +16 -2
- data/lib/simple_slack/toggl.rb +54 -0
- data/lib/simple_slack/toggls/toggl_dailyreport.rb +15 -0
- data/lib/simple_slack/toggls/toggl_entries_parameter.rb +45 -0
- data/lib/simple_slack/toggls/toggl_parameter.rb +52 -0
- data/lib/simple_slack/toggls/toggl_send_parameter.rb +47 -0
- data/lib/simple_slack/version.rb +1 -1
- data/simple_slack.gemspec +2 -0
- metadata +35 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f4bea98a9191153158ba48bea0d519bd418c039
|
4
|
+
data.tar.gz: 39d77eaf78dcda76c5dea8691d6d6100c4e6a37a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4921a67a6391220b7ebd244ed331dcf8e472085543f6a1a361e297856a001d09603f24056b2e4b9e940d2cb5a5add9b56d8f960d1bdd2a29482fdd48dae0c65
|
7
|
+
data.tar.gz: 9cf503c52509e2e2e953da9da1a79fb90574e1592c5e11d1352e696f7cd53c1d8957ea337ba5706ac745ee276d9081e0775475f1d112cf78107b04d2bce99790
|
data/lib/simple_slack/client.rb
CHANGED
@@ -2,6 +2,7 @@ require 'slack'
|
|
2
2
|
require 'simple_slack/getter'
|
3
3
|
require 'simple_slack/poster'
|
4
4
|
require 'simple_slack/botter'
|
5
|
+
require 'simple_slack/toggl'
|
5
6
|
|
6
7
|
class SimpleSlack::Client
|
7
8
|
def initialize(token)
|
@@ -21,4 +22,8 @@ class SimpleSlack::Client
|
|
21
22
|
def bot
|
22
23
|
@botter ||= SimpleSlack::Botter.new(@token, self)
|
23
24
|
end
|
25
|
+
|
26
|
+
def toggl(toggl_api_token = ENV['TOGGL_API_TOKEN'])
|
27
|
+
@toggl ||= SimpleSlack::Toggl.new(toggl_api_token, self)
|
28
|
+
end
|
24
29
|
end
|
data/lib/simple_slack/poster.rb
CHANGED
@@ -4,6 +4,13 @@ class SimpleSlack::Poster
|
|
4
4
|
@simple_slack = simple_slack
|
5
5
|
end
|
6
6
|
|
7
|
+
def channels(to: , text: , name: "slacker", **options)
|
8
|
+
to.all? do |t|
|
9
|
+
id = convert_channel_to_id(t.to_s)
|
10
|
+
send_chat({ username: name, channel: id, text: text }.merge(options))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
7
14
|
def channel(to: , text: , name: "slacker", **options)
|
8
15
|
id = convert_channel_to_id(to.to_s)
|
9
16
|
send_chat({ username: name, channel: id, text: text }.merge(options))
|
@@ -21,9 +28,16 @@ class SimpleSlack::Poster
|
|
21
28
|
end
|
22
29
|
end
|
23
30
|
|
24
|
-
def
|
31
|
+
def ims(to: , text: , name: "slacker", **options)
|
32
|
+
to.all? do |t|
|
33
|
+
id = convert_im_to_id(t.to_s)
|
34
|
+
send_chat({ username: name, channel: id, text: text }.merge(options))
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def im(to: , text: , name: "slacker", **options)
|
25
39
|
id = convert_im_to_id(to.to_s)
|
26
|
-
send_chat(username: name, channel: id, text: text)
|
40
|
+
send_chat({ username: name, channel: id, text: text }.merge(options))
|
27
41
|
end
|
28
42
|
|
29
43
|
private
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'togglv8'
|
2
|
+
require "simple_slack/toggls/toggl_parameter"
|
3
|
+
require "simple_slack/toggls/toggl_dailyreport"
|
4
|
+
require "simple_slack/toggls/toggl_dailyreport"
|
5
|
+
class SimpleSlack::Toggl
|
6
|
+
include TogglParameter
|
7
|
+
include TogglDailyreport
|
8
|
+
|
9
|
+
attr_accessor :toggl_client, :simple_client, :post_channels, :post_bot_name, :post_bot_image, :post_ims
|
10
|
+
|
11
|
+
URL = "https://toggl.com/"
|
12
|
+
TIMER_URL = "#{URL}app/timer"
|
13
|
+
|
14
|
+
def initialize(toggl_api_token, simple_slack_client)
|
15
|
+
@toggl_client = TogglV8::API.new(toggl_api_token)
|
16
|
+
@simple_client = simple_slack_client
|
17
|
+
@post_bot_name = "slacker"
|
18
|
+
@post_bot_image = ":joy:"
|
19
|
+
end
|
20
|
+
|
21
|
+
def configure
|
22
|
+
yield self
|
23
|
+
end
|
24
|
+
|
25
|
+
def post_message(type = :regular)
|
26
|
+
case type.to_s
|
27
|
+
when "morning"
|
28
|
+
post_message_by(send_morning_message)
|
29
|
+
when "regular"
|
30
|
+
post_message_by(send_regular_message)
|
31
|
+
when "noon"
|
32
|
+
post_message_by(send_noon_message)
|
33
|
+
when "after_noon"
|
34
|
+
post_message_by(send_after_noon_message)
|
35
|
+
when "night"
|
36
|
+
post_message_by(send_night_message)
|
37
|
+
when "dailyreport"
|
38
|
+
post_message_by(send_dailyreport_message)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def post_message_by(text)
|
45
|
+
if post_channels.empty? && post_ims.empty?
|
46
|
+
raise "メッセージの送り先チャンネル、IMが指定されていません"
|
47
|
+
end
|
48
|
+
simple_client.post.channels(to: post_channels, text: text, name: post_bot_name, icon_emoji: post_bot_image) unless post_channels.empty?
|
49
|
+
simple_client.post.ims(to: post_ims, text: text, name: post_bot_name, icon_emoji: post_bot_image) unless post_ims.empty?
|
50
|
+
text
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module TogglEntriesParameter
|
2
|
+
|
3
|
+
def entries
|
4
|
+
@entries ||= toggl_client.my_time_entries
|
5
|
+
end
|
6
|
+
|
7
|
+
def day_entries(day = Time.now.to_date)
|
8
|
+
entries.select do |entry|
|
9
|
+
start_date = Time.parse(entry["start"]).getlocal("+09:00").to_date
|
10
|
+
start_date == day
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def latest_entry
|
15
|
+
entries.sort_by{ |entry| entry["start"] }.last
|
16
|
+
end
|
17
|
+
|
18
|
+
def working_entry
|
19
|
+
if latest_entry["stop"].nil?
|
20
|
+
latest_entry
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def entry_info(entry = latest_entry)
|
25
|
+
# 現在作業中(終了時間がない)であれば現在日時を終了時間として取得
|
26
|
+
stop_time_org = entry["stop"].nil? ? Time.now : Time.parse(entry["stop"])
|
27
|
+
|
28
|
+
start_time = Time.parse(entry["start"]).getlocal("+09:00")
|
29
|
+
stop_time = stop_time_org.getlocal("+09:00")
|
30
|
+
diff_time = (stop_time - start_time)/3600
|
31
|
+
|
32
|
+
# 0.1h 以下の表示になるようであれば 分表示に変更する
|
33
|
+
if diff_time >= 0.1
|
34
|
+
work_time = "#{diff_time.round(2)}h"
|
35
|
+
else
|
36
|
+
work_time = "#{(diff_time * 60).round(2)}m"
|
37
|
+
end
|
38
|
+
|
39
|
+
tag = entry["tags"].join(" ") unless entry["tags"].nil?
|
40
|
+
description = entry["description"]
|
41
|
+
|
42
|
+
"#{tag} #{description} \(#{work_time}\)"
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require_relative 'toggl_entries_parameter'
|
2
|
+
require_relative 'toggl_send_parameter'
|
3
|
+
module TogglParameter
|
4
|
+
include TogglEntriesParameter
|
5
|
+
include TogglSendParameter
|
6
|
+
|
7
|
+
def user
|
8
|
+
@user ||= toggl_client.me
|
9
|
+
end
|
10
|
+
|
11
|
+
def workspaces
|
12
|
+
@workspaces ||= toggl_client.my_workspaces(user)
|
13
|
+
end
|
14
|
+
|
15
|
+
def workspace(id: nil, name: nil)
|
16
|
+
if id
|
17
|
+
workspaces.find{ |work| work["id"] == id }
|
18
|
+
elsif name
|
19
|
+
workspaces.find{ |work| work["name"] == name }
|
20
|
+
else
|
21
|
+
workspaces.first
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def projects
|
26
|
+
@projects ||= toggl_client.my_projects
|
27
|
+
end
|
28
|
+
|
29
|
+
def project(id: nil, name: nil)
|
30
|
+
if id
|
31
|
+
projects.find{ |project| project["id"] == id }
|
32
|
+
elsif name
|
33
|
+
projects.find{ |project| project["name"] == name }
|
34
|
+
else
|
35
|
+
projects.first
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def tags
|
40
|
+
@tags ||= toggl_client.my_tags
|
41
|
+
end
|
42
|
+
|
43
|
+
def tag(id: nil, name: nil)
|
44
|
+
if id
|
45
|
+
tags.find{ |tag| tag["id"] == id }
|
46
|
+
elsif name
|
47
|
+
tags.find{ |tag| tag["name"] == name }
|
48
|
+
else
|
49
|
+
tags.first
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module TogglSendParameter
|
2
|
+
def send_morning_message
|
3
|
+
message = "おはようございます。"
|
4
|
+
|
5
|
+
send_message_select(message)
|
6
|
+
end
|
7
|
+
|
8
|
+
def send_regular_message(current_time = Time.now)
|
9
|
+
current_time_s = current_time.strftime("%Y年%m月%d日: %H時")
|
10
|
+
message = "#{current_time_s}です。"
|
11
|
+
|
12
|
+
send_message_select(message)
|
13
|
+
end
|
14
|
+
|
15
|
+
def send_noon_message
|
16
|
+
if working_entry
|
17
|
+
"お昼です。休憩をするなら作業内容を止めてください。\n■現在作業中の内容。\n#{entry_info(working_entry)}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def send_after_noon_message
|
22
|
+
message = "お昼休み終了です。"
|
23
|
+
send_message_select(message)
|
24
|
+
end
|
25
|
+
|
26
|
+
def send_night_message
|
27
|
+
if working_entry
|
28
|
+
message = "業務終了の時間です。残業がないなら作業内容を止めてください。\n■現在作業中の内容。\n#{entry_info(working_entry)}"
|
29
|
+
"#{message}\n\nもし残業があるなら終了のリマインドを設定してください。\n\n```\n/remind me in 終了時間 to toggle stop\n```"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def send_dailyreport_message(date = Date.today)
|
34
|
+
date_s = date.strftime("%Y年%m月%d日")
|
35
|
+
"#{date_s}の日報です\n\n#{dailyreport}"
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def send_message_select(message)
|
41
|
+
if working_entry
|
42
|
+
"#{message}\n■現在作業中の内容。\n#{entry_info(working_entry)}"
|
43
|
+
else
|
44
|
+
"#{message}\n■現在作業中の内容はありません。下記より設定してください。\n#{SimpleSlack::Toggl::TIMER_URL}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/simple_slack/version.rb
CHANGED
data/simple_slack.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_slack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- toririn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-07-
|
11
|
+
date: 2016-07-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,34 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 1.2.1
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: togglv8
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: awesome_print
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
69
97
|
description: simple use slack
|
70
98
|
email:
|
71
99
|
- toririn.paftako@gmail.com
|
@@ -88,6 +116,11 @@ files:
|
|
88
116
|
- lib/simple_slack/client.rb
|
89
117
|
- lib/simple_slack/getter.rb
|
90
118
|
- lib/simple_slack/poster.rb
|
119
|
+
- lib/simple_slack/toggl.rb
|
120
|
+
- lib/simple_slack/toggls/toggl_dailyreport.rb
|
121
|
+
- lib/simple_slack/toggls/toggl_entries_parameter.rb
|
122
|
+
- lib/simple_slack/toggls/toggl_parameter.rb
|
123
|
+
- lib/simple_slack/toggls/toggl_send_parameter.rb
|
91
124
|
- lib/simple_slack/version.rb
|
92
125
|
- simple_slack.gemspec
|
93
126
|
homepage: ''
|
@@ -116,4 +149,3 @@ signing_key:
|
|
116
149
|
specification_version: 4
|
117
150
|
summary: simple use slack
|
118
151
|
test_files: []
|
119
|
-
has_rdoc:
|