From e2a9fe33c87eed6c12b3f0fc2103849df0ea426c Mon Sep 17 00:00:00 2001 From: Blaine Johnson Date: Wed, 7 Sep 2016 08:29:00 -0600 Subject: [PATCH 1/5] Enable sidekiq options through configuration --- README.md | 8 +++++++ lib/wisper/sidekiq.rb | 29 ++++++++++++++++++++++++- spec/wisper/sidekiq_broadcaster_spec.rb | 20 +++++++++++++++++ spec/wisper/sidekiq_spec.rb | 22 +++++++++++++++++++ 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 spec/wisper/sidekiq_broadcaster_spec.rb create mode 100644 spec/wisper/sidekiq_spec.rb diff --git a/README.md b/README.md index 3f12884..31c02cd 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,14 @@ class MyListener end ``` +## Configuration + +```ruby +Wisper::Sidekiq.configure do |config| + config.sidekiq_options = { retry: 5, queue: :my_queue, backtrace: true } +end +``` + When publshing events the arguments must be simple as they need to be serialized. For example instead of sending an `ActiveRecord` model as an argument use its id instead. diff --git a/lib/wisper/sidekiq.rb b/lib/wisper/sidekiq.rb index 1af3599..2c90567 100644 --- a/lib/wisper/sidekiq.rb +++ b/lib/wisper/sidekiq.rb @@ -4,17 +4,44 @@ require 'wisper/sidekiq/version' module Wisper + module Sidekiq + + def self.configure + yield(configuration) + end + + def self.configuration + @configuration ||= Configuration.new + end + end + + class Configuration + attr_accessor :sidekiq_options + + def initialize + @sidekiq_options = {} + end + end + class SidekiqBroadcaster + def broadcast(subscriber, publisher, event, args) - subscriber.delay.public_send(event, *args) + subscriber.delay(sidekiq_options).public_send(event, *args) end + def self.register Wisper.configure do |config| config.broadcaster :sidekiq, SidekiqBroadcaster.new config.broadcaster :async, SidekiqBroadcaster.new end end + + private + + def sidekiq_options + Sidekiq.configuration.sidekiq_options + end end end diff --git a/spec/wisper/sidekiq_broadcaster_spec.rb b/spec/wisper/sidekiq_broadcaster_spec.rb new file mode 100644 index 0000000..88786fb --- /dev/null +++ b/spec/wisper/sidekiq_broadcaster_spec.rb @@ -0,0 +1,20 @@ +require 'wisper/sidekiq' + +RSpec.describe Wisper::SidekiqBroadcaster do + let(:broadcaster) { Wisper::SidekiqBroadcaster.new } + let(:subscriber) { spy('subscriber') } + let(:sidekiq_options) { { retry: 5, queue: :my_queue, backtrace: true } } + + describe "#broadcast" do + before do + Wisper::Sidekiq.configure do |config| + config.sidekiq_options = sidekiq_options + end + end + + it 'configures sidekiq with options' do + broadcaster.broadcast(subscriber, nil, :event, :args) + expect(subscriber).to have_received(:delay).with(sidekiq_options) + end + end +end diff --git a/spec/wisper/sidekiq_spec.rb b/spec/wisper/sidekiq_spec.rb new file mode 100644 index 0000000..606f245 --- /dev/null +++ b/spec/wisper/sidekiq_spec.rb @@ -0,0 +1,22 @@ +require 'wisper/sidekiq' + +RSpec.describe Wisper::Sidekiq do + let(:sidekiq_options) { { retry: 5, queue: :my_queue, backtrace: true } } + + describe "#configure" do + it "should write allowed configuration" do + Wisper::Sidekiq.configure do |config| + config.sidekiq_options = sidekiq_options + end + expect(Wisper::Sidekiq.configuration.sidekiq_options).to eq sidekiq_options + end + + it "should raise exception for non-allowed configuration" do + expect { + Wisper::Sidekiq.configure do |config| + config.not_allowed = 'not allowed' + end + }.to raise_error(NoMethodError) + end + end +end \ No newline at end of file From 4028d73e94136f904fd66135a88b0c36eb242607 Mon Sep 17 00:00:00 2001 From: Blaine Johnson Date: Wed, 7 Sep 2016 08:56:19 -0600 Subject: [PATCH 2/5] Add custom queue for testing --- scripts/sidekiq | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sidekiq b/scripts/sidekiq index dd1e728..cf04aa6 100755 --- a/scripts/sidekiq +++ b/scripts/sidekiq @@ -2,4 +2,4 @@ set -e -bundle exec rerun --dir spec/dummy_app/ -- bundle exec sidekiq -r ./spec/dummy_app/app.rb -L ./spec/dummy_app/logs/sidekiq.log +bundle exec rerun --dir spec/dummy_app/ -- bundle exec sidekiq -r ./spec/dummy_app/app.rb -L ./spec/dummy_app/logs/sidekiq.log -q default -q my_queue From 75500d1c73655acf95c7c6438a672bbc0291a4ce Mon Sep 17 00:00:00 2001 From: Blaine Johnson Date: Wed, 7 Sep 2016 09:02:10 -0600 Subject: [PATCH 3/5] add queue to travis sidekiq --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 0ab1eb9..cb3f02f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: ruby before_script: - - bundle exec sidekiq -r ./spec/dummy_app/app.rb -L /tmp/sidekiq.log & + - bundle exec sidekiq -r ./spec/dummy_app/app.rb -L /tmp/sidekiq.log -q default -q my_queue & - sleep 1 script: rspec spec bundler_args: --without=extras From 944141eb8f428701e9d8cb3faf0cfb028e37e555 Mon Sep 17 00:00:00 2001 From: Blaine Johnson Date: Wed, 7 Sep 2016 10:24:50 -0600 Subject: [PATCH 4/5] Fix travis build See travis-ci/travis-ci#3531 and travis-ci/travis-ci#5239 --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index cb3f02f..2070ffd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,7 @@ language: ruby before_script: + - gem update --system + - gem install bundler - bundle exec sidekiq -r ./spec/dummy_app/app.rb -L /tmp/sidekiq.log -q default -q my_queue & - sleep 1 script: rspec spec From 236a1f562756dd392591aa588b15d3befb9b8a31 Mon Sep 17 00:00:00 2001 From: Blaine Johnson Date: Wed, 7 Sep 2016 10:36:38 -0600 Subject: [PATCH 5/5] Fix travis bundler issue, trying again --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 2070ffd..c21e52a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,8 @@ language: ruby -before_script: +before_install: - gem update --system - gem install bundler +before_script: - bundle exec sidekiq -r ./spec/dummy_app/app.rb -L /tmp/sidekiq.log -q default -q my_queue & - sleep 1 script: rspec spec