Class: Query
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Query
- 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
- #add_result(result) ⇒ Object
- #create_roles ⇒ Object
- #latest_completed_result ⇒ Object
- #latest_query_version ⇒ Object
- #latest_result_key ⇒ Object
- #latest_result_object_url ⇒ Object
- #performant_tag_list ⇒ Object
- #roles ⇒ Object
- #send_result_email ⇒ Object
- #set_roles(roles) ⇒ Object
- #summary ⇒ Object
Methods included from PaginationSearch::Pagination
Instance Attribute Details
#version ⇒ Object
89 90 91 |
# File 'app/models/query.rb', line 89 def version @version || latest_query_version end |
Class Method Details
.run_scheduled ⇒ Object
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_roles ⇒ Object
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_result ⇒ Object
47 48 49 |
# File 'app/models/query.rb', line 47 def latest_completed_result latest_results.completed.last end |
#latest_query_version ⇒ Object
63 64 65 |
# File 'app/models/query.rb', line 63 def latest_query_version query_versions.last end |
#latest_result_key ⇒ Object
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_url ⇒ Object
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_list ⇒ Object
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 = .find { |t| t.id == tagging.tag_id } tag.name if tag end end |
#roles ⇒ Object
75 76 77 |
# File 'app/models/query.rb', line 75 def roles query_roles.map(&:role).uniq end |
#send_result_email ⇒ Object
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 |
#summary ⇒ Object
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 |