Module: Accessibility::PrettyPrinter

Included in:
AX::Element
Defined in:
lib/accessibility/pretty_printer.rb

Overview

Convenience methods to use when building an #inspect method for AX::Element and its descendants.

The module only expects three methods in order to operate:

  • #attributes returns a list of available attributes
  • #attribute returns the value of a given attribute
  • #size_of returns the size for an attribute

Instance Method Summary collapse

Instance Method Details

#pp_checkbox(attr) ⇒ String

Create a string that looks like a labeled check box. The label is the given attribute, and the check box value will be determined by the value of the attribute.



88
89
90
# File 'lib/accessibility/pretty_printer.rb', line 88

def pp_checkbox attr
  " #{attr}[#{attribute(attr) ? CHECKMARK : CROSS }]"
end

#pp_childrenString

Create a string that nicely presents the number of children that the receiver has.



71
72
73
74
75
76
77
78
79
# File 'lib/accessibility/pretty_printer.rb', line 71

def pp_children
  if attributes.include? :children
    child_count = size_of :children
    return " #{child_count} children" if child_count > 1
    return ONE_CHILD                  if child_count == 1
    # there are some odd edge cases where 0 children are reported
  end
  EMPTY_STRING
end

#pp_enabledString

Safely create a #pp_checkbox for the KAXEnabledAttribute

If the receiver does not have the attribute then an empty string will be returned.



99
100
101
102
103
104
105
# File 'lib/accessibility/pretty_printer.rb', line 99

def pp_enabled
  if attributes.include? :enabled
    pp_checkbox(:enabled)
  else
    EMPTY_STRING
  end
end

#pp_focusedString

Safely create a #pp_checkbox for the KAXFocusedAttribute

If the receiver does not have the attribute then an empty string will be returned.



114
115
116
117
118
119
120
# File 'lib/accessibility/pretty_printer.rb', line 114

def pp_focused
  if attributes.include? :focused
    pp_checkbox(:focused)
  else
    EMPTY_STRING
  end
end

#pp_identifierString

Create an identifier for the receiver by using various attributes that should make it very easy to identify the element.



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/accessibility/pretty_printer.rb', line 20

def pp_identifier
  # @note use, or lack of use, of #inspect is intentional for visual effect

  if attributes.include? :value
    val = attribute :value
    if val.kind_of? String
      return " #{val.inspect}" unless val.empty?
    else
      # we assume that nil is not a legitimate value
      return " value=#{val.inspect}" unless val.nil?
    end
  end

  if attributes.include? :title
    val = attribute(:title)
    return " #{val.inspect}" if val && !val.empty?
  end

  if attributes.include? :title_ui_element
    val = attribute :title_ui_element
    return " #{val.inspect}" if val
  end

  if attributes.include? :description
    val = attribute(:description).to_s
    return " #{val}" unless val.empty?
  end

  if attributes.include? :identifier
    return " id=#{attribute(:identifier)}"
  end
end

#pp_positionString

Create a string that succinctly encodes the screen coordinates of the receiver.



58
59
60
61
62
63
64
# File 'lib/accessibility/pretty_printer.rb', line 58

def pp_position
  if attributes.include? :position
    position = attribute :position
    return " (#{position.x}, #{position.y})" if position
  end
  EMPTY_STRING
end