Sha256: e827b7e67bd67307297630f3a1d7aa4b5e8d6aaab8e393e586fbaeb7e56a49a7

Contents?: true

Size: 1.13 KB

Versions: 5

Compression:

Stored size: 1.13 KB

Contents

require 'active_support/core_ext/string/inflections'

module Kookaburra
  class UIDriver
    module HasUIComponent
      UIComponentNotFound = Class.new(StandardError)

      module ClassMethods
        def ui_component(component_name)
          self.ui_component_names << component_name

          define_method(component_name) do
            options = { :browser => browser, :test_data => test_data }
            # TODO: memoize the following line?
            component_class(component_name).new(options)
          end

          define_method("has_#{component_name}?") do
            send(component_name).visible?
          end
        end
      end

      module InstanceMethods
        def ui_components
          ui_component_names.map { |name| self.send(name) }
        end

        def component_class(component_name)
          self.class.const_get(component_name.to_s.camelize)
        end
      end

      def self.included(receiver)
        receiver.class_attribute :ui_component_names
        receiver.ui_component_names = []

        receiver.extend         ClassMethods
        receiver.send :include, InstanceMethods
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
kookaburra-0.5.1 lib/kookaburra/ui_driver/mixins/has_ui_component.rb
kookaburra-0.5.0 lib/kookaburra/ui_driver/mixins/has_ui_component.rb
kookaburra-0.4.0 lib/kookaburra/ui_driver/mixins/has_ui_component.rb
kookaburra-0.3.1 lib/kookaburra/ui_driver/mixins/has_ui_component.rb
kookaburra-0.3.0 lib/kookaburra/ui_driver/mixins/has_ui_component.rb