class Interaction::ResultCreation

Attributes

errors[RW]

Public Class Methods

new(params) click to toggle source
# File lib/interaction/result_creation.rb, line 5
def initialize(params)
  @errors = []
  @substitution_values = params[:substitution_values]
  @owner = params[:owner]
  @query_version = get_query_version(params)
end

Public Instance Methods

execute() click to toggle source
# File lib/interaction/result_creation.rb, line 12
def execute
  compiler_result = @query_version.compile(substitution_values: @substitution_values)

  if compiler_result.error
    @errors << compiler_result.error.message
    return
  end

  result = Result.new(
    status: 'enqueued',
    parameters: compiler_result.effective_values,
    compiled_body: compiler_result.body,
    owner: @owner
  )

  result.query_version = @query_version if @query_version.persisted?

  result.save
  @errors << result.errors.full_messages if result.errors.any?

  result
end

Private Instance Methods

get_query_version(params) click to toggle source
# File lib/interaction/result_creation.rb, line 37
def get_query_version(params)
  case params[:query_version_id]
  when 'latest'
    QueryVersion.where(query_id: params[:query_id]).order('version DESC').limit(1)
  when nil
    QueryVersion.new(body: params[:body], parameters: params[:parameters] || {})
  else
    QueryVersion.find(params[:query_version_id])
  end
end