Class: Cucumber::CucumberExpressions::CombinatorialGeneratedExpressionFactory
- Inherits:
-
Object
- Object
- Cucumber::CucumberExpressions::CombinatorialGeneratedExpressionFactory
- Defined in:
- lib/cucumber/cucumber_expressions/combinatorial_generated_expression_factory.rb
Constant Summary collapse
- MAX_EXPRESSIONS =
256 generated expressions ought to be enough for anybody
256
Instance Method Summary collapse
- #generate_expressions ⇒ Object
- #generate_permutations(generated_expressions, depth, current_parameter_types) ⇒ Object
-
#initialize(expression_template, parameter_type_combinations) ⇒ CombinatorialGeneratedExpressionFactory
constructor
A new instance of CombinatorialGeneratedExpressionFactory.
Constructor Details
#initialize(expression_template, parameter_type_combinations) ⇒ CombinatorialGeneratedExpressionFactory
Returns a new instance of CombinatorialGeneratedExpressionFactory.
8 9 10 11 |
# File 'lib/cucumber/cucumber_expressions/combinatorial_generated_expression_factory.rb', line 8 def initialize(expression_template, parameter_type_combinations) @expression_template = expression_template @parameter_type_combinations = parameter_type_combinations end |
Instance Method Details
#generate_expressions ⇒ Object
13 14 15 16 17 |
# File 'lib/cucumber/cucumber_expressions/combinatorial_generated_expression_factory.rb', line 13 def generate_expressions generated_expressions = [] generate_permutations(generated_expressions, 0, []) generated_expressions end |
#generate_permutations(generated_expressions, depth, current_parameter_types) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/cucumber/cucumber_expressions/combinatorial_generated_expression_factory.rb', line 22 def generate_permutations(generated_expressions, depth, current_parameter_types) return if generated_expressions.length >= MAX_EXPRESSIONS if depth == @parameter_type_combinations.length generated_expression = GeneratedExpression.new(@expression_template, current_parameter_types) generated_expressions.push(generated_expression) return end (0...@parameter_type_combinations[depth].length).each do |i| # Avoid recursion if no elements can be added. break if generated_expressions.length >= MAX_EXPRESSIONS new_current_parameter_types = current_parameter_types.dup # clone new_current_parameter_types.push(@parameter_type_combinations[depth][i]) generate_permutations(generated_expressions, depth + 1, new_current_parameter_types) end end |