Class: Ruboty::Handlers::Kintai

Inherits:
Base
  • Object
show all
Defined in:
lib/ruboty/handlers/kintai.rb

Constant Summary collapse

NAMESPACE =
'kintai'

Instance Method Summary collapse

Instance Method Details

#go_home(message) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/ruboty/handlers/kintai.rb', line 27

def go_home(message)
  go_home_at = Time.parse((message[:go_home_at] || Time.now).to_s)

  kintai[message.from_name] ||= {}
  kintai[message.from_name][:go_home_at] = go_home_at

  greedings = %w(おつかれさま おつかれさん  はなきんだー バイバイ!)

  if work_time = work_time(go_home_at, message.from_name)
    stats = "今日は#{work_time}働いたみたいだよ。お疲れ様でした。"
  else
    stats = %w(あれ、いつきたのかな? 日付かわっちゃったかな? あ、帰る前に何時にきたか教えて!).sample
  end
  message.reply("#{greedings.sample}, #{message.from_name}. #{stats}.")
rescue => e
  if /no time information in/ =~ e.message
    message.reply('時間がわからへん')
  else
    message.reply(e.message)
  end
end

#go_work(message) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/ruboty/handlers/kintai.rb', line 10

def go_work(message)
  go_work_at = Time.parse((message[:go_work_at] || Time.now).to_s)

  kintai[message.from_name] ||= {}
  kintai[message.from_name][:go_work_at] = go_work_at

  greedings = %w(おはよー はよ はよはよ やっほー ふゎあぁ、おはよ ...)

  message.reply("#{greedings.sample}, #{message.from_name}.")
rescue => e
  if /no time information in/ =~ e.message
    message.reply('時間がわからへん')
  else
    message.reply(e.message)
  end
end

#kintai(now = Time.now) ⇒ Object

こんな感じ {

'2014-01-02': {
  'blockgiven': {
    go_home_at: Time.now,
    go_work_at: Time.now
  }
}

}



70
71
72
73
# File 'lib/ruboty/handlers/kintai.rb', line 70

def kintai(now = Time.now)
  robot.brain.data[NAMESPACE] ||= {}
  robot.brain.data[NAMESPACE][now.strftime("%Y-%m-%d")] ||= {}
end

#kintai_range(start_at, end_at) ⇒ Object



75
76
77
78
79
80
81
82
83
# File 'lib/ruboty/handlers/kintai.rb', line 75

def kintai_range(start_at, end_at)
  Enumerator.new {|y|
    time = start_at
    while time < end_at.end_of_day do
      y << [time.beginning_of_day, kintai(time)]
      time = time.tomorrow
    end
  }
end

#list(message) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
# File 'lib/ruboty/handlers/kintai.rb', line 49

def list(message)
  start_at = message[:start].tr('0-9', '0-9').gsub(/ヶ月|ケ月|か月|ヵ月|カ月/, '')
  start_at = (Tokiyomi.parse(start_at) rescue Time.parse(start_at))
  end_at   = message[:end].tr('0-9', '0-9').gsub(/ヶ月|ケ月|か月|ヵ月|カ月/, '')
  end_at   = (Tokiyomi.parse(end_at) rescue Time.parse(end_at))

  reporter = reporter_for(message)
  message.reply(reporter.new(kintai_range(start_at, end_at)).report)
rescue => e
  message.reply("ごめんな、勤怠わからへん: #{e.message}@#{e.backtrace.take(5).join($/)}")
end

#reporter_for(message) ⇒ Object



94
95
96
97
98
99
100
101
# File 'lib/ruboty/handlers/kintai.rb', line 94

def reporter_for(message)
  case message[:reporter]
  when /csv/i
    Ruboty::Kintai::Reporters::Csv
  else
    raise 'csv以外は出力できへん'
  end
end

#work_time(time, name) ⇒ Object



85
86
87
88
89
90
91
92
# File 'lib/ruboty/handlers/kintai.rb', line 85

def work_time(time, name)
  go_work_at = kintai(time).fetch(name, {})[:go_work_at]
  go_home_at = kintai(time).fetch(name, {})[:go_home_at]

  if go_work_at and go_home_at
    Time.at(go_home_at - go_work_at - 9.hours).strftime("%H:%M") # FIXME
  end
end