Skip to content

Commit 23f163d

Browse files
committed
Make installing dalli and redis gem optional
1 parent 7bb28cc commit 23f163d

File tree

6 files changed

+38
-12
lines changed

6 files changed

+38
-12
lines changed

Gemfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
source "https://rubygems.org"
22

33
gemspec
4+
5+
gem 'redis'
6+
gem 'dalli'

README.md

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,21 @@ Suo provides a very performant distributed lock solution using Compare-And-Set (
66

77
## Installation
88

9-
Add this line to your application’s Gemfile:
9+
1. Install the gem
1010

11-
```ruby
12-
gem 'suo'
13-
```
11+
```ruby
12+
gem 'suo'
13+
```
14+
15+
2. Install at least one caching library gem
16+
17+
```ruby
18+
# to use Suo::Client::Memcached
19+
gem 'dalli'
20+
21+
# to use Suo::Client::Redis
22+
gem 'redis'
23+
```
1424

1525
## Usage
1626

lib/suo.rb

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
11
require "securerandom"
22
require "monitor"
33

4-
require "dalli"
5-
require "dalli/cas/client"
4+
begin
5+
require "dalli"
6+
require "dalli/cas/client"
7+
rescue LoadError
8+
end
69

7-
require "redis"
10+
begin
11+
require "redis"
12+
rescue LoadError
13+
end
814

915
require "msgpack"
1016

1117
require "suo/version"
1218

1319
require "suo/errors"
1420
require "suo/client/base"
15-
require "suo/client/memcached"
16-
require "suo/client/redis"
21+
22+
require "suo/client/memcached" if defined?(Dalli)
23+
require "suo/client/redis" if defined?(Redis)

lib/suo/client/memcached.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@ module Suo
22
module Client
33
class Memcached < Base
44
def initialize(key, options = {})
5-
options[:client] ||= Dalli::Client.new(options[:connection] || ENV["MEMCACHE_SERVERS"] || "127.0.0.1:11211")
5+
if !options[:client] && !defined?(::Dalli)
6+
raise "Dalli class found. Please make sure you have 'dalli' as a dependency in your gemfile (`gem 'dalli'`)."
7+
end
8+
9+
options[:client] ||= ::Dalli::Client.new(options[:connection] || ENV["MEMCACHE_SERVERS"] || "127.0.0.1:11211")
610
super
711
end
812

lib/suo/client/redis.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ class Redis < Base
44
OK_STR = "OK".freeze
55

66
def initialize(key, options = {})
7+
if !options[:client] && !defined?(::Redis)
8+
raise "Redis class not found. Please make sure you have 'redis' as a dependency in your gemfile (`gem 'redis'`)."
9+
end
10+
711
options[:client] ||= ::Redis.new(options[:connection] || {})
812
super
913
end

suo.gemspec

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ Gem::Specification.new do |spec|
2121

2222
spec.required_ruby_version = ">= 2.5"
2323

24-
spec.add_dependency "dalli"
25-
spec.add_dependency "redis"
2624
spec.add_dependency "msgpack"
2725

2826
spec.add_development_dependency "bundler"

0 commit comments

Comments
 (0)