ruboty-ragoon 0.4.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b533e41028a40a84be238a9e7afc689f68fabc5c
4
- data.tar.gz: aa714ff277ee2c8ab6440dfcac6876b7928625c7
3
+ metadata.gz: 365fcaa8047997897a5982d851ba45aa1269d063
4
+ data.tar.gz: 3d5277c7becd73d215ede7d85f0b7fefe35c4e27
5
5
  SHA512:
6
- metadata.gz: 81d9eb366380ebe52f289cbae5f3465554ab9941d3c9a0d1ac35a99969aff592ad97594581f9aba69a5975288ccac764aaa95bc05bb3cb4a5ed63a5feada28ed
7
- data.tar.gz: fdc12b1edf2ff7a373e2e622ec0a16b0b8bc9f3cb7d2f2bcc2ed0d862afd647f4ca46f906ded8494f2f0fc42ca5cda63ae5e3bd8519142c59036dd4a0a1de951
6
+ metadata.gz: aec5ae459f34e10833b829582fdd8b3960f1746b1d5e44676ac166a5491b6b425a591e0a5de0794b1179a3c5ecbbdef736a6a61041b3fe3ab0c9d80db1c1da4c
7
+ data.tar.gz: 52b8c29e780656c57567f3a75aa67666f319207aa7dfd2dcf8d41099f4be33429eebe3fabf7aee54343aefa9d0abf5978c5a8408b08eebdd984ee641535c834e
data/README.md CHANGED
@@ -22,7 +22,31 @@ Set these variables to connect your Garoon (required by Ragoon)
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ ### Event
26
+
27
+ - `grn event[ date]`
28
+ - fetch events specified by `date`
29
+ - `date` allows `yesterday`, `today`, `tomorrow` and string that can bs parsed by `Date.parse`
30
+ - default : `today`
31
+ - private event
32
+ - mask place and description when replies in channel
33
+ - show place and detail when replies in direct message
34
+
35
+ ### Notification
36
+
37
+ - `grn notice`
38
+ - show today's unread notifications
39
+ - replies only first time
40
+ - reminds notified ids in `Ruboty::Brains`
41
+ - better to use with `ruboty-cron`
42
+ - e.g) `ruboty add job "*/10 8-22 * * *" grn notice`
43
+
44
+ ### Remind
45
+
46
+ - `grn remind`
47
+ - remind event before 3 minutes at start
48
+ - better to use with `ruboty-cron`
49
+ - e.g) `ruboty add job "* 8-22 * * *" grn remind`
26
50
 
27
51
  ## License
28
52
 
@@ -0,0 +1,13 @@
1
+ module Ruboty::Actions::Ragoon
2
+ class Remind < ::Ruboty::Actions::Base
3
+ include ::Ruboty::Actions::Ragoon
4
+
5
+ def call
6
+ reminder = ::Ruboty::Ragoon::Remind.new(message.robot.brain)
7
+ events = reminder.retrieve
8
+ if events.count > 0
9
+ message.reply(events.render(private: private?, template: 'remind'))
10
+ end
11
+ end
12
+ end
13
+ end
@@ -3,6 +3,7 @@ module Ruboty
3
3
  class Ragoon < Base
4
4
  on(/grn event(?<date>\Z|\s+.+)/, name: 'schedule', description: 'retrieve schedule from garoon')
5
5
  on(/grn notice/, name: 'notification', description: 'show new notification from garoon')
6
+ on(/grn remind/, name: 'remind', description: 'remind event before few minutes')
6
7
 
7
8
  def schedule(message)
8
9
  ::Ruboty::Actions::Ragoon::Event.new(message).call
@@ -11,6 +12,10 @@ module Ruboty
11
12
  def notification(message)
12
13
  ::Ruboty::Actions::Ragoon::Notification.new(message).call
13
14
  end
15
+
16
+ def remind(message)
17
+ ::Ruboty::Actions::Ragoon::Remind.new(message).call
18
+ end
14
19
  end
15
20
  end
16
21
  end
@@ -15,8 +15,16 @@ module Ruboty
15
15
  @events ||= ::Ragoon::Services::Schedule.new.schedule_get_events(::Ragoon::Services.start_and_end(date))
16
16
  end
17
17
 
18
- def render(private: false)
19
- render_template('events', events: format(private), date: self.date)
18
+ def render(private: false, template: 'events')
19
+ render_template(template, events: format(private), date: self.date)
20
+ end
21
+
22
+ def filter_events(&proc)
23
+ @events = @events.find_all { |event| proc.call(event) }
24
+ end
25
+
26
+ def count
27
+ @events.count
20
28
  end
21
29
 
22
30
  private
@@ -1,6 +1,8 @@
1
1
  module Ruboty
2
2
  module Ragoon
3
3
  class Notification
4
+ include NotifyOnce
5
+
4
6
  attr_reader :list, :brain
5
7
 
