class Cucumber::Core::Test::DataTable
Step Definitions that match a plain text Step with a multiline argument table will receive it as an instance of DataTable. A DataTable object holds the data of a table parsed from a feature file and lets you access and manipulate the data in different ways.
For example:
Given I have: | a | b | | c | d |
And a matching StepDefinition:
Given /I have:/ do |table| data = table.raw end
This will store [['a', 'b'], ['c',
'd']]
in the data
variable.
Attributes
raw[R]
Public Class Methods
new(rows)
click to toggle source
Creates a new instance. raw
should be an Array of Array of
String or an Array of Hash You don't typically create your own DataTable objects - Cucumber will do it internally and pass
them to your Step Definitions.
# File lib/cucumber/core/test/data_table.rb, line 30 def initialize(rows) raw = ensure_array_of_array(rows) verify_rows_are_same_length(raw) @raw = raw.freeze end
Public Instance Methods
==(other)
click to toggle source
# File lib/cucumber/core/test/data_table.rb, line 82 def ==(other) other.class == self.class && raw == other.raw end
data_table?()
click to toggle source
# File lib/cucumber/core/test/data_table.rb, line 45 def data_table? true end
describe_to(visitor, *args)
click to toggle source
# File lib/cucumber/core/test/data_table.rb, line 37 def describe_to(visitor, *args) visitor.data_table(self, *args) end
doc_string?()
click to toggle source
# File lib/cucumber/core/test/data_table.rb, line 49 def doc_string? false end
dup()
click to toggle source
Creates a copy of this table
# File lib/cucumber/core/test/data_table.rb, line 55 def dup self.class.new(raw.dup) end
inspect()
click to toggle source
# File lib/cucumber/core/test/data_table.rb, line 86 def inspect %{#<#{self.class} #{raw.inspect})>} end
map(&block)
click to toggle source
# File lib/cucumber/core/test/data_table.rb, line 74 def map(&block) new_raw = raw.map do |row| row.map(&block) end self.class.new(new_raw) end
to_step_definition_arg()
click to toggle source
# File lib/cucumber/core/test/data_table.rb, line 41 def to_step_definition_arg dup end
transpose()
click to toggle source
Returns a new, transposed table. Example:
| a | 7 | 4 | | b | 9 | 2 |
Gets converted into the following:
| a | b | | 7 | 9 | | 4 | 2 |
# File lib/cucumber/core/test/data_table.rb, line 70 def transpose self.class.new(raw.transpose) end
Private Instance Methods
ensure_array_of_array(array)
click to toggle source
# File lib/cucumber/core/test/data_table.rb, line 100 def ensure_array_of_array(array) Hash === array[0] ? hashes_to_array(array) : array end
hashes_to_array(hashes)
click to toggle source
# File lib/cucumber/core/test/data_table.rb, line 104 def hashes_to_array(hashes) header = hashes[0].keys.sort [header] + hashes.map {|hash| header.map {|key| hash[key]}} end
verify_rows_are_same_length(raw)
click to toggle source
# File lib/cucumber/core/test/data_table.rb, line 92 def verify_rows_are_same_length(raw) begin raw.transpose rescue IndexError raise ArgumentError, "Rows must all be the same length" end end