Class: Joggle::Engine

Inherits:
Object
  • Object
show all
Includes:
Commands, Pablotron::Observable
Defined in:
lib/joggle/engine.rb

Overview

Joggle engine object. This is where the magic happens.

Constant Summary collapse

DEFAULTS =
{
  # output time format
  'engine.time_format'              => '%H:%M',

  # enable sanity checks
  'engine.message_sanity_checks'    => true,

  # update every 60 minutes by default
  'engine.update.default'           => 60,

  # time ranges for updates
  'engine.update.range'             => {
    # from 8am until 3pm, update every 10 minutes
    '8-15'    => 10,

    # from 3pm until 10pm, update every 5 minutes
    '15-22'   => 5,

    # from 10pm until midnight, update every 10 minutes
    '22-24'   => 10,

    # from midnight until 2am, update every 20 minutes
    '0-2'     => 20,
  },
}
COMMAND_REGEX =

client listeners #

/^\s*\.(\w+)\s*(\S.*|)\s*$/

Constants included from Commands

Commands::EGGS, Commands::HELP

Instance Method Summary collapse

Methods included from Commands

#do_easteregg, #do_help, #do_list, #do_register, #do_unregister

Methods included from Pablotron::Observable

#fire, #on, #un

Constructor Details

#initialize(client, tweeter, opt = nil) ⇒ Engine

Create a new Joggle engine object.



41
42
43
44
45
46
47
48
# File 'lib/joggle/engine.rb', line 41

def initialize(client, tweeter, opt = nil)
  @opt = DEFAULTS.merge(opt || {})

  @client = client
  @client.on(self)

  @tweeter = tweeter
end

Instance Method Details

#on_before_jabber_client_accept_subscription(client, who) ⇒ Object

Jabber subscription listener callback.



113
114
115
116
117
118
# File 'lib/joggle/engine.rb', line 113

def on_before_jabber_client_accept_subscription(client, who)
  unless allowed?(who)
    fire('engine_ignored_subscription', who)
    raise Joggle::Pablotron::Observable::StopEvent, "denied subscription: #{who}"
  end
end

#on_jabber_client_message(client, msg) ⇒ Object

Jabber message listener callback.



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/joggle/engine.rb', line 93

def on_jabber_client_message(client, msg)
  # get the message source
  who = msg.from.to_s

  # only listen to allowed users
  if allowed?(who)
    if md = msg.body.match(COMMAND_REGEX)
      cmd = md[1].downcase
      handle_command(who, cmd, md[2])
    else
      handle_message(who, msg.body)
    end
  else
    fire('engine_ignored_message', who, msg)
  end
end

#reply(who, msg) ⇒ Object

Reply to a user with the given message.



71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/joggle/engine.rb', line 71

def reply(who, msg)
  begin
    if fire('engine_before_reply', who, msg)
      @client.deliver(who, msg)
      fire('engine_reply', who, msg)
    else
      fire('engine_reply_stopped', who, msg, err)
    end
  rescue Exception => err
    fire('engine_reply_error', who, msg, err)
  end
end

#runObject

Run forever.



53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/joggle/engine.rb', line 53

def run
  loop {
    # check for updates (if we need to)
    if need_update?
      update
    end

    # fire idle method
    fire('engine_idle')

    # sleep for thirty seconds
    sleep 30
  }
end