Class: UltraDNSUpdater::Strategies::Multiple

Inherits:
UpdateStrategy show all
Defined in:
lib/ultradns_updater/strategies/multiple.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from UpdateStrategy

#iface_ip, #strategy_config, #strategy_to_use, #ultradns

Methods included from Preconditions

#not_empty, #precondition

Constructor Details

#initialize(ultradns, strategy_section, logger = ::Logger.new(STDOUT)) ⇒ Multiple

Returns a new instance of Multiple.



23
24
25
26
27
28
29
30
# File 'lib/ultradns_updater/strategies/multiple.rb', line 23

def initialize(ultradns, strategy_section, logger = ::Logger.new(STDOUT))
  super(ultradns, strategy_section, logger)
  @strategy_instances = []
  strategies.each do |strategy_name, strategy_clazz|
    @strategy_instances << strategy_clazz.new(ultradns, 
      strategy_section.merge(:use => strategy_name), logger)
  end
end

Class Method Details

.factory(strategies) ⇒ Object



17
18
19
20
21
# File 'lib/ultradns_updater/strategies/multiple.rb', line 17

def self.factory(strategies)
  clazz = Class.new(UltraDNSUpdater::Strategies::Multiple)
  clazz.send(:define_method, :strategies) {strategies}
  clazz
end

Instance Method Details

#strategiesObject

should be overwritten



33
# File 'lib/ultradns_updater/strategies/multiple.rb', line 33

def strategies; []; end

#updateObject



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

def update()
  @strategy_instances.each do |strategy|
    begin
      @logger.info("Trying strategy #{strategy.class.name}") if @logger
      result = strategy.update()
      return result if result
    rescue => e
      # ignore, try next
      @logger.debug("Failed: #{e.inspect}\n" + e.backtrace.join("\n"))
    end
  end
  nil
end