module Tapestry::DataSetter

Public Instance Methods

use(data)
Alias for: using
use_data(data)
Alias for: using
use_values(data)
Alias for: using
using(data) click to toggle source

The `using` method tells Tapestry to match up whatever data is passed in via the action with element definitions. If those elements are found, they will be populated with the specified data. Consider the following:

class WarpTravel
  include Tapestry

  text_field :warp_factor, id: 'warpInput'
  text_field :velocity,    id: 'velocityInput'
  text_field :distance,    id: 'distInput'
end

Assuming an instance of this class called `page`, you could do the following:

page.using_data(warp_factor: 1, velocity: 1, distance: 4.3)

This is based on conventions. The idea is that element definitions are written in the form of “snake case” – meaning, underscores between each separate word. In the above example, “warp_factor: 1” would be matched to the `warp_factor` element and the value used for that element would be “1”. The default operation for a text field is to enter the value in. It is also possible to use strings:

page.using_data("warp factor": 1, velocity: 1, distance: 4.3)

Here “warp factor” would be converted to “warp_factor”.

# File lib/tapestry/extensions/data_setter.rb, line 59
def using(data)
  data.each do |key, value|
    use_data_with(key, value) if object_enabled_for(key)
  end
end
using_data(data)
Alias for: using
using_values(data)
Alias for: using

Private Instance Methods

check_and_uncheck(key, element, value) click to toggle source
# File lib/tapestry/extensions/data_setter.rb, line 92
def check_and_uncheck(key, element, value)
  key = key.to_s.tr(' ', '_')
  return chain("#{key}.check") if element.class == Watir::CheckBox && value
  chain("#{key}.uncheck")      if element.class == Watir::CheckBox
end
object_enabled_for(key) click to toggle source

This is a sanity check method to make sure that whatever element is being used as part of the data setting, it exists in the DOM, is visible (meaning, display is not 'none'), and is capable of accepting input, thus being enabled.

# File lib/tapestry/extensions/data_setter.rb, line 102
def object_enabled_for(key)
  web_element = send(key.to_s.tr(' ', '_'))
  web_element.enabled? && web_element.visible?
end
set_and_select(key, element, value) click to toggle source
# File lib/tapestry/extensions/data_setter.rb, line 85
def set_and_select(key, element, value)
  key = key.to_s.tr(' ', '_')
  chain("#{key}.set", value)    if element.class == Watir::TextField
  chain("#{key}.set")           if element.class == Watir::Radio
  chain("#{key}.select", value) if element.class == Watir::Select
end
use_data_with(key, value) click to toggle source

This is the method that is delegated to in order to make sure that elements are interacted with appropriately. This will in turn delegate to `set_and_select` and `check_and_uncheck`, which determines what actions are viable based on the type of element that is being dealt with. These aspects are what tie this particular implementation to Watir.

# File lib/tapestry/extensions/data_setter.rb, line 79
def use_data_with(key, value)
  element = send(key.to_s.tr(' ', '_'))
  set_and_select(key, element, value)
  check_and_uncheck(key, element, value)
end