Class: OmnibarController

Inherits:
ApplicationController show all
Defined in:
app/controllers/omnibar_controller.rb

Instance Method Summary collapse

Methods inherited from ApplicationController

#after_sign_in_path_for, #api_authenticate!, #current_project, #expire_revision!, #followed_projects, #no_cache, #read_revision, #require_login, #return_or_cache_revision!, #revision, #save_current_project, #set_current_project, #unfurling?

Methods included from UrlHelper

#edit_release_path, #edit_release_url, #feature_path, #github_commit_range_url, #github_commit_url, #github_project_url, #github_url?, #goldmine_case_number_url, #link_to_project_feature, #new_release_url, #release_path, #release_url, #releases_path

Instance Method Details

#showObject



3
4
5
6
7
8
9
10
11
12
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
59
60
61
62
# File 'app/controllers/omnibar_controller.rb', line 3

def show
  results = []
  query = params[:query]
  filter = [:commit, :ticket, :project]
  query, filter = query[1..-1], [:ticket] if query.starts_with? "#"
  query, filter = query[1..-1], [:commit] if query.starts_with? "@"

  Commit.includes(:project).where(["sha like ?", "#{query}%"]).each do |commit|
    results << {
      type: "commit",
      projectTitle: commit.project.name,
      projectColor: commit.project.color,
      url: "/commits/#{commit.sha}",
      sha: commit.sha,
      message: commit.message,
      committer: {
        name: commit.committer,
        email: commit.committer_email } }
  end if filter.member? :commit

  Ticket.includes(:project, :reporter).where(["number::text like ?", "#{query}%"]).each do |ticket|
    next unless ticket.project
    results << {
      type: "ticket",
      projectTitle: ticket.project.name,
      projectColor: ticket.project.color,
      url: "/projects/#{ticket.project.slug}/tickets/by_number/#{ticket.number}",
      number: ticket.number,
      summary: ticket.summary,
      reporter: ticket.reporter && {
        name: ticket.reporter.name,
        email: ticket.reporter.email } }
  end if filter.member? :ticket

  Project.where(["slug like ?", "#{query}%"]).each do |project|
    results.concat [{
      type: "project",
      projectTitle: project.name,
      projectColor: project.color,
      title: "Scheduler",
      url: "/scheduler/by_project/#{project.slug}" },
    { type: "project",
      projectTitle: project.name,
      projectColor: project.color,
      title: "Testing Report",
      url: "/testing_report/#{project.slug}" },
    { type: "project",
      projectTitle: project.name,
      projectColor: project.color,
      title: "Releases",
      url: "/projects/#{project.slug}/releases" },
    { type: "project",
      projectTitle: project.name,
      projectColor: project.color,
      title: "Pretickets",
      url: "/pretickets/by_project/#{project.slug}" }]
  end if filter.member? :project

  render json: results
end