Class: RailsTracker::IssuesController

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

Instance Method Summary collapse

Methods inherited from ApplicationController

#redirect_to_back_if_valid

Instance Method Details

#currently_trackingObject



43
44
45
# File 'app/controllers/rails_tracker/issues_controller.rb', line 43

def currently_tracking
  @currently_tracked = UsersIssues.where(:user_id => current_user.id)
end

#indexObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'app/controllers/rails_tracker/issues_controller.rb', line 9

def index
  # Instantiate/setup the main applications Github config settings
  # Cache response headers for rate limiting / conditional check
  @store  = ActiveSupport::Cache::MemoryStore.new

  @github = Github::Issues.new do |config|
    config.stack.insert_before Github::Response::Jsonize, Faraday::HttpCache, @store
  end

  @issues = @github.all(:user => RailsTracker.config.user,
                        :repo => RailsTracker.config.repo,
                        :state => "open",
                        :labels => RailsTracker.config.labels)
end

#listenObject



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'app/controllers/rails_tracker/issues_controller.rb', line 62

def listen
  # responder for post updates from github. Logic below is to handle callbacks from Github.
  if params["issue"].present? && params["issue"]["state"] == "closed"
    issue_id = params["issue"]["id"]
    # Local all users tracking the issue
    issues = UsersIssues.where(:issue_id => issue_id)
    issues.each do |issue|
      usr = User.find(issue.user_id)
      # Handle the mailer async & delay the job
      IssueMailer.delay.resolved_alert(usr,issue)
      # Mark the issue as closed
      issue.active = false
      issue.save
    end
  end
  render :nothing => true
end

#resolvedObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'app/controllers/rails_tracker/issues_controller.rb', line 47

def resolved
  # Instantiate/setup the main applications Github config settings
  # Cache response headers for rate limiting / conditional check
  @store  = ActiveSupport::Cache::MemoryStore.new

  @github = Github::Issues.new do |config|
    config.stack.insert_before Github::Response::Jsonize, Faraday::HttpCache, @store
  end

  @issues = @github.all(:user => RailsTracker.config.user,
                              :repo => RailsTracker.config.repo,
                              :state => "closed",
                              :labels => RailsTracker.config.labels)
end

#track_issueObject



24
25
26
27
28
29
30
31
32
33
34
# File 'app/controllers/rails_tracker/issues_controller.rb', line 24

def track_issue
  issue_id    = params[:id]
  issue_title = params[:title]
  issue_body  = params[:body]
  # Find or create a record for a user who indicates they want to track an issue
  UsersIssues.find_or_create_by_user_id_and_issue_id(:user_id => current_user.id,
                                                     :issue_id => issue_id,
                                                     :title => issue_title,
                                                     :body => issue_body)
  redirect_to_back_if_valid
end

#un_trackObject



36
37
38
39
40
41
# File 'app/controllers/rails_tracker/issues_controller.rb', line 36

def un_track
  # Update corresponding record and change status for the particular issue
  @issue = UsersIssues.where(:user_id => current_user.id, :issue_id => params[:id])
  @issue[0].delete if @issue[0].present?
  redirect_to_back_if_valid
end