Class: DynamicLinks::StrategyFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/dynamic_links/strategy_factory.rb

Constant Summary collapse

VALID_SHORTENING_STRATEGIES =
[:md5, :sha256, :crc32,
:nano_id, :redis_counter, :mock].freeze

Class Method Summary collapse

Class Method Details

.ensure_nanoid_availableObject



27
28
29
30
31
32
33
# File 'lib/dynamic_links/strategy_factory.rb', line 27

def self.ensure_nanoid_available
  begin
    require 'nanoid'
  rescue LoadError
    raise 'Missing dependency: Please add "nanoid" to your Gemfile to use NanoIdStrategy.'
  end
end

.ensure_redis_availableObject



35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/dynamic_links/strategy_factory.rb', line 35

def self.ensure_redis_available
  begin
    require 'redis'
  rescue LoadError
    raise 'Missing dependency: Please add "redis" to your Gemfile to use RedisCounterStrategy.'
  end

  begin
    require 'connection_pool'
  rescue LoadError
    raise 'Missing dependency: Please add "connection_pool" to your Gemfile to use RedisCounterStrategy.'
  end
end

.get_strategy(strategy_name) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/dynamic_links/strategy_factory.rb', line 6

def self.get_strategy(strategy_name)
  case strategy_name
  when :md5
    ShorteningStrategies::MD5Strategy.new
  when :sha256
    ShorteningStrategies::SHA256Strategy.new
  when :crc32
    ShorteningStrategies::CRC32Strategy.new
  when :nano_id
    ensure_nanoid_available
    ShorteningStrategies::NanoIDStrategy.new
  when :redis_counter
    ensure_redis_available
    ShorteningStrategies::RedisCounterStrategy.new
  when :mock
    ShorteningStrategies::MockStrategy.new
  else
    raise "Unknown strategy: #{strategy_name}"
  end
end