class Watir::Generator::Base
Public Instance Methods
generate(spec_url, io = StringIO.new)
click to toggle source
# File lib/watir/generator/base/generator.rb, line 4 def generate(spec_url, io = StringIO.new) @spec_url = spec_url @io = 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/generator/base/generator.rb, line 40 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/generator/base/generator.rb, line 33 def extract_spec @tag2interfaces = extractor.process @sorted_interfaces = extractor.sorted_interfaces raise "error extracting spec: #{extractor.errors.join("\n")}" if extractor.errors.any? end
extractor()
click to toggle source
# File lib/watir/generator/base/generator.rb, line 29 def extractor @extractor ||= extractor_class.new(@spec_url) end
generator()
click to toggle source
# File lib/watir/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/generator/base/generator.rb, line 106 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/generator/base/generator.rb, line 25 def visitor @visitor ||= visitor_class.new end
write_class_defs()
click to toggle source
# File lib/watir/generator/base/generator.rb, line 59 def write_class_defs @sorted_interfaces.each do |interface| interface = generator.generate(interface) next if interface.empty? interface.gsub!(/^\s+\n/, '') # remove empty lines @io.puts indent(interface) @io.puts "\n" end end
write_container_methods()
click to toggle source
# File lib/watir/generator/base/generator.rb, line 70 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/generator/base/generator.rb, line 54 def write_header @io.puts "# Autogenerated from #{generator_implementation} specification. Edits may be lost." @io.puts 'module Watir' end