Module: Lite::Containers::AvlTree::Interfaces::KeyExtractionStrategy::Abstract
- Defined in:
- lib/lite/containers/avl_tree/interfaces/key_extraction_strategy/abstract.rb
Class Method Summary collapse
- .enforce_exclusion(mod, strategy) ⇒ Object
- .enforce_exclusion!(base, strategy) ⇒ Object
- .included(base) ⇒ Object
- .register(strategy) ⇒ Object
- .registry ⇒ Object
Class Method Details
.enforce_exclusion(mod, strategy) ⇒ Object
24 25 26 27 28 29 |
# File 'lib/lite/containers/avl_tree/interfaces/key_extraction_strategy/abstract.rb', line 24 def self.enforce_exclusion(mod, strategy) mod.define_singleton_method :included do |base| Abstract.enforce_exclusion!(base, strategy) super(base) end end |
.enforce_exclusion!(base, strategy) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/lite/containers/avl_tree/interfaces/key_extraction_strategy/abstract.rb', line 31 def self.enforce_exclusion!(base, strategy) conflicts = Abstract .registry .select { |candidate| strategy != candidate && base < candidate } .map { |conflict| conflict.name.split('::').last } if !conflicts.empty? raise Error, "Key extraction strategy conflict: #{conflicts.join(', ')}" elsif base.is_a?(Module) Abstract.enforce_exclusion(base, strategy) end end |
.included(base) ⇒ Object
11 12 13 14 |
# File 'lib/lite/containers/avl_tree/interfaces/key_extraction_strategy/abstract.rb', line 11 def self.included(base) register(base) enforce_exclusion(base, base) end |
.register(strategy) ⇒ Object
16 17 18 |
# File 'lib/lite/containers/avl_tree/interfaces/key_extraction_strategy/abstract.rb', line 16 def self.register(strategy) registry << strategy end |
.registry ⇒ Object
20 21 22 |
# File 'lib/lite/containers/avl_tree/interfaces/key_extraction_strategy/abstract.rb', line 20 def self.registry @registry ||= Set.new end |