Class: Query

Inherits:
ActiveRecord::Base
  • Object
show all
Extended by:
PaginationSearch::Pagination
Defined in:
app/models/query.rb

Constant Summary collapse

LOCATIONS_FOR_ATTRIBUTES =
{
  title:       { association: :base, column: :title, type: :text },
  body:        { association: :base, column: :latest_body, type: :text },
  author:      { association: :users, column: :name, type: :text },
  tags:        { association: :tags, column: :name, type: :text },
  updated_at:  { association: :base, column: :updated_at, type: :time },
  created_at:  { association: :base, column: :created_at, type: :time }
}.freeze
INCLUDES_MODELS =
[:query_versions, :users, :tags, :taggings].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from PaginationSearch::Pagination

paginate_with, paginated

Instance Attribute Details

#versionObject



89
90
91
# File 'app/models/query.rb', line 89

def version
  @version || latest_query_version
end

Class Method Details

.run_scheduledObject



41
42
43
44
45
# File 'app/models/query.rb', line 41

def self.run_scheduled
  scheduled.each do |query|
    Resque.enqueue(ScheduledQueryExecution, query.id, query.user.role)
  end
end

Instance Method Details

#add_result(result) ⇒ Object



93
94
95
96
# File 'app/models/query.rb', line 93

def add_result(result)
  return unless result
  latest_query_version.add_result(result)
end

#create_rolesObject



83
84
85
86
87
# File 'app/models/query.rb', line 83

def create_roles
  return unless @roles_to_create.present?
  query_roles.delete_all
  @roles_to_create.each { |role| query_roles.create(role: role) }
end

#latest_completed_resultObject



47
48
49
# File 'app/models/query.rb', line 47

def latest_completed_result
  latest_results.completed.last
end

#latest_query_versionObject



63
64
65
# File 'app/models/query.rb', line 63

def latest_query_version
  query_versions.last
end

#latest_result_keyObject



67
68
69
# File 'app/models/query.rb', line 67

def latest_result_key
  @latest_result_key ||= "latest_#{AwsS3::S3_FOLDER}/query_#{id}.csv"
end

#latest_result_object_urlObject



71
72
73
# File 'app/models/query.rb', line 71

def latest_result_object_url
  @latest_result_object_url ||= "https://s3.amazonaws.com/#{AwsS3::S3_BUCKET}/#{latest_result_key}"
end

#performant_tag_listObject



51
52
53
54
55
56
57
# File 'app/models/query.rb', line 51

def performant_tag_list
  # ActsAsTaggableOn's tag_list method triggers two queries for every record
  taggings.map do |tagging|
    tag = tags.find { |t| t.id == tagging.tag_id }
    tag.name if tag
  end
end

#rolesObject



75
76
77
# File 'app/models/query.rb', line 75

def roles
  query_roles.map(&:role).uniq
end

#send_result_emailObject



59
60
61
# File 'app/models/query.rb', line 59

def send_result_email
  QueryMailer.query_result_email(self).deliver_now!
end

#set_roles(roles) ⇒ Object



79
80
81
# File 'app/models/query.rb', line 79

def set_roles(roles)
  @roles_to_create = roles
end

#summaryObject



98
99
100
101
102
# File 'app/models/query.rb', line 98

def summary
  Summarizer.new(query_versions).reduce(version: 0, comments: 0) do |qv|
    { versions: 1, comments: qv.comment.blank? ? 0 : 1 }
  end
end