class ExamplesController < ApplicationController
before_action :set_example, only: [:show, :run_scenario]
def index
@tag = params[:tag]
@examples = @tag.present? ? ExampleRegistry.filter_by_tag(@tag) : ExampleRegistry.all
@tags = ExampleRegistry.tags
end
def show
@source_code = @example.source_code
end
def run_scenario
scenario_index = params[:scenario_index].to_i
scenario = @example.scenarios[scenario_index]
unless scenario
head :unprocessable_entity
return
end
inputs = {}
scenario.inputs.each do |input|
value = params.dig(:inputs, input.name)
unless value.present? && input.options.include?(value)
head :unprocessable_entity
return
end
inputs[input.name.to_sym] = value
end
@result = ScenarioRunner.run(
source_file: @example.source_file,
entry_class: @example.entry_class,
entry_method: @example.entry_method,
inputs: inputs
)
@scenario = scenario
render partial: "result", locals: { result: @result, scenario: @scenario }
end
private
def set_example
@example = ExampleRegistry.find_by_slug(params[:slug])
raise ActionController::RoutingError, "Not Found" unless @example
end
end