Class: Cucumber::Core::Ast::DataTable
- Inherits:
-
Object
- Object
- Cucumber::Core::Ast::DataTable
- Includes:
- DescribesItself, HasLocation
- Defined in:
- lib/cucumber/core/ast/data_table.rb
Overview
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.
Instance Attribute Summary collapse
-
#raw ⇒ Object
readonly
Returns the value of attribute raw.
Instance Method Summary collapse
- #==(other) ⇒ Object
- #data_table? ⇒ Boolean
- #doc_string? ⇒ Boolean
-
#dup ⇒ Object
Creates a copy of this table.
-
#initialize(rows, location) ⇒ DataTable
constructor
Creates a new instance.
- #inspect ⇒ Object
- #map(&block) ⇒ Object
- #to_step_definition_arg ⇒ Object
-
#transpose ⇒ Object
Returns a new, transposed table.
Methods included from HasLocation
#all_locations, #attributes, #comments, #file, #file_colon_line, #line, #location, #multiline_arg, #tags
Methods included from DescribesItself
Constructor Details
#initialize(rows, location) ⇒ DataTable
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.
35 36 37 38 39 40 |
# File 'lib/cucumber/core/ast/data_table.rb', line 35 def initialize(rows, location) raw = ensure_array_of_array(rows) verify_rows_are_same_length(raw) @raw = raw.freeze @location = location end |
Instance Attribute Details
#raw ⇒ Object (readonly)
Returns the value of attribute raw.
41 42 43 |
# File 'lib/cucumber/core/ast/data_table.rb', line 41 def raw @raw end |
Instance Method Details
#==(other) ⇒ Object
84 85 86 |
# File 'lib/cucumber/core/ast/data_table.rb', line 84 def ==(other) other.class == self.class && raw == other.raw end |
#data_table? ⇒ Boolean
47 48 49 |
# File 'lib/cucumber/core/ast/data_table.rb', line 47 def data_table? true end |
#doc_string? ⇒ Boolean
51 52 53 |
# File 'lib/cucumber/core/ast/data_table.rb', line 51 def doc_string? false end |
#dup ⇒ Object
Creates a copy of this table
57 58 59 |
# File 'lib/cucumber/core/ast/data_table.rb', line 57 def dup self.class.new(raw.dup, location) end |
#inspect ⇒ Object
88 89 90 |
# File 'lib/cucumber/core/ast/data_table.rb', line 88 def inspect %{#<#{self.class} #{raw.inspect} (#{location})>} end |
#map(&block) ⇒ Object
76 77 78 79 80 81 82 |
# File 'lib/cucumber/core/ast/data_table.rb', line 76 def map(&block) new_raw = raw.map do |row| row.map(&block) end self.class.new(new_raw, location) end |
#to_step_definition_arg ⇒ Object
43 44 45 |
# File 'lib/cucumber/core/ast/data_table.rb', line 43 def to_step_definition_arg dup end |
#transpose ⇒ Object
Returns a new, transposed table. Example:
| a | 7 | 4 | | b | 9 | 2 |
Gets converted into the following:
| a | b | | 7 | 9 | | 4 | 2 |
72 73 74 |
# File 'lib/cucumber/core/ast/data_table.rb', line 72 def transpose self.class.new(raw.transpose, location) end |