Class: SlackRubyBotServer::Service

Inherits:
Object
  • Object
show all
Includes:
SlackRubyBot::Loggable
Defined in:
lib/slack-ruby-bot-server/service.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeService

Returns a new instance of Service.



16
17
18
# File 'lib/slack-ruby-bot-server/service.rb', line 16

def initialize
  @callbacks = Hash.new { |h, k| h[k] = [] }
end

Class Method Details

.instanceObject



12
13
14
# File 'lib/slack-ruby-bot-server/service.rb', line 12

def self.instance
  @instance ||= new
end

.reset!Object



82
83
84
# File 'lib/slack-ruby-bot-server/service.rb', line 82

def self.reset!
  @instance = nil
end

.start!Object



5
6
7
8
9
10
# File 'lib/slack-ruby-bot-server/service.rb', line 5

def self.start!
  Thread.new do
    Thread.current.abort_on_exception = true
    instance.start_from_database!
  end
end

Instance Method Details

#create!(team) ⇒ Object



24
25
26
27
28
# File 'lib/slack-ruby-bot-server/service.rb', line 24

def create!(team)
  run_callbacks :creating, team
  start!(team)
  run_callbacks :created, team
end

#deactivate!(team) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/slack-ruby-bot-server/service.rb', line 68

def deactivate!(team)
  run_callbacks :deactivating, team
  team.deactivate!
  run_callbacks :deactivated, team
rescue Mongoid::Errors::Validations => e
  run_callbacks :error, team, e
  logger.error "#{team.name}: #{e.message}, error - #{e.document.class}, #{e.document.errors.to_hash}, ignored."
rescue StandardError => e
  run_callbacks :error, team, e
  logger.error "#{team.name}: #{e.class}, #{e.message}, ignored."
ensure
  team.server = nil
end

#on(type, &block) ⇒ Object



20
21
22
# File 'lib/slack-ruby-bot-server/service.rb', line 20

def on(type, &block)
  @callbacks[type.to_s] << block
end

#restart!(team, server, wait = 1) ⇒ Object



42
43
44
45
46
# File 'lib/slack-ruby-bot-server/service.rb', line 42

def restart!(team, server, wait = 1)
  run_callbacks :restarting, team
  start_server! team, server, wait
  run_callbacks :restarted, team
end

#start!(team) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
# File 'lib/slack-ruby-bot-server/service.rb', line 30

def start!(team)
  run_callbacks :starting, team
  logger.info "Starting team #{team}."
  server = SlackRubyBotServer::Config.server_class.new(team: team)
  start_server! team, server
  run_callbacks :started, team
  server
rescue StandardError => e
  run_callbacks :error, team, e
  logger.error e
end

#start_from_database!Object



60
61
62
63
64
65
66
# File 'lib/slack-ruby-bot-server/service.rb', line 60

def start_from_database!
  Team.active.each do |team|
    run_callbacks :booting, team
    start!(team)
    run_callbacks :booted, team
  end
end

#stop!(team) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/slack-ruby-bot-server/service.rb', line 48

def stop!(team)
  logger.info "Stopping team #{team}."
  run_callbacks :stopping, team
  team.server.stop! if team.server
  run_callbacks :stopped, team
rescue StandardError => e
  run_callbacks :error, team, e
  logger.error e
ensure
  team.server = nil
end