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.

Parameters:

  • attr (Symbol)

Returns:

  • (String)

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.

Returns:

  • (String)

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.

Returns:

  • (String)

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.

Returns:

  • (String)

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.

Returns:

  • (String)

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.

Returns:

  • (String)

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