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

Instance Method Summary collapse

Methods included from PaginationSearch::Pagination

paginate_with, paginated

Instance Attribute Details

#versionObject



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

def version
  @version || latest_query_version
end

Instance Method Details

#add_result(result) ⇒ Object



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

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

#latest_completed_resultObject



38
39
40
# File 'app/models/query.rb', line 38

def latest_completed_result
  latest_results.completed.last
end

#latest_query_versionObject



50
51
52
# File 'app/models/query.rb', line 50

def latest_query_version
  query_versions.last
end

#performant_tag_listObject



42
43
44
45
46
47
48
# File 'app/models/query.rb', line 42

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



54
55
56
# File 'app/models/query.rb', line 54

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

#set_roles(roles) ⇒ Object



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

def set_roles(roles)
  query_roles.delete_all
  roles.each { |role| query_roles.build(role: role) }
end

#summaryObject



72
73
74
75
76
# File 'app/models/query.rb', line 72

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