yard-cucumber 2.1.3 → 2.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +4 -0
- data/example/scenario_outline.feature +15 -1
- data/example/scenario_outline_multi.feature +15 -0
- data/example/step_definitions/struct.rb +11 -0
- data/lib/cucumber/city_builder.rb +30 -12
- data/lib/templates/default/feature/html/outline.erb +33 -25
- data/lib/templates/default/fulldoc/html/css/cucumber.css +9 -1
- data/lib/yard/code_objects/cucumber/scenario_outline.rb +34 -25
- data/lib/yard-cucumber.rb +1 -1
- metadata +5 -3
    
        data/History.txt
    CHANGED
    
    
| @@ -77,4 +77,18 @@ Feature: Displaying Scenario Outlines | |
| 77 77 | 
             
                And I expect <denomination> to be replaced by the example denomination
         | 
| 78 78 |  | 
| 79 79 | 
             
                Examples:
         | 
| 80 | 
            -
                  | name | price | denomination |
         | 
| 80 | 
            +
                  | name | price | denomination |
         | 
| 81 | 
            +
             | 
| 82 | 
            +
              Scenario Outline: Multiple Example Table
         | 
| 83 | 
            +
                Given that <Customer> is a valid customer
         | 
| 84 | 
            +
                And that the product, named '<Product>', is a valid product
         | 
| 85 | 
            +
                When the customer has purchased the product
         | 
| 86 | 
            +
                Then I expect the customer to be a member of the '<Product>' group
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                Examples: Example group A
         | 
| 89 | 
            +
                 | Customer   | Product   |
         | 
| 90 | 
            +
                 | Customer A | Product A |
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                Examples: Example group B
         | 
| 93 | 
            +
                 | Customer   | Product   |
         | 
| 94 | 
            +
                 | Customer B | Product A |
         | 
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            Feature: My Feature
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Scenario Outline: Multiple Example Table
         | 
| 4 | 
            +
              Given that <Customer> is a valid customer
         | 
| 5 | 
            +
              And that the product, named '<Product>', is a valid product
         | 
| 6 | 
            +
              When the customer has purchased the product
         | 
| 7 | 
            +
              Then I expect the customer to be a member of the '<Product>' group
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              Examples: Example group A
         | 
| 10 | 
            +
               | Customer   | Product   |
         | 
| 11 | 
            +
               | Customer A | Product A |
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              Examples: Example group B
         | 
| 14 | 
            +
               | Customer   | Product   |
         | 
| 15 | 
            +
               | Customer B | Product A |
         | 
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            #
         | 
| 2 | 
            +
            # @see https://github.com/burtlo/yard-cucumber/issues/18
         | 
| 3 | 
            +
            # 
         | 
| 4 | 
            +
            CustomerUsageBehavior = Struct.new(:weight, :days, :time, :location, :other_party, :usage_type, :direction, :quantity)
         | 
| 5 | 
            +
             | 
| 6 | 
            +
             | 
| 7 | 
            +
            class CustomerProfile
         | 
| 8 | 
            +
              def generate_winner(max=@total_weight)
         | 
| 9 | 
            +
                 # blah
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
            end
         | 
| @@ -186,16 +186,24 @@ module Cucumber | |
| 186 186 | 
             
                  # 
         | 
| 187 187 | 
             
                  def examples(examples)
         | 
| 188 188 | 
             
                    #log.debug "EXAMPLES"
         | 
| 189 | 
            -
             | 
| 190 | 
            -
                     | 
| 189 | 
            +
                    
         | 
| 190 | 
            +
                    example = YARD::CodeObjects::Cucumber::ScenarioOutline::Examples.new(:keyword => examples.keyword,
         | 
| 191 191 | 
             
                      :name => examples.name,
         | 
| 192 192 | 
             
                      :line => examples.line,
         | 
| 193 193 | 
             
                      :comments => examples.comments.map{|comment| comment.value}.join("\n"),
         | 
| 194 | 
            -
                      :rows => matrix(examples.rows) | 
| 194 | 
            +
                      :rows => matrix(examples.rows))
         | 
