Skip to content

Commit 6b5886d

Browse files
committed
Queue update
1 parent c721a9f commit 6b5886d

13 files changed

+84
-64
lines changed

Gemfile

-14
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,2 @@
11
source 'https://rubygems.org'
22
gemspec
3-
4-
# gem 'activesupport', '>= 5.0.0'
5-
# gem 'sucker_punch', '~> 2.0'
6-
#
7-
# group :development, :test do
8-
# gem 'rspec', '~> 3.5.0'
9-
# gem 'spring'
10-
# gem 'factory_girl'
11-
# end
12-
#
13-
# group :test do
14-
# gem 'webmock'
15-
# gem 'vcr'
16-
# end

eureka-bot.gemspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
1818
spec.require_paths = ["lib"]
1919

2020
spec.add_runtime_dependency 'activesupport', '>= 5.0.0'
21-
spec.add_runtime_dependency 'sucker_punch', '~> 2.0'
21+
spec.add_runtime_dependency 'activejob', '>= 5.0.0'
2222

2323
spec.add_development_dependency 'rspec', '~> 3.5.0'
2424
spec.add_development_dependency 'webmock'

lib/eureka-bot.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ module EurekaBot
2525

2626
def self.logger=(logger)
2727
@@logger = logger
28-
SuckerPunch.logger = logger
28+
EurekaBot::Job.logger = logger
2929
logger
3030
end
3131
end

lib/eureka_bot/exceptions.rb

-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
require 'sucker_punch'
2-
31
module EurekaBot::Exceptions
42
extend ActiveSupport::Concern
53

@@ -28,7 +26,3 @@ def self.exception_handler(e, klass, args)
2826
end
2927
end
3028
end
31-
32-
SuckerPunch.exception_handler = -> (e, klass, args) {
33-
EurekaBot.exception_handler(e, klass, args)
34-
}

lib/eureka_bot/instrumentation.rb

+10-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module EurekaBot::Instrumentation
22
extend ActiveSupport::Concern
33

4-
def instrument(name, payload=nil, &block)
4+
def instrument(name, payload={}, &block)
55
self.class.instrument(name, payload, &block)
66
end
77

@@ -10,8 +10,15 @@ def self.prefix
1010
end
1111

1212
class_methods do
13-
def instrument(name, payload=nil, &block)
14-
ActiveSupport::Notifications.instrument [EurekaBot::Instrumentation.prefix, name].compact.join('.'), payload, &block
13+
def instrument(name, payload={}, &block)
14+
ActiveSupport::Notifications.instrument(
15+
[
16+
EurekaBot::Instrumentation.prefix,
17+
name
18+
].compact.join('.'),
19+
payload,
20+
&block
21+
)
1522
end
1623
end
1724

lib/eureka_bot/job.rb

+8-24
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,14 @@
1-
require 'sucker_punch'
1+
require 'active_job'
22

3-
class EurekaBot::Job
4-
include ::SuckerPunch::Job
3+
class EurekaBot::Job < ActiveJob::Base
4+
extend ActiveSupport::Autoload
5+
autoload :Input
6+
autoload :Output
57
include EurekaBot::Instrumentation
68

7-
def perform(resolver_class, message)
8-
instrument 'job.perform' do
9-
klass = if resolver_class <= EurekaBot::Resolver
10-
resolver_class
11-
elsif resolver_class <= String
12-
resolver_class.constantize
13-
else
14-
raise UnknownResolverClass.new(resolver_class)
15-
end
16-
17-
resolver = klass.new(
18-
message: message,
19-
logger: logger
20-
)
21-
resolver.execute
22-
end
23-
end
24-
25-
def logger
26-
EurekaBot.logger
9+
queue_as do
10+
self.class.name.underscore.gsub('/', '__')
2711
end
2812

29-
class UnknownResolverClass < StandardError; end
13+
self.logger = EurekaBot.logger
3014
end

lib/eureka_bot/job/input.rb

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class EurekaBot::Job::Input < EurekaBot::Job
2+
queue_as :input
3+
4+
def perform(resolver_class, message)
5+
instrument 'job.input' do
6+
resolver = resolver_class.constantize.new(
7+
message: message,
8+
logger: logger
9+
)
10+
resolver.execute
11+
end
12+
end
13+
14+
class UnknownResolverClass < StandardError; end
15+
end

