Sha256: 62bcf6c6f30f431d44f774619aebd0c762a900b0d69cd5b0bc332e5fa0c35073
Contents?: true
Size: 1.24 KB
Versions: 3
Compression:
Stored size: 1.24 KB
Contents
module Kookaburra class UIDriver module HasStrategies class Strategy class_attribute :tag attr_reader :ui_component def initialize(ui_component) @ui_component, @tag = ui_component end end module ClassMethods def strategy(tag, &proc) Class.new(::Kookaburra::UIDriver::HasStrategies::Strategy).tap { |klass| klass.tag = tag klass.module_eval &proc self.strategy_classes << klass } end def use_strategy_for(*method_names) def_delegators :current_strategy, *method_names end end module InstanceMethods def strategies @strategies ||= strategy_classes.map { |klass| klass.new(self) } end def current_strategy strategies.detect(&:applies?) or raise 'No applicable strategy!' end def strategy_tag current_strategy.tag end end def self.included(receiver) receiver.class_attribute :strategy_classes receiver.strategy_classes = [] receiver.extend Forwardable receiver.extend ClassMethods receiver.send :include, InstanceMethods end end end end
Version data entries
3 entries across 3 versions & 1 rubygems