class Watir::Generator::Base

Public Instance Methods

generate(spec_url, io = StringIO.new) click to toggle source
# File lib/watir-webdriver/generator/base/generator.rb, line 5
def generate(spec_url, io = StringIO.new)
  @spec_url, @io = spec_url, io

  extract_spec
  cleanup_spec

  write_header
  write_class_defs
  write_container_methods
  write_footer

  io
end

Private Instance Methods

cleanup_spec() click to toggle source
# File lib/watir-webdriver/generator/base/generator.rb, line 42
def cleanup_spec
  ignored_tags.each do |tag|
    @tag2interfaces.delete(tag)
  end

  ignored_interfaces.each do |interface|
    @sorted_interfaces.reject! { |intf| intf.name == interface }
  end

  @sorted_interfaces.each do |intf|
    intf.members.delete_if { |member| ignored_attributes.include?(member.name) }
  end
end
extract_spec() click to toggle source
# File lib/watir-webdriver/generator/base/generator.rb, line 33
def extract_spec
  @tag2interfaces    = extractor.process
  @sorted_interfaces = extractor.sorted_interfaces

  if extractor.errors.any?
    raise "error extracting spec: #{extractor.errors.join("\n")}"
  end
end
extractor() click to toggle source
# File lib/watir-webdriver/generator/base/generator.rb, line 29
def extractor
  @extractor ||= extractor_class.new(@spec_url)
end
generator() click to toggle source
# File lib/watir-webdriver/generator/base/generator.rb, line 21
def generator
  @generator ||= WebIDL::Generator.new(visitor)
end
indent(code, indent = 1) click to toggle source
# File lib/watir-webdriver/generator/base/generator.rb, line 108
def indent(code, indent = 1)
  indent_string = "  " * indent
  code.split("\n").map { |line| line.empty? ? line : indent_string + line }.join("\n")
end
visitor() click to toggle source
# File lib/watir-webdriver/generator/base/generator.rb, line 25
def visitor
  @visitor ||= visitor_class.new
end
write_class_defs() click to toggle source
# File lib/watir-webdriver/generator/base/generator.rb, line 61
def write_class_defs
  @sorted_interfaces.each do |interface|
    interface = generator.generate(interface)
    unless interface.empty?
      interface.gsub!(/^\s+\n/, '') # remove empty lines
      @io.puts indent(interface)
      @io.puts "\n"
    end
  end
end
write_container_methods() click to toggle source
# File lib/watir-webdriver/generator/base/generator.rb, line 72
      def write_container_methods
        @io.puts "\n"
        @io.puts indent("module Container")

        @tag2interfaces.sort.each do |tag, interfaces|
          raise "multiple interfaces for tag #{tag.inspect}" if interfaces.map(&:name).uniq.size != 1

          tag_string       = tag.inspect
          singular         = Util.paramify(visitor.classify_regexp, tag)
          plural           = singular.pluralize
          element_class    = Util.classify(visitor.classify_regexp, interfaces.first.name)
          collection_class = "#{element_class}Collection"

          # visitor.visit_tag(tag, interfaces.first.name) !?
          @io.puts indent(<<-CODE, 2)

# @return [#{element_class}]
def #{singular}(*args)
  #{element_class}.new(self, extract_selector(args).merge(tag_name: #{tag_string}))
end
# @return [#{collection_class}]
def #{plural}(*args)
  #{collection_class}.new(self, extract_selector(args).merge(tag_name: #{tag_string}))
end
Watir.tag_to_class[#{tag.to_sym.inspect}] = #{element_class}

CODE
        end

        @io.puts indent("end # Container")
      end
write_header() click to toggle source
# File lib/watir-webdriver/generator/base/generator.rb, line 56
def write_header
  @io.puts "# Autogenerated from #{generator_implementation} specification. Edits may be lost."
  @io.puts "module Watir"
end