class Lita::Updates::Conversation

Constants

INTRODUCTION
PROMPTS
STATES

Attributes

data[R]
message[R]
robot[R]
user[R]

Public Class Methods

new(robot, redis, user, message = nil) click to toggle source
# File lib/lita/updates/conversation.rb, line 14
def initialize(robot, redis, user, message = nil)
  @robot   = robot
  @data    = Lita::Updates::Data.new redis, user
  @user    = user
  @message = message

  self.state = "idle" if state.nil? || state.empty?
end

Public Instance Methods

call() click to toggle source
# File lib/lita/updates/conversation.rb, line 23
def call
  return if message && state == "idle"
  if message && message.body.downcase == "cancel"
    say "This standup has been cancelled. To start again, just say `standup`."
    self.state = "idle"
    return
  end

  data.write state, message.body unless state == "idle" || message.nil?

  self.state = next_state
  say PROMPTS[state]

  if state == "done"
    report
    self.state = "idle"
  end
end

Private Instance Methods

next_state() click to toggle source
# File lib/lita/updates/conversation.rb, line 46
def next_state
  STATES[STATES.index(state) + 1] || "idle"
end
report() click to toggle source
# File lib/lita/updates/conversation.rb, line 65
def report
  reporter.new(robot, data, user).call
end
reporter() click to toggle source
# File lib/lita/updates/conversation.rb, line 69
def reporter
  case Lita.config.robot.adapter
  when :slack
    Lita::Updates::SlackReport
  else
    Lita::Updates::Report
  end
end
say(text) click to toggle source
# File lib/lita/updates/conversation.rb, line 58
def say(text)
  return if text.nil? || text.empty?

  robot.send_message(Lita::Source.new(user: @user), text)
end
state() click to toggle source
# File lib/lita/updates/conversation.rb, line 50
def state
  data.read("state") || "idle"
end
state=(value) click to toggle source
# File lib/lita/updates/conversation.rb, line 54
def state=(value)
  data.write "state", value
end