Class: CukeModeler::Example
- Defined in:
- lib/cuke_modeler/models/example.rb
Overview
A class modeling an example table of an outline.
Instance Attribute Summary collapse
-
#keyword ⇒ Object
The example’s keyword.
-
#rows ⇒ Object
The row models in the example table.
Attributes included from Taggable
Attributes included from Sourceable
Attributes included from Described
Attributes included from Named
Attributes included from Parsed
Attributes included from Nested
Instance Method Summary collapse
-
#add_row(row) ⇒ Object
Adds a row to the example table.
-
#argument_rows ⇒ Object
The argument rows in the example table.
-
#children ⇒ Object
Returns the model objects that belong to this model.
-
#initialize(source_text = nil) ⇒ Example
constructor
Creates a new Example object and, if source_text is provided, populates the object.
-
#parameter_row ⇒ Object
The parameter row for the example table.
-
#parameters ⇒ Object
Returns the parameters of the example table.
-
#remove_row(row_removed) ⇒ Object
Removes a row from the example table.
-
#to_s ⇒ Object
Returns a string representation of this model.
Methods included from Taggable
Methods included from Parsing
Methods included from Containing
#each, #each_descendant, #each_model
Methods included from Nested
Constructor Details
#initialize(source_text = nil) ⇒ Example
Creates a new Example object and, if source_text is provided, populates the object.
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/cuke_modeler/models/example.rb', line 26 def initialize(source_text = nil) @tags = [] @rows = [] super(source_text) return unless source_text parsed_example_data = parse_source(source_text) populate_example(self, parsed_example_data) end |
Instance Attribute Details
#keyword ⇒ Object
The example’s keyword
18 19 20 |
# File 'lib/cuke_modeler/models/example.rb', line 18 def keyword @keyword end |
#rows ⇒ Object
The row models in the example table
21 22 23 |
# File 'lib/cuke_modeler/models/example.rb', line 21 def rows @rows end |
Instance Method Details
#add_row(row) ⇒ Object
Adds a row to the example table. The row can be given as a Hash of parameters and their corresponding values or as an Array of values which will be assigned in order.
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/cuke_modeler/models/example.rb', line 41 def add_row(row) raise('Cannot add a row. No parameters have been set.') if rows.empty? # A quick 'deep clone' so that the input isn't modified row = Marshal.load(Marshal.dump(row)) values = if row.is_a?(Array) row elsif row.is_a?(Hash) # There is no guarantee that the user built up their hash with the keys in the same order as # the parameter row and so the values have to be ordered by us. Additionally, the hash needs # to have string keys in order for #order_row_values to work ordered_row_values(stringify_keys(row)) else raise(ArgumentError, "Can only add row from a Hash or an Array but received #{row.class}") end @rows << Row.new("|#{values.join('|')}|") end |
#argument_rows ⇒ Object
The argument rows in the example table
82 83 84 |
# File 'lib/cuke_modeler/models/example.rb', line 82 def argument_rows rows[1..rows.count] || [] end |
#children ⇒ Object
Returns the model objects that belong to this model.
97 98 99 |
# File 'lib/cuke_modeler/models/example.rb', line 97 def children rows + end |
#parameter_row ⇒ Object
The parameter row for the example table
87 88 89 |
# File 'lib/cuke_modeler/models/example.rb', line 87 def parameter_row rows.first end |
#parameters ⇒ Object
Returns the parameters of the example table
92 93 94 |
# File 'lib/cuke_modeler/models/example.rb', line 92 def parameters parameter_row ? parameter_row.cells.map(&:value) : [] end |
#remove_row(row_removed) ⇒ Object
Removes a row from the example table. The row can be given as a Hash of parameters and their corresponding values or as an Array of values which will be assigned in order.
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/cuke_modeler/models/example.rb', line 64 def remove_row(row_removed) return if argument_rows.empty? values = if row_removed.is_a?(Array) row_removed elsif row_removed.is_a?(Hash) # There is no guarantee that the user built up their hash with the keys in the same order as # the parameter row and so the values have to be ordered by us. ordered_row_values(row_removed) else raise(ArgumentError, "Can only remove row from a Hash or an Array but received #{row_removed.class}") end location = index_for_values(values.map(&:to_s).map(&:strip)) @rows.delete_at(location + 1) if location end |
#to_s ⇒ Object
Returns a string representation of this model. For an example model, this will be Gherkin text that is equivalent to the example being modeled.
106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/cuke_modeler/models/example.rb', line 106 def to_s text = '' text << "#{tag_output_string}\n" unless .empty? text << "#{@keyword}:#{name_output_string}" text << "\n#{description_output_string}" unless no_description_to_output? text << "\n" unless rows.empty? || no_description_to_output? text << "\n#{parameters_output_string}" if parameter_row text << "\n#{rows_output_string}" unless argument_rows.empty? text end |