Class: Macros4Cuke::MacroStep
- Inherits:
-
Object
- Object
- Macros4Cuke::MacroStep
- Defined in:
- lib/macros4cuke/macro-step.rb
Overview
A macro-step object is a Cucumber step that is itself an aggregation of lower-level sub-steps. When a macro-step is used in a scenario, then its execution is equivalent to the execution of its sub-steps. A macro-step may have zero or more arguments. The actual values bound to these arguments are passed to the sub-steps at execution time.
Instance Attribute Summary collapse
-
#args ⇒ Object
readonly
The list of macro argument names (as appearing in the substeps and in the macro phrase).
-
#key ⇒ Object
readonly
Unique key of the macro as derived from the macro phrase.
-
#phrase_args ⇒ Object
readonly
The list of macro arguments that appears in the macro phrase.
-
#renderer ⇒ Object
readonly
A template engine that expands the sub-steps upon request.
Class Method Summary collapse
-
.macro_key(aMacroPhrase, useTable, mode) ⇒ String
Compute the identifier of the macro from the given macro phrase.
Instance Method Summary collapse
-
#expand(aPhrase, rawData) ⇒ Object
Render the steps from the template, given the values taken by the parameters.
-
#initialize(aMacroPhrase, theSubsteps, useTable) ⇒ MacroStep
constructor
Constructor.
Constructor Details
#initialize(aMacroPhrase, theSubsteps, useTable) ⇒ MacroStep
Constructor.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/macros4cuke/macro-step.rb', line 34 def initialize(aMacroPhrase, theSubsteps, useTable) @key = self.class.macro_key(aMacroPhrase, useTable, :definition) # Retrieve the macro arguments embedded in the phrase. @phrase_args = scan_arguments(aMacroPhrase, :definition) # Manipulate the substeps source text substeps_processed = preprocess(theSubsteps) @renderer = Templating::Engine.new(substeps_processed) substeps_vars = renderer.variables @args = validate_phrase_args(@phrase_args, substeps_vars) @args.concat(substeps_vars) @args.uniq! end |
Instance Attribute Details
#args ⇒ Object (readonly)
The list of macro argument names (as appearing in the substeps and in the macro phrase).
27 28 29 |
# File 'lib/macros4cuke/macro-step.rb', line 27 def args @args end |
#key ⇒ Object (readonly)
Unique key of the macro as derived from the macro phrase.
21 22 23 |
# File 'lib/macros4cuke/macro-step.rb', line 21 def key @key end |
#phrase_args ⇒ Object (readonly)
The list of macro arguments that appears in the macro phrase.
24 25 26 |
# File 'lib/macros4cuke/macro-step.rb', line 24 def phrase_args @phrase_args end |
#renderer ⇒ Object (readonly)
A template engine that expands the sub-steps upon request.
18 19 20 |
# File 'lib/macros4cuke/macro-step.rb', line 18 def renderer @renderer end |
Class Method Details
.macro_key(aMacroPhrase, useTable, mode) ⇒ String
Compute the identifier of the macro from the given macro phrase.
A macro phrase is a text that may contain zero or more placeholders.
In definition mode, a placeholder is delimited by chevrons <..>.
In invokation mode, a value bound to a placeholder is delimited by double quotes.
The rule for building the identifying key are:
- Leading and trailing space(s) are removed.
- Each underscore character is removed.
- Every sequence of one or more space(s) is converted into an underscore
- Each placeholder (i.e. = delimiters + enclosed text) is converted into a letter X.
- when useTable is true, concatenate: _T
@example: Consider the macro phrase: 'create the following "contactType" contact'
The resulting macro_key is: 'create_the_following_X_contact_T'
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/macros4cuke/macro-step.rb', line 71 def self.macro_key(aMacroPhrase, useTable, mode) stripped_phrase = aMacroPhrase.strip # Remove leading ... trailing space(s) # Remove every underscore stripped_phrase.gsub!(/_/, '') # Replace all consecutive whitespaces by an underscore stripped_phrase.gsub!(/\s+/, '_') # Determine the pattern to isolate each argument/parameter with its delimiters pattern = case mode when :definition /<(?:[^\\<>]|\\.)*>/ when :invokation /"([^\\"]|\\.)*"/ end # Each text between quotes or chevron is replaced by the letter X normalized = stripped_phrase.gsub(pattern, 'X') key = normalized + (useTable ? '_T' : '') return key end |
Instance Method Details
#expand(aPhrase, rawData) ⇒ Object
Render the steps from the template, given the values taken by the parameters
104 105 106 107 |
# File 'lib/macros4cuke/macro-step.rb', line 104 def (aPhrase, rawData) params = validate_params(aPhrase, rawData) return renderer.render(nil, params) end |