Module: Watir::AttributeHelper

Included in:
Element
Defined in:
lib/watir/attribute_helper.rb

Overview

Extended by Element, provides methods for defining attributes on the element classes.

Instance Method Summary collapse

Instance Method Details

#attribute(type, method, attr) ⇒ type

YARD macro to generated friendly documentation for attributes.


48
49
50
51
# File 'lib/watir/attribute_helper.rb', line 48

def attribute(type, method, attr)
  typed_attributes[type] << [method, attr]
  define_attribute(type, method, attr)
end

#attribute_listObject Also known as: attributes


30
31
32
33
34
35
36
# File 'lib/watir/attribute_helper.rb', line 30

def attribute_list
  @attribute_list ||= (typed_attributes.values.flatten +
                       ancestors[1..-1].map { |e|
                         e.attribute_list if e.respond_to?(:attribute_list)
                       }.compact.flatten
                      ).uniq
end

#define_attribute(type, name, attr) ⇒ Object


53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/watir/attribute_helper.rb', line 53

def define_attribute(type, name, attr)
  case type.to_s
  when 'Boolean'
    define_boolean_attribute(name, attr)
  when 'Integer'
    define_int_attribute(name, attr)
  when 'Float'
    define_float_attribute(name, attr)
  else
    define_string_attribute(name, attr)
  end
end

#define_boolean_attribute(mname, aname) ⇒ Object


72
73
74
75
76
# File 'lib/watir/attribute_helper.rb', line 72

def define_boolean_attribute(mname, aname)
  define_method mname do
    attribute_value(aname) == 'true'
  end
end

#define_float_attribute(mname, aname) ⇒ Object


85
86
87
88
89
90
91
# File 'lib/watir/attribute_helper.rb', line 85

def define_float_attribute(mname, aname)
  define_method mname do
    value = attribute_value(aname)
    value = nil if value == 'NaN'
    value && Float(value)
  end
end

#define_int_attribute(mname, aname) ⇒ Object


78
79
80
81
82
83
# File 'lib/watir/attribute_helper.rb', line 78

def define_int_attribute(mname, aname)
  define_method mname do
    value = attribute_value(aname)
    value && Integer(value)
  end
end

#define_string_attribute(mname, aname) ⇒ Object


66
67
68
69
70
# File 'lib/watir/attribute_helper.rb', line 66

def define_string_attribute(mname, aname)
  define_method mname do
    attribute_value(aname).to_s
  end
end

#inherit_attributes_from(kls) ⇒ Object


20
21
22
23
24
# File 'lib/watir/attribute_helper.rb', line 20

def inherit_attributes_from(kls)
  kls.typed_attributes.each do |type, attrs|
    attrs.each { |method, attr| attribute type, method, attr }
  end
end

#methodtype

YARD macro to generated friendly documentation for attributes.


48
49
50
51
# File 'lib/watir/attribute_helper.rb', line 48

def attribute(type, method, attr)
  typed_attributes[type] << [method, attr]
  define_attribute(type, method, attr)
end

#typed_attributesObject


26
27
28
# File 'lib/watir/attribute_helper.rb', line 26

def typed_attributes
  @typed_attributes ||= Hash.new { |hash, type| hash[type] = [] }
end