Sha256: 279f55e776caf25442a3180401c748a0ee172dc9be4dd954b87badc401cf4687

Contents?: true

Size: 1.16 KB

Versions: 1

Compression:

Stored size: 1.16 KB

Contents

require 'active_support/core_ext/string/inflections'
require 'active_support/core_ext/class/attribute'

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 }
            # 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

1 entries across 1 versions & 1 rubygems

Version Path
kookaburra-0.12.0 lib/kookaburra/ui_driver/mixins/has_ui_component.rb