Sha256: f2b06f6be2ed537129ff42db86fef849f75c2776d89b80f897be779e24c492e1

Contents?: true

Size: 1.74 KB

Versions: 3

Compression:

Stored size: 1.74 KB

Contents

require 'rutl/utilities'
require 'rutl/base_page'

#
# Currently called Browser, this top-level class controls a browser and
# a fake browser. It will soon call into apps, at which point I need to
# rethink this naming convention.
#
class Browser
  include Utilities

  attr_reader :interface

  def initialize(type:, rutl_pages: RUTL::PAGES || ENV['RUTL_PAGES'])
    if rutl_pages.nil? || rutl_pages.empty?
      raise "Set RUTL::PAGES or ENV['RUTL_PAGES'] or pass dir as rutl_pages:"
    end
    # This is kind of evil. Figure out how to ditch the $ variable.
    $browser = self
    @interface = nil
    @interface = load_interface(type)
    @interface.pages = load_pages(dir: rutl_pages)
  end

  def load_interface(type)
    require "rutl/interface/#{type}_interface"
    klass = "#{type.to_s.capitalize}Interface"
    Object.const_get(klass).new
  end

  # Ugly. Requires files for page objects. Returns array of class names to load.
  def require_pages(dir: 'spec/pages')
    names = []
    Dir["#{dir}/*"].each do |file|
      require "rutl/../../#{file}"
      File.open(file).each do |line|
        bingo = line.match(/class (.*) < BasePage/)
        names << bingo[1] if bingo && bingo[1]
      end
    end
    names
  end

  def load_pages(*)
    pages = []
    require_pages.each do |klass|
      # Don't have @interface set yet.
      # That would have been the param to new, :interface.
      pages << Object.const_get(klass).new(@interface)
    end
    pages
  end

  def method_missing(method, *args, &block)
    if args.empty?
      @interface.send(method)
    else
      @interface.send(method, *args, &block)
    end
  end

  def respond_to_missing?(*args)
    @interface.respond_to?(*args)
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rutl-0.3.0 lib/rutl/browser.rb
rutl-0.2.1 lib/rutl/browser.rb
rutl-0.2.0 lib/rutl/browser.rb