Class: SlackRubyBotServer::Service
- Inherits:
-
Object
- Object
- SlackRubyBotServer::Service
- Includes:
- Loggable
- Defined in:
- lib/slack-ruby-bot-server/service.rb
Class Method Summary collapse
Instance Method Summary collapse
- #create!(team, options = {}) ⇒ Object
- #deactivate!(team) ⇒ Object
- #every(*intervals, &block) ⇒ Object
-
#initialize ⇒ Service
constructor
A new instance of Service.
- #on(*types, &block) ⇒ Object
- #once_and_every(*intervals, &block) ⇒ Object
- #restart!(team) ⇒ Object
- #start!(team) ⇒ Object
- #start_from_database! ⇒ Object
- #start_intervals! ⇒ Object
- #stop!(team) ⇒ Object
Methods included from Loggable
Constructor Details
#initialize ⇒ Service
Returns a new instance of Service.
16 17 18 19 |
# File 'lib/slack-ruby-bot-server/service.rb', line 16 def initialize @callbacks = Hash.new { |h, k| h[k] = [] } @intervals = Hash.new { |h, k| h[k] = [] } end |
Class Method Details
.instance ⇒ Object
12 13 14 |
# File 'lib/slack-ruby-bot-server/service.rb', line 12 def self.instance @instance ||= SlackRubyBotServer::Config.service_class.new end |
.reset! ⇒ Object
103 104 105 |
# File 'lib/slack-ruby-bot-server/service.rb', line 103 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, options = {}) ⇒ Object
39 40 41 42 43 |
# File 'lib/slack-ruby-bot-server/service.rb', line 39 def create!(team, = {}) run_callbacks :creating, team, nil, start!(team) run_callbacks :created, team, nil, end |
#deactivate!(team) ⇒ Object
94 95 96 97 98 99 100 101 |
# File 'lib/slack-ruby-bot-server/service.rb', line 94 def deactivate!(team) run_callbacks :deactivating, team team.deactivate! run_callbacks :deactivated, team rescue StandardError => e run_callbacks :error, team, e logger.error "#{team.name}: #{e.class}, #{e.}, ignored." end |
#every(*intervals, &block) ⇒ Object
33 34 35 36 37 |
# File 'lib/slack-ruby-bot-server/service.rb', line 33 def every(*intervals, &block) Array(intervals).each do |interval| @intervals[_validate_interval(interval)] << [block, {}] end end |
#on(*types, &block) ⇒ Object
21 22 23 24 25 |
# File 'lib/slack-ruby-bot-server/service.rb', line 21 def on(*types, &block) Array(types).each do |type| @callbacks[type.to_s] << block end end |
#once_and_every(*intervals, &block) ⇒ Object
27 28 29 30 31 |
# File 'lib/slack-ruby-bot-server/service.rb', line 27 def once_and_every(*intervals, &block) Array(intervals).each do |interval| @intervals[_validate_interval(interval)] << [block, { run_on_start: true }] end end |
#restart!(team) ⇒ Object
54 55 56 57 58 59 60 61 |
# File 'lib/slack-ruby-bot-server/service.rb', line 54 def restart!(team) logger.info "Restarting team #{team}." run_callbacks :restarting, team run_callbacks :restarted, team rescue StandardError => e run_callbacks :error, team, e logger.error e end |
#start!(team) ⇒ Object
45 46 47 48 49 50 51 52 |
# File 'lib/slack-ruby-bot-server/service.rb', line 45 def start!(team) logger.info "Starting team #{team}." run_callbacks :starting, team run_callbacks :started, team rescue StandardError => e run_callbacks :error, team, e logger.error e end |
#start_from_database! ⇒ Object
72 73 74 75 76 77 78 79 |
# File 'lib/slack-ruby-bot-server/service.rb', line 72 def start_from_database! Team.active.each do |team| run_callbacks :booting, team start!(team) run_callbacks :booted, team end start_intervals! end |
#start_intervals! ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/slack-ruby-bot-server/service.rb', line 81 def start_intervals! ::Async::Reactor.run do @intervals.each_pair do |period, | .each do || call, = * _every period, do call.call end end end end end |
#stop!(team) ⇒ Object
63 64 65 66 67 68 69 70 |
# File 'lib/slack-ruby-bot-server/service.rb', line 63 def stop!(team) logger.info "Stopping team #{team}." run_callbacks :stopping, team run_callbacks :stopped, team rescue StandardError => e run_callbacks :error, team, e logger.error e end |