| 195 | 
            +
                      
         | 
| 196 | 
            +
                      
         | 
| 197 | 
            +
                    # add the example to the step containers list of examples
         | 
| 195 198 |  | 
| 196 | 
            -
                     | 
| 197 | 
            -
             | 
| 198 | 
            -
                     | 
| 199 | 
            +
                    @step_container.examples << example
         | 
| 200 | 
            +
             | 
| 201 | 
            +
                    # For each example data row we want to generate a new scenario using our
         | 
| 202 | 
            +
                    # current scenario as the template.
         | 
| 203 | 
            +
             | 
| 204 | 
            +
                    example.data.length.times do |row_index|
         | 
| 205 | 
            +
                      
         | 
| 206 | 
            +
                      # Generate a copy of the scenario.
         | 
| 199 207 |  | 
| 200 208 | 
             
                      scenario = YARD::CodeObjects::Cucumber::Scenario.new(@step_container,"example_#{@step_container.scenarios.length + 1}") do |s|
         | 
| 201 209 | 
             
                        s.comments = @step_container.comments
         | 
| @@ -205,6 +213,8 @@ module Cucumber | |
| 205 213 | 
             
                        s.value = "#{@step_container.value} (#{@step_container.scenarios.length + 1})"
         | 
| 206 214 | 
             
                      end
         | 
| 207 215 |  | 
| 216 | 
            +
                      # Generate a copy of the scenario steps.
         | 
| 217 | 
            +
             | 
| 208 218 | 
             
                      @step_container.steps.each do |step|
         | 
| 209 219 | 
             
                        step_instance = YARD::CodeObjects::Cucumber::Step.new(scenario,step.line_number) do |s|
         | 
| 210 220 | 
             
                          s.keyword = step.keyword.dup
         | 
| @@ -215,23 +225,29 @@ module Cucumber | |
| 215 225 | 
             
                          s.table = clone_table(step.table) if step.has_table?
         | 
| 216 226 | 
             
                        end
         | 
| 217 227 |  | 
| 218 | 
            -
                         | 
| 228 | 
            +
                        # Look at the particular data for the example row and do a simple
         | 
| 229 | 
            +
                        # find and replace of the <key> with the associated values.
         | 
| 230 | 
            +
             | 
| 231 | 
            +
                        example.values_for_row(row_index).each do |key,text|
         | 
| 219 232 | 
             
                          text ||= "" #handle empty cells in the example table
         | 
| 220 233 | 
             
                          step_instance.value.gsub!("<#{key}>",text)
         | 
| 221 234 | 
             
                          step_instance.text.gsub!("<#{key}>",text) if step_instance.has_text?
         | 
| 222 235 | 
             
                          step_instance.table.each{|row| row.each{|col| col.gsub!("<#{key}>",text)}} if step_instance.has_table?
         | 
| 223 236 | 
             
                        end
         | 
| 224 | 
            -
             | 
| 237 | 
            +
                        
         | 
| 238 | 
            +
                        # Connect these steps that we created to the scenario we created
         | 
| 239 | 
            +
                        # and then add the steps to the scenario created.
         | 
| 240 | 
            +
                        
         | 
| 225 241 | 
             
                        step_instance.scenario = scenario
         | 
| 226 242 | 
             
                        scenario.steps << step_instance
         | 
| 227 243 | 
             
                      end
         | 
| 228 244 |  | 
| 229 | 
            -
                      #  | 
| 230 | 
            -
                      #  | 
| 231 | 
            -
             | 
| 245 | 
            +
                      # Add the scenario to the list of scenarios maintained by the  feature 
         | 
| 246 | 
            +
                      # and add the feature to the scenario
         | 
| 247 | 
            +
                      
         | 
| 232 248 | 
             
                      scenario.feature = @feature
         | 
| 233 249 | 
             
                      @step_container.scenarios << scenario
         | 
| 234 | 
            -
             | 
| 250 | 
            +
                    
         | 
| 235 251 | 
             
                    end
         | 
| 236 252 |  | 
| 237 253 | 
             
                  end
         | 
