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

Version Path
kookaburra-0.0.4 lib/kookaburra/ui_driver/mixins/has_strategies.rb
kookaburra-0.0.3 lib/kookaburra/ui_driver/mixins/has_strategies.rb
kookaburra-0.0.2 lib/kookaburra/ui_driver/mixins/has_strategies.rb