Class: Interaction::QueryUpdate

Inherits:
Object
  • Object
show all
Includes:
QueryInteraction
Defined in:
lib/interaction/query_update.rb

Instance Attribute Summary

Attributes included from QueryInteraction

#errors

Instance Method Summary collapse

Constructor Details

#initialize(query, params) ⇒ QueryUpdate

Returns a new instance of QueryUpdate.



5
6
7
8
9
10
11
# File 'lib/interaction/query_update.rb', line 5

def initialize(query, params)
  @errors = []
  @query = query
  @current_query_version = @query.version
  @params = params
  unpack_params
end

Instance Method Details

#create_new_query_version?Boolean

Returns:

  • (Boolean)


60
61
62
63
# File 'lib/interaction/query_update.rb', line 60

def create_new_query_version?
  return false unless @params[:version]
  @current_query_version.body != @body || @current_query_version.parameters != @parameters
end

#executeObject



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/interaction/query_update.rb', line 13

def execute
  @query.title = @title
  @query.tag_list = @tags
  @query.set_roles(@roles)
  @query.scheduled_flag = @scheduled_flag
  @query.email = @email

  @current_query_version.comment = @comment
  @current_query_version.save!

  next_query_version = nil
  if create_new_query_version?
    @query.latest_body = @body

    next_query_version = @query.query_versions.build(
      version: @query.latest_version + 1,
      body: @body,
      parameters: @parameters,
      user_id: @user.id
    )

    current_visualizations = @current_query_version.visualizations
    current_visualizations.reverse_each do |visualization|
      next_query_version.visualizations.build(
        title: visualization.title,
        html_source: visualization.html_source
      )
    end
  end

  @query.add_result(@result)
  @query.save
  merge_query_errors
  @query.reload

  # FIXME: ------------------------------------------------------------------------------------------
  #   @query.reload clobbers the version (an unpersisted field), so we need to re-set the version
  #   if we created a new version we will want to send back that new version
  #   otherwise, we want to set it back to the version that was passed in
  #   pretty hacky, will need to figure out a better solution
  # -------------------------------------------------------------------------------------------------
  @query.version = next_query_version || @current_query_version

  @result.copy_latest_result if @result.present?
  @query
end