| @@ -261,6 +277,8 @@ module Cucumber | |
| 261 277 | 
             
                      rubify(step.rows)
         | 
| 262 278 | 
             
                    end 
         | 
| 263 279 |  | 
| 280 | 
            +
                    log.debug "Step: #{multiline_arg}"
         | 
| 281 | 
            +
                    
         | 
| 264 282 | 
             
                    case(multiline_arg)
         | 
| 265 283 | 
             
                    when gherkin_multiline_string_class
         | 
| 266 284 | 
             
                      @table_owner.text = multiline_arg.value
         | 
| @@ -9,32 +9,40 @@ | |
| 9 9 | 
             
            <div class="outline">
         | 
| 10 10 |  | 
| 11 11 | 
             
              <% if @scenario.examples? %>
         | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 12 | 
            +
                
         | 
| 13 | 
            +
                <% @scenario.examples.each_with_index do |example,example_index| %>
         | 
| 14 | 
            +
                  <div class="keyword">
         | 
| 15 | 
            +
                    <%= h example.keyword %><%= example.name != "" ? ':' : '' %>
         | 
| 16 | 
            +
                  </div>
         | 
| 17 | 
            +
                  <div class="example-group-name"><%= h example.name %></div>
         | 
| 18 | 
            +
                  <br style="clear: both;"/>
         | 
| 19 | 
            +
                  <table>
         | 
| 20 | 
            +
                    <thead>
         | 
| 21 | 
            +
                      <tr>
         | 
| 22 | 
            +
                        <% example.headers.each_with_index do |header,header_index| %>
         | 
| 23 | 
            +
                          <th><%= h(header) %></th>
         | 
| 24 | 
            +
                        <% end %>
         | 
| 25 | 
            +
                      </tr>
         | 
| 26 | 
            +
                    </thead>
         | 
| 27 | 
            +
                    <% unless example.data.empty? %>
         | 
| 28 | 
            +
                      <% example.data.each_with_index do |row,row_index| %>
         | 
| 29 | 
            +
                      <tr class="<%= (row_index + 1) % 2 == 0 ? "even example#{example_index+1}-#{row_index +1}" : "odd example#{example_index+1}-#{row_index +1}" %>">
         | 
| 30 | 
            +
                        <% row.each_with_index do |column,column_index| %>
         | 
| 31 | 
            +
                          <td><%= h(column.to_s.strip) %></td>
         | 
| 32 | 
            +
                        <% end %>
         | 
| 33 | 
            +
                      </tr>
         | 
| 34 | 
            +
                      <% end %>
         | 
| 35 | 
            +
                    <% else %>
         | 
| 36 | 
            +
                      <!-- Scenario Outline example table is empty -->
         | 
| 37 | 
            +
                      <tr class="odd">
         | 
| 38 | 
            +
                        <td colspan="<%= example.headers.length %>" style="text-align: center;">
         | 
| 39 | 
            +
                          No Examples Defined
         | 
| 40 | 
            +
                        </td>
         | 
| 41 | 
            +
                      </tr>
         | 
| 18 42 | 
             
                    <% end %>
         | 
| 19 | 
            -
                  </ | 
| 20 | 
            -
                 | 
| 21 | 
            -
                 | 
| 22 | 
            -
                  <% @scenario.example_data.each_with_index do |row,row_index| %>
         | 
| 23 | 
            -
                  <tr class="<%= (row_index + 1) % 2 == 0 ? "even example#{row_index +1}" : "odd example#{row_index +1}" %>">
         | 
| 24 | 
            -
                    <% row.each_with_index do |column,column_index| %>
         | 
| 25 | 
            -
                      <td><%= h(column.to_s.strip) %></td>
         | 
| 26 | 
            -
                    <% end %>
         | 
| 27 | 
            -
                  </tr>
         | 
| 28 | 
            -
                  <% end %>
         | 
| 29 | 
            -
                <% else %>
         | 
| 30 | 
            -
                  <!-- Scenario Outline example table is empty -->
         | 
| 31 | 
            -
                  <tr class="odd">
         | 
