module Accessibility::PrettyPrinter

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

Constants

CHECKMARK

@private

Constant string used by {#pp_checkbox}.

@return [String]

CROSS

@private

Constant string used by {#pp_checkbox}.

@return [String]

EMPTY_STRING

@private

Constant used all over the place.

@return [String]

ONE_CHILD

@private

Constant string used by {#pp_children}.

@return [String]

Public Instance Methods

pp_checkbox(attr) click to toggle source

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.

@param attr [Symbol] @return [String]

# File lib/accessibility/pretty_printer.rb, line 87
def pp_checkbox attr
  " #{attr}[#{attribute(attr) ? CHECKMARK : CROSS }]"
end
pp_children() click to toggle source

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

@return [String]

# File lib/accessibility/pretty_printer.rb, line 70
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_enabled() click to toggle source

Safely create a {#pp_checkbox} for the ‘KAXEnabledAttribute`

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

@return [String]

# File lib/accessibility/pretty_printer.rb, line 98
def pp_enabled
  if attributes.include? :enabled
    pp_checkbox(:enabled)
  else
    EMPTY_STRING
  end
end
pp_focused() click to toggle source

Safely create a {#pp_checkbox} for the ‘KAXFocusedAttribute`

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

@return [String]

# File lib/accessibility/pretty_printer.rb, line 113
def pp_focused
  if attributes.include? :focused
    pp_checkbox(:focused)
  else
    EMPTY_STRING
  end
end
pp_identifier() click to toggle source

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

@return [String]

# File lib/accessibility/pretty_printer.rb, line 19
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_position() click to toggle source

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

@return [String]

# File lib/accessibility/pretty_printer.rb, line 57
def pp_position
  if attributes.include? :position
    position = attribute :position
    return " (#{position.x}, #{position.y})" if position
  end
  EMPTY_STRING
end