lib/watir/element_collections.rb in watir-1.6.2 vs lib/watir/element_collections.rb in watir-1.6.5
- old
+ new
@@ -1,82 +1,98 @@
-module Watir
- # this class is the super class for the iterator classes (buttons, links, spans etc
- # it would normally only be accessed by the iterator methods (spans, links etc) of IE
- class ElementCollections
- include Enumerable
-
- # Super class for all the iteractor classes
- # * container - an instance of an IE object
- def initialize(container)
- @container = container
- @page_container = container.page_container
- @length = length # defined by subclasses
-
- # set up the items we want to display when the show method is used
- set_show_items
- end
-
- private
- def set_show_items
- @show_attributes = AttributeLengthPairs.new("id", 20)
- @show_attributes.add("name", 20)
- end
-
- public
- def get_length_of_input_objects(object_type)
- object_types =
- if object_type.kind_of? Array
- object_type
- else
- [object_type]
- end
-
- length = 0
- objects = @container.document.getElementsByTagName("INPUT")
- if objects.length > 0
- objects.each do |o|
- length += 1 if object_types.include?(o.invoke("type").downcase)
- end
- end
- return length
- end
-
- # iterate through each of the elements in the collection in turn
- def each
- 0.upto(@length-1) { |i| yield iterator_object(i) }
- end
-
- # allows access to a specific item in the collection
- def [](n)
- return iterator_object(n-1)
- end
-
- # this method is the way to show the objects, normally used from irb
- def show
- s = "index".ljust(6)
- @show_attributes.each do |attribute_length_pair|
- s += attribute_length_pair.attribute.ljust(attribute_length_pair.length)
- end
-
- index = 1
- self.each do |o|
- s += "\n"
- s += index.to_s.ljust(6)
- @show_attributes.each do |attribute_length_pair|
- begin
- s += eval('o.ole_object.invoke("#{attribute_length_pair.attribute}")').to_s.ljust(attribute_length_pair.length)
- rescue => e
- s += " ".ljust(attribute_length_pair.length)
- end
- end
- index += 1
- end
- puts s
- end
-
- # this method creates an object of the correct type that the iterators use
- private
- def iterator_object(i)
- element_class.new(@container, :index, i + 1)
- end
- end
+module Watir
+ # this class is the super class for the iterator classes (buttons, links, spans etc
+ # it would normally only be accessed by the iterator methods (spans, links etc) of IE
+ class ElementCollections
+ include Enumerable
+
+ # Super class for all the iteractor classes
+ # * container - an instance of an IE object
+ def initialize(container)
+ @container = container
+ @page_container = container.page_container
+ @length = length # defined by subclasses
+
+ # set up the items we want to display when the show method is used
+ set_show_items
+ end
+
+ private
+ def set_show_items
+ @show_attributes = AttributeLengthPairs.new("id", 20)
+ @show_attributes.add("name", 20)
+ end
+
+ public
+ def get_length_of_input_objects(object_type)
+ object_types =
+ if object_type.kind_of? Array
+ object_type
+ else
+ [object_type]
+ end
+
+ length = 0
+ objects = @container.document.getElementsByTagName("INPUT")
+ if objects.length > 0
+ objects.each do |o|
+ length += 1 if object_types.include?(o.invoke("type").downcase)
+ end
+ end
+ return length
+ end
+
+ # iterate through each of the elements in the collection in turn
+ def each
+ 0.upto(@length-1) { |i| yield iterator_object(i) }
+ end
+
+ # allows access to a specific item in the collection
+ def [](n)
+ return iterator_object(n-1)
+ end
+
+ def first
+ iterator_object(0)
+ end
+
+ def last
+ iterator_object(length - 1)
+ end
+
+ # this method is the way to show the objects, normally used from irb
+ def show
+ s = "index".ljust(6)
+ @show_attributes.each do |attribute_length_pair|
+ s += attribute_length_pair.attribute.ljust(attribute_length_pair.length)
+ end
+
+ index = 1
+ self.each do |o|
+ s += "\n"
+ s += index.to_s.ljust(6)
+ @show_attributes.each do |attribute_length_pair|
+ begin
+ s += eval('o.ole_object.invoke("#{attribute_length_pair.attribute}")').to_s.ljust(attribute_length_pair.length)
+ rescue => e
+ s += " ".ljust(attribute_length_pair.length)
+ end
+ end
+ index += 1
+ end
+ puts s
+ end
+
+ def to_s
+ map { |e| e.to_s }.join("\n")
+ end
+
+ def inspect
+ '#<%s:0x%x length=%s container=%s>' % [self.class, hash*2, @length.inspect, @container.inspect]
+ end
+
+ # this method creates an object of the correct type that the iterators use
+ private
+ def iterator_object(i)
+ element_class.new(@container, :index, i + 1)
+ end
+ end
end
\ No newline at end of file