| 32 | 
            -
                    <td colspan="<%= @scenario.example_headers.length %>" style="text-align: center;">
         | 
| 33 | 
            -
                      No Examples Defined
         | 
| 34 | 
            -
                    </td>
         | 
| 35 | 
            -
                  </tr>
         | 
| 36 | 
            -
                <% end %>
         | 
| 37 | 
            -
              </table>
         | 
| 43 | 
            +
                  </table>
         | 
| 44 | 
            +
                <% end  %>
         | 
| 45 | 
            +
                
         | 
| 38 46 | 
             
              <% else %>
         | 
| 39 47 | 
             
              <div class="keyword">No Example Table Defined</div>
         | 
| 40 48 | 
             
              <div class="keyword suggestion developer">[!] Did you mean to create a Scenario?</div>
         | 
| @@ -123,11 +123,19 @@ div.undefined { padding: 6px; } | |
| 123 123 | 
             
                margin-left: 40px;
         | 
| 124 124 | 
             
            }
         | 
| 125 125 | 
             
            .outline .keyword {
         | 
| 126 | 
            +
                float: left;
         | 
| 127 | 
            +
                margin-top: 20px;
         | 
| 126 128 | 
             
                padding: 4px;
         | 
| 127 129 | 
             
                font-weight: bold;
         | 
| 128 130 | 
             
                font-size: 16px;
         | 
| 129 131 | 
             
            }
         | 
| 130 | 
            -
             | 
| 132 | 
            +
            .outline .example-group-name {
         | 
| 133 | 
            +
                float: left;
         | 
| 134 | 
            +
                margin-top: 20px;
         | 
| 135 | 
            +
                padding: 4px 4px 4px 20px;
         | 
| 136 | 
            +
                font-size: 14px;
         | 
| 137 | 
            +
                color: #343332;
         | 
| 138 | 
            +
            }
         | 
| 131 139 | 
             
            .multiline table tr, .outline table tr {
         | 
| 132 140 | 
             
                padding: 4px;
         | 
| 133 141 | 
             
            }
         | 
| @@ -13,7 +13,7 @@ module YARD::CodeObjects::Cucumber | |
| 13 13 | 
             
                  @steps = []
         | 
| 14 14 | 
             
                  @tags = []
         | 
| 15 15 | 
             
                  @scenarios = []
         | 
| 16 | 
            -
                  @examples =  | 
| 16 | 
            +
                  @examples = []
         | 
| 17 17 | 
             
                end
         | 
| 18 18 |  | 
| 19 19 | 
             
                def background?
         | 
| @@ -25,40 +25,49 @@ module YARD::CodeObjects::Cucumber | |
| 25 25 | 
             
                end
         | 
| 26 26 |  | 
| 27 27 | 
             
                def examples?
         | 
| 28 | 
            -
                   | 
| 29 | 
            -
                end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                def example_keyword
         | 
| 32 | 
            -
                  @examples[:keyword]
         | 
| 28 | 
            +
                  @examples.find {|example| example.rows }
         | 
| 33 29 | 
             
                end
         | 
| 34 30 |  | 
| 35 | 
            -
                def example_headers
         | 
| 36 | 
            -
                  @examples[:rows].first
         | 
| 37 | 
            -
                end
         | 
| 38 31 |  | 
| 39 | 
            -
                 | 
| 40 | 
            -
                   | 
| 41 | 
            -
                   | 
| 42 | 
            -
             | 
| 32 | 
            +
                class Examples
         | 
| 33 | 
            +
                  
         | 
| 34 | 
            +
                  attr_accessor :name, :line, :keyword, :comments, :rows
         | 
| 35 | 
            +
                  
         | 
| 36 | 
            +
                  # The first row of the rows contains the headers for the table
         | 
| 37 | 
            +
                  def headers
         | 
| 38 | 
            +
                    rows.first
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
                  
         | 
| 41 | 
            +
                  # The data of the table starts at the second row. When there is no data then
         | 
| 42 | 
            +
                  # return a empty string.
         | 
| 43 | 
            +
                  def data
         | 