lib/eureka_bot/job/output.rb

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class EurekaBot::Job::Output < EurekaBot::Job
2+
queue_as :output
3+
4+
def perform(sender_class, message, *args)
5+
instrument 'job.output' do
6+
sender_class.constantize.new.deliver(message, *args)
7+
end
8+
end
9+
10+
end

lib/eureka_bot/notifications.rb

+6-4
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@ def self.log_notification(severity=::Logger::DEBUG, name, started, finished, id,
1515
end
1616

1717
ActiveSupport::Notifications.subscribe /eureka-bot\..*/ do |*args|
18-
EurekaBot::Notification.log_notification(::Logger::DEBUG, *args)
18+
severity = if args[0] == 'eureka-bot.job.perform'
19+
::Logger::INFO
20+
else
21+
::Logger::DEBUG
22+
end
23+
EurekaBot::Notification.log_notification(severity, *args)
1924
end
2025

21-
ActiveSupport::Notifications.subscribe 'eureka-bot.job.perform' do |*args|
22-
EurekaBot::Notification.log_notification(::Logger::INFO, *args)
23-
end

lib/eureka_bot/resolver.rb

+8-1
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,15 @@ def resolve
1616
nil
1717
end
1818

19+
def resolved
20+
@resolved ||= begin
21+
resolved = resolve
22+
logger.info [:resolved, resolved, message]
23+
resolved
24+
end
25+
end
26+
1927
def execute
20-
resolved = resolve
2128
raise ControllerNotFound.new("Can't resolve #{message}") unless resolved
2229
@controller = resolve_controller(resolved[:controller]).new(
2330
params: resolved[:params] || {},

lib/eureka_bot/version.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
module EurekaBot
2-
VERSION = '1.0.7'
2+
VERSION = '1.0.8'
33
end

spec/eureka-bot/job_spec.rb

+22-8
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,51 @@
22

33
RSpec.describe EurekaBot::Job do
44
context '#execute' do
5+
let(:resolver_class) do
6+
class TestResolver < EurekaBot::Resolver
7+
end
8+
TestResolver
9+
end
10+
511
let(:controller_class) do
6-
Class.new(EurekaBot::Controller) do
12+
class TestController < EurekaBot::Controller
713
def some_action
814
answer(some_action: 'finished')
915
end
1016
end
11-
end
12-
13-
let(:resolver_class) do
14-
Class.new(EurekaBot::Resolver)
17+
TestController
1518
end
1619

1720
let(:job_class) do
1821
$job_result = nil
19-
Class.new(EurekaBot::Job) do
22+
class TestJob < EurekaBot::Job::Input
2023
def perform(resolver_class, message)
2124
$job_result = super
2225
end
2326
end
27+
TestJob
28+
end
29+
30+
after do
31+
Object.send(:remove_const, :TestController)
32+
Object.send(:remove_const, :TestJob)
33+
Object.send(:remove_const, :TestResolver)
2434
end
2535

2636
before do
2737
allow_any_instance_of(resolver_class).to receive(:resolve).and_return(
2838
controller: controller_class,
2939
action: :some_action
3040
)
31-
job_class.perform_async(resolver_class, {})
41+
42+
job_class.perform_later(resolver_class.to_s, {})
3243
end
3344

3445
it do
35-
expect($job_result.controller.response.to_a).to include(include(some_action: 'finished'))
46+
expect($job_result).to be
47+
expect(
48+
$job_result.controller.response.to_a
49+
).to include(include(some_action: 'finished'))
3650
end
3751
end
3852
end

spec/spec_helper.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
require 'webmock/rspec'
77
# require 'vcr'
88
# require 'factory_girl'
9-
require 'sucker_punch/testing/inline'
9+
# require 'sucker_punch/testing/inline'
10+
EurekaBot::Job.queue_adapter = :inline
1011

1112
$:.unshift File.dirname(__FILE__) + '/..'
1213
Dir['spec/support/**/*.rb'].each { |f| require f }

0 commit comments

Comments
 (0)