class Marso::ScenarioContext

Attributes

after_run[R]
before_run[R]
ctx[R]
description[R]
feature_id[R]
get_scenario[R]
id[R]
status[R]
story_id[R]

Public Class Methods

new(description, ctx) click to toggle source
# File lib/marso/domain/scenario/scenario.rb, line 12
def initialize(description, ctx)
  validate_arguments(description, ctx)

  @description = description.clone
  @ctx=ctx.clone

  @description[:id] = SecureRandom.hex(3) if description[:id].nil?
  @description[:status] = :none if description[:status].nil?

  @id = @description[:id]
  @before_run = @description[:before_run]
  @get_scenario = @description[:get_scenario]
  @after_run = @description[:after_run]
  @status = @description[:status]

  @story_id = ctx[:story_id]
  @feature_id = ctx[:feature_id]
end

Public Instance Methods

indented_colorized_text() click to toggle source
# File lib/marso/domain/scenario/scenario.rb, line 49
def indented_colorized_text
  s = @get_scenario.call(@id, @ctx)
  s.indented_colorized_text
end
puts_scenario() click to toggle source
# File lib/marso/domain/scenario/scenario.rb, line 44
def puts_scenario
  s = @get_scenario.call(@id, @ctx)
  s.puts_description
end
run() click to toggle source
# File lib/marso/domain/scenario/scenario.rb, line 31
def run
  @before_run.call(@description[:id], @ctx) unless @before_run.nil?
  s = @get_scenario.call(@id, @ctx)
  runned_scenario = s.run
  @after_run.call(@id, @ctx) unless @after_run.nil?

  updated_description = @description.clone
  updated_description[:get_scenario] = proc { runned_scenario }
  updated_description[:status] = runned_scenario.status

  return ScenarioContext.new(updated_description, @ctx)
end

Private Instance Methods

validate_arguments(description, ctx) click to toggle source
# File lib/marso/domain/scenario/scenario.rb, line 55
def validate_arguments(description, ctx)
  raise ArgumentError, "Argument 'ctx' must be a Hash" unless ctx.is_a?(Hash)
  raise ArgumentError, "Argument 'description' cannot be nil" if description.nil?
  raise ArgumentError, "Argument 'description' must define a :get_scenario key that points to a closure that returns a Marso::Scenario object" if description[:get_scenario].nil?
end