| 44 | 
            +
                    rows ? rows[1..-1] : ""
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
                  
         | 
| 47 | 
            +
                  def values_for_row(row)
         | 
| 48 | 
            +
                    hash = {}
         | 
| 43 49 |  | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 50 | 
            +
                    headers.each_with_index do |header,index|
         | 
| 51 | 
            +
                      hash[header] = data[row][index]
         | 
| 52 | 
            +
                    end
         | 
| 46 53 |  | 
| 47 | 
            -
             | 
| 48 | 
            -
                    hash[header] = example_data[row][index]
         | 
| 54 | 
            +
                    hash
         | 
| 49 55 | 
             
                  end
         | 
| 56 | 
            +
                  
         | 
| 57 | 
            +
                  def to_hash
         | 
| 58 | 
            +
                    hash = {}
         | 
| 50 59 |  | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 60 | 
            +
                    rows.each_with_index do |header,index|
         | 
| 61 | 
            +
                      hash[header] = rows.collect {|row| row[index] }
         | 
| 62 | 
            +
                    end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                    hash
         | 
| 65 | 
            +
                  end
         | 
| 56 66 |  | 
| 57 | 
            -
                   | 
| 58 | 
            -
                     | 
| 67 | 
            +
                  def initialize(parameters = {})
         | 
| 68 | 
            +
                    parameters.each {|key,value| send("#{key.to_sym}=",value) if respond_to? "#{key.to_sym}=" }
         | 
| 59 69 | 
             
                  end
         | 
| 60 70 |  | 
| 61 | 
            -
                  hash
         | 
| 62 71 | 
             
                end
         | 
| 63 72 |  | 
| 64 73 | 
             
              end
         | 
    
        data/lib/yard-cucumber.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
            name: yard-cucumber
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 4 | 
             
              prerelease: 
         | 
| 5 | 
            -
              version: 2.1. | 
| 5 | 
            +
              version: 2.1.4
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors: 
         | 
| 8 8 | 
             
            - Franklin Webber
         | 
| @@ -10,7 +10,7 @@ autorequire: | |
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 12 |  | 
| 13 | 
            -
            date: 2011- | 
| 13 | 
            +
            date: 2011-10-10 00:00:00 Z
         | 
| 14 14 | 
             
            dependencies: 
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 16 16 | 
             
              name: gherkin
         | 
| @@ -68,9 +68,11 @@ files: | |
| 68 68 | 
             
            - example/french.feature
         | 
| 69 69 | 
             
            - example/scenario.feature
         | 
| 70 70 | 
             
            - example/scenario_outline.feature
         | 
| 71 | 
            +
            - example/scenario_outline_multi.feature
         | 
| 71 72 | 
             
            - example/step_definitions/example.step.rb
         | 
| 72 73 | 
             
            - example/step_definitions/first.step.rb
         | 
| 73 74 | 
             
            - example/step_definitions/french_steps.rb
         | 
| 75 | 
            +
            - example/step_definitions/struct.rb
         | 
| 74 76 | 
             
            - example/step_definitions/support/env.rb
         | 
| 75 77 | 
             
            - example/step_definitions/support/env_support.rb
         | 
| 76 78 | 
             
            - example/step_definitions/support/support.rb
         | 
| @@ -139,7 +141,7 @@ homepage: http://github.com/burtlo/yard-cucumber | |
| 139 141 | 
             
            licenses: []
         | 
| 140 142 |  | 
| 141 143 | 
             
            post_install_message: "\n\
         | 
| 142 | 
            -
              (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)\n\n  Thank you for installing yard-cucumber 2.1. | 
| 144 | 
            +
              (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)\n\n  Thank you for installing yard-cucumber 2.1.4 / 2011-10-10.\n  \n  Changes:\n    \n  * Support for multiple scenario outlines (Thanks @jmerrifield)\n  \n\n\
         | 
| 143 145 | 
             
              (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::) (::)\n\n"
         | 
| 144 146 | 
             
            rdoc_options: 
         | 
| 145 147 | 
             
            - --charset=UTF-8
         |