Module: AePageObjects::Dsl::Collection::ClassMethods
- Includes:
- InternalHelpers
- Defined in:
- lib/ae_page_objects/core/dsl/collection.rb
Instance Method Summary collapse
-
#collection(name, options = {}, &block) ⇒ Object
Defines a collection of elements.
Methods included from InternalHelpers
Instance Method Details
#collection(name, options = {}, &block) ⇒ Object
Defines a collection of elements. Blocks are evaluated on the item class used by the collection. collection() defines a method on the class that returns an instance of a collection class which contains instances of the collection's item class.
Supported signatures are described below.
Signature: (no :is, no :contains, no block)
collection :addresses
Collection class: ::AePageObjects::Collection
Item class: ::AePageObjects::Element
Signature: (no :is, no :contains, block)
collection :addresses do
element :city
element :state
end
Collection class: one-off subclass of ::AePageObjects::Collection
Item class: one-off subclass of ::AePageObjects::Element
Methods defined on item class:
city() # -> instance of ::AePageObjects::Element
state() # -> instance of ::AePageObjects::Element
Signature: (no :is, :contains, no block)
collection :addresses, :contains => Address
Collection class: one-off subclass of ::AePageObjects::Collection
Item class: Address
Signature: (no :is, :contains, block)
collection :addresses, :contains => Address do
element :longitude
element :latitude
end
Collection class: one-off subclass of ::AePageObjects::Collection element
Item class: one-off subclass of Address
Methods defined on item class:
longitude() # -> instance of ::AePageObjects::Element
latitude() # -> instance of ::AePageObjects::Element
Signature: (:is, no :contains, no block)
collection :addresses, :is => AddressList
Collection class: AddressList
Item class: AddressList.item_class
Signature: (:is, no :contains, block)
collection :addresses, :is => AddressList do
element :longitude
element :latitude
end
Collection class: one-off subclass of AddressList
Item class: one-off subclass of AddressList.item_class
Methods defined on item class:
longitude() # -> instance of ::AePageObjects::Element
latitude() # -> instance of ::AePageObjects::Element
Signature: (:is, :contains, no block)
collection :addresses, :is => AddressList, :contains => ExtendedAddress
Collection class: one-off subclass ofAddressList
Item class: ExtendedAddress
Signature: (:is, :contains, block)
collection :addresses, :is => AddressList, :contains => Address do
element :longitude
element :latitude
end
Collection class: one-off subclass of AddressList
Item class: one-off subclass of Address
Methods defined on item class:
longitude() # -> instance of ::AePageObjects::Element
latitude() # -> instance of ::AePageObjects::Element
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/ae_page_objects/core/dsl/collection.rb', line 104 def collection(name, = {}, &block) ||= {} # only a collection class is specified or the item class # specified matches the collection's item class if block.blank? && [:is] && ( [:contains].blank? || [:is].item_class == [:contains] ) return element(name, ) end = .dup # create/get the collection class if [:is] ensure_class_for_param!(:is, [:is], ::AePageObjects::Collection) else [:is] = ::AePageObjects::Collection end item_class = .delete(:contains) || [:is].item_class if block.present? item_class = item_class.new_subclass(&block).tap do |new_item_class| new_item_class.element_attributes.merge!(item_class.element_attributes) end end # since we are creating a new item class, we need to subclass the collection class # so we can parameterize the collection class with an item class [:is] = [:is].new_subclass [:is].item_class = item_class element(name, ) end |