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 31 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 83 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 46 def data_table? true end
describe_to(visitor, *args)
click to toggle source
# File lib/cucumber/core/test/data_table.rb, line 38 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 50 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 56 def dup self.class.new(raw.dup) end
inspect()
click to toggle source
# File lib/cucumber/core/test/data_table.rb, line 87 def inspect %{#<#{self.class} #{raw.inspect})>} end
map(&block)
click to toggle source
# File lib/cucumber/core/test/data_table.rb, line 75 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 42 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 71 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 101 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 105 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 93 def verify_rows_are_same_length(raw) begin raw.transpose rescue IndexError raise ArgumentError, "Rows must all be the same length" end end