Class: CanTango::Configuration::Engines

Inherits:
Registry::Hash show all
Includes:
Enumerable, Singleton
Defined in:
lib/cantango/configuration/engines.rb

Instance Attribute Summary

Attributes inherited from Registry::Base

#default, #registered

Instance Method Summary collapse

Methods inherited from Registry::Hash

#<<, #[], #[]=, #clean!, #default, #default!, #default=, #registered, #registered?, #registered_names, #registered_value?, #registered_values, #types, #types=, #unregister, #value_methods, #value_types

Methods inherited from Registry::Base

#[], #clean!, #default!, #registered?, #types, #types=

Instance Method Details

#activeObject



83
84
85
# File 'lib/cantango/configuration/engines.rb', line 83

def active
  available.select {|engine| send(engine).on? if respond_to?(engine) }
end

#active?(name) ⇒ Boolean

Returns:

  • (Boolean)


79
80
81
# File 'lib/cantango/configuration/engines.rb', line 79

def active? name
  active.include? name.to_sym
end

#all(state) ⇒ Object



61
62
63
# File 'lib/cantango/configuration/engines.rb', line 61

def all state
  available.each {|engine| send(engine).set state }
end

#any?(state) ⇒ Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/cantango/configuration/engines.rb', line 65

def any? state
  available.any? {|engine| send(engine).send(:"#{state}?") if respond_to?(engine) }
end

#availableObject



53
54
55
# File 'lib/cantango/configuration/engines.rb', line 53

def available
  registered_names
end

#available?(name) ⇒ Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/cantango/configuration/engines.rb', line 57

def available? name
  available.include? name.to_s
end

#clear!Object



69
70
71
72
73
# File 'lib/cantango/configuration/engines.rb', line 69

def clear!
  each {|engine| engine.reset! }
  @registered = nil
  @execution_order = nil
end

#dont_execute(name) ⇒ Object



21
22
23
# File 'lib/cantango/configuration/engines.rb', line 21

def dont_execute name
  execution_order.delete(name.to_s)
end

#eachObject



75
76
77
# File 'lib/cantango/configuration/engines.rb', line 75

def each
  available.each {|engine| yield send(engine) if respond_to?(engine) }
end

#execute_after(existing, name) ⇒ Object



42
43
44
45
46
47
# File 'lib/cantango/configuration/engines.rb', line 42

def execute_after existing, name
  dont_execute name
  index = execution_order.index(existing.to_s)
  index ? execution_order.insert(index +1, name.to_s) : execute_last(name)
  execution_order.compact!
end

#execute_before(existing, name) ⇒ Object



35
36
37
38
39
40
# File 'lib/cantango/configuration/engines.rb', line 35

def execute_before existing, name
  dont_execute name
  index = execution_order.index(existing.to_s) || 0
  execution_order.insert(index, name.to_s)
  execution_order.compact!
end

#execute_first(name) ⇒ Object



25
26
27
28
# File 'lib/cantango/configuration/engines.rb', line 25

def execute_first name
  dont_execute name
  execution_order.insert(0, name.to_s)
end

#execute_last(name) ⇒ Object



30
31
32
33
# File 'lib/cantango/configuration/engines.rb', line 30

def execute_last name
  dont_execute name
  execution_order.insert(-1, name.to_s)
end

#execution_orderObject



49
50
51
# File 'lib/cantango/configuration/engines.rb', line 49

def execution_order
  @execution_order ||= (available - [:cache])
end

#register(hash) ⇒ Object

engine registry is a simple hash



8
9
10
11
12
13
14
# File 'lib/cantango/configuration/engines.rb', line 8

def register hash
  hash.each_pair do |name, engine_class|
    raise "Class must implement the CanTango Engine API. You can start by sublclassing CanTango::Engine" if !engine? engine_class
    raise "Name of engine must be a String or Symbol" if !name.kind_of_label?
    registered[name.to_s] = engine_class
  end
end

#set_execution_order(*names) ⇒ Object

defines the order of execution of engine in ability



17
18
19
# File 'lib/cantango/configuration/engines.rb', line 17

def set_execution_order *names        
  @execution_order = names.flatten.uniq.map(&:to_s).select {|name| available? name }
end