6
8
  def initialize(brain)
@@ -26,13 +28,6 @@ module Ruboty
26
28
  unread_count == 0
27
29
  end
28
30
 
29
- def not_notified_ids(new_notification_ids)
30
- notified_ids = @brain.data['notification_notified_ids'] || []
31
- notified_ids &= new_notification_ids
32
- @brain.data['notification_notified_ids'] = notified_ids + new_notification_ids
33
- new_notification_ids - notified_ids
34
- end
35
-
36
31
  class Item
37
32
  attr_accessor :id, :module_type, :module_icon, :unread, :recieved_at, :subject, :url
38
33
 
@@ -0,0 +1,16 @@
1
+ module Ruboty
2
+ module Ragoon
3
+ module NotifyOnce
4
+ def not_notified_ids(new_item_ids)
5
+ notified_item_ids = self.brain.data[brain_key] || []
6
+ notified_item_ids &= new_item_ids
7
+ self.brain.data[brain_key] = notified_item_ids + new_item_ids
8
+ new_item_ids - notified_item_ids
9
+ end
10
+
11
+ def brain_key
12
+ "#{self.class.name.downcase.gsub('::', '_')}_notified_ids"
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,30 @@
1
+ module Ruboty
2
+ module Ragoon
3
+ class Remind
4
+ include NotifyOnce
5
+ attr_reader :brain, :event
6
+
7
+ NOTIFY_BEFORE_EVENT_START = 3 # minutes before start_at
8
+
9
+ def initialize(brain)
10
+ @brain = brain
11
+ end
12
+
13
+ def retrieve
14
+ now = Time.now.localtime
15
+
16
+ @event = Event.new
17
+ @event.filter_events do |event|
18
+ Time.parse(event[:start_at]).localtime - NOTIFY_BEFORE_EVENT_START * 60 < now
19
+ end
20
+
21
+ new_event_ids = not_notified_ids(@event.events.map { |event| event[:id] })
22
+ @event.filter_events do |event|
23
+ new_event_ids.include?(event[:id])
24
+ end
25
+
26
+ @event
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,5 +1,5 @@
1
1
  module Ruboty
2
2
  module Ragoon
3
- VERSION = '0.4.0'
3
+ VERSION = '0.5.0'
4
4
  end
5
5
  end
data/lib/ruboty/ragoon.rb CHANGED
@@ -1,13 +1,16 @@
1
1
  require 'ragoon'
2
2
  require 'ruboty'
3
3
  require 'ruboty/ragoon/config'
4
+ require 'ruboty/ragoon/notify_once'
4
5
  require 'ruboty/ragoon/template'
5
6
  require 'ruboty/ragoon/event'
6
7
  require 'ruboty/ragoon/notification'
8
+ require 'ruboty/ragoon/remind'
7
9
  require 'ruboty/ragoon/version'
8
10
  require 'ruboty/actions/ragoon'
9
11
  require 'ruboty/actions/ragoon/event'
10
12
  require 'ruboty/actions/ragoon/notification'
13
+ require 'ruboty/actions/ragoon/remind'
11
14
  require 'ruboty/handlers/ragoon'
12
15
  require 'tilt'
13
16
  require 'tilt/erb'
@@ -0,0 +1,6 @@
1
+ <% if events.count > 0 %>
2
+ まもなく開始の予定があります。
3
+ <% events.each do |event| %>
4
+ * <%= event[:period] %> <%= event[:plan] %> <%= event[:private] ? ':lock: ' : '' %><%= event[:title] %> <%= event[:facilities] %> <%= event[:url] %>
5
+ <% end %>
6
+ <% end %>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruboty-ragoon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - SHIOYA, Hiromu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-01-12 00:00:00.000000000 Z
11
+ date: 2016-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruboty
@@ -139,15 +139,19 @@ files:
139
139
  - lib/ruboty/actions/ragoon.rb
140
140
  - lib/ruboty/actions/ragoon/event.rb
141
141
  - lib/ruboty/actions/ragoon/notification.rb
142
+ - lib/ruboty/actions/ragoon/remind.rb
142
143
  - lib/ruboty/handlers/ragoon.rb
143
144
  - lib/ruboty/ragoon.rb
144
145
  - lib/ruboty/ragoon/config.rb
145
146
  - lib/ruboty/ragoon/event.rb
146
147
  - lib/ruboty/ragoon/notification.rb
148
+ - lib/ruboty/ragoon/notify_once.rb
149
+ - lib/ruboty/ragoon/remind.rb
147
150
  - lib/ruboty/ragoon/template.rb
148
151
  - lib/ruboty/ragoon/version.rb
149
152
  - ruboty-ragoon.gemspec
150
153
  - templates/events.erb
154
+ - templates/remind.erb
151
155
  homepage: http://github.com/kwappa/ruboty-ragoon
152
156
  licenses:
153
157
  - MIT