Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable sidekiq options through configuration #10

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 4 additions & 1 deletion .travis.yml
@@ -1,6 +1,9 @@
language: ruby
before_install:
- gem update --system
- gem install bundler
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
Expand Down
8 changes: 8 additions & 0 deletions README.md
Expand Up @@ -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.
Expand Down
29 changes: 28 additions & 1 deletion lib/wisper/sidekiq.rb
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion scripts/sidekiq
Expand Up @@ -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
20 changes: 20 additions & 0 deletions 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
22 changes: 22 additions & 0 deletions 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