module AePageObjects::Dsl
Public Instance Methods
collection(name, options = {}, &block)
click to toggle source
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: Collection Item class: Element
Signature: (no :is, no :contains, block)
collection :addresses do element :city element :state end Collection class: one-off subclass of Collection Item class: one-off subclass of Element Methods defined on item class: city() # -> instance of Element state() # -> instance of Element
Signature: (no :is, :contains, no block)
collection :addresses, :contains => Address Collection class: one-off subclass of 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 Collection element Item class: one-off subclass of Address Methods defined on item class: longitude() # -> instance of Element latitude() # -> instance of 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 Element latitude() # -> instance of 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 Element latitude() # -> instance of Element
# File lib/ae_page_objects/core/dsl.rb, line 140 def collection(name, options = {}, &block) options ||= {} # only a collection class is specified or the item class # specified matches the collection's item class if ! block_given? && options[:is] && ( options[:contains].nil? || options[:is].item_class == options[:contains] ) return element(name, options) end options = options.dup # create/get the collection class if options[:is] ensure_class_for_param!(:is, options[:is], Collection) else options[:is] = Collection end item_class = options.delete(:contains) || options[:is].item_class if block_given? item_class = Class.new(item_class, &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 options[:is] = Class.new(options[:is]) options[:is].item_class = item_class element(name, options) end
element(name, options = {}, &block)
click to toggle source
# File lib/ae_page_objects/core/dsl.rb, line 26 def element(name, options = {}, &block) options = options.dup options[:name] ||= name options[:is] ||= Element if block_given? options[:is] = Class.new(options[:is], &block) end element_class = options[:is] self.element_attributes[name.to_sym] = element_class define_method name do self.element(options) end element_class end
element_attributes()
click to toggle source
# File lib/ae_page_objects/core/dsl.rb, line 14 def element_attributes @element_attributes ||= {} end
form_for(form_name, options = {}, &block)
click to toggle source
# File lib/ae_page_objects/core/dsl.rb, line 175 def form_for(form_name, options = {}, &block) options ||= {} raise ArgumentError, ":is option not supported" if options[:is] raise ArgumentError, "Block required." if block.nil? klass = Class.new(Form, &block) options = options.dup options[:is] = klass element(form_name, options) klass.element_attributes.each do |element_name, element_klazz| class_eval <<-RUBY def #{element_name}(*args, &block) #{form_name}.#{element_name}(*args, &block) end RUBY self.element_attributes[element_name] = element_klazz end end
inherited(subclass)
click to toggle source
Calls superclass method
# File lib/ae_page_objects/core/dsl.rb, line 8 def inherited(subclass) super subclass.is_loaded_blocks.push(*is_loaded_blocks) end
is_loaded(&block)
click to toggle source
# File lib/ae_page_objects/core/dsl.rb, line 22 def is_loaded(&block) self.is_loaded_blocks << block end
is_loaded_blocks()
click to toggle source
# File lib/ae_page_objects/core/dsl.rb, line 18 def is_loaded_blocks @is_loaded_blocks ||= [] end