{"action":"created","comment":{"url":"https://api.github.com/repos/UM-USElab/gradecraft-development/pulls/comments/65241966","id":65241966,"diff_hunk":"@@ -1,165 +1,89 @@\n class ChallengeGradesController < ApplicationController\n \n   before_filter :ensure_staff?, except: [:show]\n-  before_action :find_challenge,\n-    only: [:index, :create, :show, :new, :edit, :mass_edit, :challenge,\n-    :update, :edit_status, :update_status, :destroy ]\n   before_action :find_challenge_grade, only: [:show, :edit, :update, :destroy]\n+  before_action :find_challenge, only: [:show, :edit, :challenge, :destroy, :update ]\n \n-  def index\n-    redirect_to @challenge\n-  end\n-\n-  def show\n-    @team = @challenge_grade.team\n-    @title = \"#{@team.name}'s #{@challenge_grade.name} Grade\"\n-  end\n-\n+  # GET /challenge_grades/new?challenge_id=:challenge_id?team_id=:team_id\n   def new\n     @team = current_course.teams.find(params[:team_id])\n+    @challenge = current_course.challenges.find(params[:challenge_id])\n     @challenge_grade = @team.challenge_grades.new\n     @title = \"Grading #{@team.name}'s #{@challenge.name}\"\n   end\n \n-  def edit\n-    @title = \"Editing #{@challenge.name} Grade\"\n-    @team = current_course.teams.find(params[:team_id])\n-  end\n+  # POST /challenge_grades\n+  def create\n+    @challenge_grade = current_course.challenge_grades.new(params[:challenge_grade])\n+    @challenge = @challenge_grade.challenge\n+    @team = @challenge_grade.team\n+    if @challenge_grade.save\n \n-  # Grade many teams on a particular challenge at once\n-  def mass_edit\n-    @teams = current_course.teams\n-    @title = \"Quick Grade #{@challenge.name}\"\n-    @challenge_score_levels = @challenge.challenge_score_levels\n-    @challenge_grades = @teams.map do |t|\n-      @challenge.challenge_grades.where(team_id: t).first ||\n-        @challenge.challenge_grades.new(team: t, challenge: @challenge)\n-    end\n-  end\n+      if ChallengeGradeProctor.new(@challenge_grade).viewable?\n+        ChallengeGradeUpdaterJob.new(challenge_grade_id: @challenge_grade.id).enqueue\n+      end\n \n-  def mass_update\n-    @challenge = current_course.challenges.find(params[:id])\n-    if @challenge.update_attributes(params[:challenge])\n-      redirect_to challenge_path(@challenge),\n-        notice: \"#{@challenge.name} #{term_for :challenge} successfully graded\"\n+      redirect_to @challenge,\n+        notice: \"#{@team.name}'s Grade for #{@challenge.name} #{(term_for :challenge).titleize} successfully graded\"\n     else\n-      render action: \"mass_edit\"\n+      render action: \"new\"\n     end\n   end\n \n-  # @mz TODO: refactor this whole thing, move into models and presenters\n-  def create\n-    @challenge_grade =\n-      @challenge.challenge_grades.create(params[:challenge_grade])\n+  # GET /challenge_grades/:id\n+  def show\n     @team = @challenge_grade.team\n-    respond_to do |format|\n-      if @challenge_grade.save\n-        if current_course.add_team_score_to_student? &&\n-          @challenge_grade.is_student_visible?\n-          # @mz TODO: substitute with ChallengeGrade#recalculate_team_scores\n-          # method, revise specs\n-          @score_recalculator_jobs = @team.students.collect do |student|\n-            ScoreRecalculatorJob.new(user_id: student.id,\n-              course_id: current_course.id)\n-          end\n-          @score_recalculator_jobs.each(&:enqueue)\n-        end\n-        format.html {\n-          redirect_to @challenge,\n-          notice: \"#{@team.name}'s Grade for #{@challenge.name} #{(term_for :challenge).titleize} successfully graded\"\n-        }\n-      else\n-        format.html { render action: \"new\" }\n-      end\n-    end\n+    @title = \"#{@team.name}'s #{@challenge_grade.name} Grade\"\n   end\n \n-  # @mz TODO: refactor this whole thing, move into models and presenters\n-  def update\n+  # GET /challenge_grades/:id/edit\n+  def edit\n+    @title = \"Editing #{@challenge.name} Grade\"\n     @team = @challenge_grade.team\n-    respond_to do |format|\n-      if @challenge_grade.update_attributes(params[:challenge_grade])\n-\n-        if current_course.add_team_score_to_student?\n-          if student_grades_require_update?\n-            # @mz TODO: substitute with ChallengeGrade#recalculate_team_scores\n-            # method, revise specs\n-            # @mz TODO: figure out how @team.students is supposed to be sorted\n-            # in the controller\n-            @score_recalculator_jobs = @team.students.collect do |student|\n-              ScoreRecalculatorJob.new(user_id: student.id,\n-                course_id: current_course.id)\n-            end\n-            @score_recalculator_jobs.each(&:enqueue)\n-          end\n-        end\n-\n-        format.html {\n-          redirect_to @challenge,\n-          notice: \"#{@team.name}'s Grade for #{@challenge.name} #{(term_for :challenge).titleize} successfully updated\"\n-        }\n-      else\n-        format.html { render action: \"edit\" }\n-      end\n-    end\n   end\n \n-  # Changing the status of a grade - allows instructors to review \"Graded\"\n-  # grades, before they are \"Released\" to students\n-  def edit_status\n-    @title = \"#{@challenge.name} Grade Statuses\"\n-    @challenge_grades =\n-      @challenge.challenge_grades.find(params[:challenge_grade_ids])\n-  end\n+  # POST /challenges_grades/:id\n+  def update\n+    @team = @challenge_grade.team\n+    if @challenge_grade.update_attributes(params[:challenge_grade])\n+\n+      if ChallengeGradeProctor.new(@challenge_grade).viewable?\n+        ChallengeGradeUpdaterJob.new(challenge_grade_id: @challenge_grade.id).enqueue\n+      end\n \n-  def update_status\n-    @challenge_grades =\n-      @challenge.challenge_grades.find(params[:challenge_grade_ids])\n-    @challenge_grades.each do |challenge_grade|\n-      challenge_grade.update_attributes!(params[:challenge_grade].reject { |k,v| v.blank? })\n+      redirect_to @challenge,\n+        notice: \"#{@team.name}'s Grade for #{@challenge.name} #{(term_for :challenge).titleize} successfully updated\"\n+    else\n+      render action: \"edit\"\n     end\n-    flash[:notice] = \"Updated #{(term_for :challenge).titleize} Grades!\"\n-    redirect_to challenge_path(@challenge)\n   end\n \n+  # DELETE /challenge_grades/:id\n+  # May be worth it to pull this into a service\n   def destroy\n     @team = @challenge_grade.team\n \n     @challenge_grade.destroy\n-    @challenge_grade.recalculate_student_and_team_scores\n+    @team.challenge_grade_score\n+    @team.students.each do |student|\n+      @team.students.collect do |student|\n+        ScoreRecalculatorJob.new(user_id: student.id, course_id: current_course.id)\n+      end.each(&:enqueue)\n+    end\n+    @team.average_score\n \n     redirect_to challenge_path(@challenge),\n       notice: \"#{@team.name}'s grade for #{@challenge.name} has been successfully deleted.\"\n   end\n \n-  # @mz TODO: refactor all of this nonsense, add specs etc, this works for now\n   private\n \n-  def student_grades_require_update?\n-    score_update_required? || visibility_update_required?\n-  end\n-\n-  def score_update_required?\n-    score_changed? && @challenge_grade.is_student_visible?\n-  end\n-\n-  def visibility_update_required?\n-    visibility_changed? && @challenge_grade.is_student_visible?\n-  end\n-\n-  def visibility_changed?\n-    @challenge_grade.previous_changes[:status].present?\n-  end\n-\n-  def score_changed?\n-    @challenge_grade.previous_changes[:score].present?\n+  def find_challenge_grade\n+    @challenge_grade = current_course.challenge_grades.find(params[:id])\n   end\n \n   def find_challenge\n-    @challenge = current_course.challenges.find(params[:challenge_id])\n+    @challenge = @challenge_grade.challenge","path":"app/controllers/challenge_grades_controller.rb","position":204,"original_position":204,"commit_id":"4e8b73c5456bc2af2189ce677d6c596cf8fa92de","original_commit_id":"4e8b73c5456bc2af2189ce677d6c596cf8fa92de","user":{"login":"chcholman","id":234276,"avatar_url":"https://avatars.githubusercontent.com/u/234276?v=3","gravatar_id":"","url":"https://api.github.com/users/chcholman","html_url":"https://github.com/chcholman","followers_url":"https://api.github.com/users/chcholman/followers","following_url":"https://api.github.com/users/chcholman/following{/other_user}","gists_url":"https://api.github.com/users/chcholman/gists{/gist_id}","starred_url":"https://api.github.com/users/chcholman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chcholman/subscriptions","organizations_url":"https://api.github.com/users/chcholman/orgs","repos_url":"https://api.github.com/users/chcholman/repos","events_url":"https://api.github.com/users/chcholman/events{/privacy}","received_events_url":"https://api.github.com/users/chcholman/received_events","type":"User","site_admin":false},"body":"Fixed!","created_at":"2016-05-31T18:54:13Z","updated_at":"2016-05-31T18:54:13Z","html_url":"https://github.com/UM-USElab/gradecraft-development/pull/1986#discussion_r65241966","pull_request_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/pulls/1986","_links":{"self":{"href":"https://api.github.com/repos/UM-USElab/gradecraft-development/pulls/comments/65241966"},"html":{"href":"https://github.com/UM-USElab/gradecraft-development/pull/1986#discussion_r65241966"},"pull_request":{"href":"https://api.github.com/repos/UM-USElab/gradecraft-development/pulls/1986"}}},"pull_request":{"url":"https://api.github.com/repos/UM-USElab/gradecraft-development/pulls/1986","id":70084956,"html_url":"https://github.com/UM-USElab/gradecraft-development/pull/1986","diff_url":"https://github.com/UM-USElab/gradecraft-development/pull/1986.diff","patch_url":"https://github.com/UM-USElab/gradecraft-development/pull/1986.patch","issue_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/issues/1986","number":1986,"state":"open","locked":false,"title":"1594 team challenges","user":{"login":"chcholman","id":234276,"avatar_url":"https://avatars.githubusercontent.com/u/234276?v=3","gravatar_id":"","url":"https://api.github.com/users/chcholman","html_url":"https://github.com/chcholman","followers_url":"https://api.github.com/users/chcholman/followers","following_url":"https://api.github.com/users/chcholman/following{/other_user}","gists_url":"https://api.github.com/users/chcholman/gists{/gist_id}","starred_url":"https://api.github.com/users/chcholman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chcholman/subscriptions","organizations_url":"https://api.github.com/users/chcholman/orgs","repos_url":"https://api.github.com/users/chcholman/repos","events_url":"https://api.github.com/users/chcholman/events{/privacy}","received_events_url":"https://api.github.com/users/chcholman/received_events","type":"User","site_admin":false},"body":"[ THIS IS NOT READY TO MERGE ]\r\n\r\nThis PR begins the work of cleaning up Challenge Grades, making them follow a consistent pattern with Grades and fixes various bugs around score recalculation. \r\n\r\n* Actions that happen at the Challenge level (applied to multiple challenge grades) are pulled out to a separate Challenge level controller \r\n* Team score recalculation is broken out into two parts - challenge grades, and average student score. Both are stored on the Team. \r\n* Score recalculation is sent out to a Challenge Grade Updater background jobs\r\n* The challenge_grade#index route is removed altogether\r\n* New mailers are added to be sent to students when Challenge Grades are released\r\n* Teams are now sorted by rank as opposed to either score, and their rank is recalculated as scores are updated. ","created_at":"2016-05-14T07:28:43Z","updated_at":"2016-05-31T18:54:13Z","closed_at":null,"merged_at":null,"merge_commit_sha":"200bab6e5b4cecfff4ec3f9096977a26eca428eb","assignee":{"login":"chcholman","id":234276,"avatar_url":"https://avatars.githubusercontent.com/u/234276?v=3","gravatar_id":"","url":"https://api.github.com/users/chcholman","html_url":"https://github.com/chcholman","followers_url":"https://api.github.com/users/chcholman/followers","following_url":"https://api.github.com/users/chcholman/following{/other_user}","gists_url":"https://api.github.com/users/chcholman/gists{/gist_id}","starred_url":"https://api.github.com/users/chcholman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chcholman/subscriptions","organizations_url":"https://api.github.com/users/chcholman/orgs","repos_url":"https://api.github.com/users/chcholman/repos","events_url":"https://api.github.com/users/chcholman/events{/privacy}","received_events_url":"https://api.github.com/users/chcholman/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/pulls/1986/commits","review_comments_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/pulls/1986/comments","review_comment_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/pulls/comments{/number}","comments_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/issues/1986/comments","statuses_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/statuses/4e8b73c5456bc2af2189ce677d6c596cf8fa92de","head":{"label":"UM-USElab:1594-team-challenges","ref":"1594-team-challenges","sha":"4e8b73c5456bc2af2189ce677d6c596cf8fa92de","user":{"login":"UM-USElab","id":4459066,"avatar_url":"https://avatars.githubusercontent.com/u/4459066?v=3","gravatar_id":"","url":"https://api.github.com/users/UM-USElab","html_url":"https://github.com/UM-USElab","followers_url":"https://api.github.com/users/UM-USElab/followers","following_url":"https://api.github.com/users/UM-USElab/following{/other_user}","gists_url":"https://api.github.com/users/UM-USElab/gists{/gist_id}","starred_url":"https://api.github.com/users/UM-USElab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/UM-USElab/subscriptions","organizations_url":"https://api.github.com/users/UM-USElab/orgs","repos_url":"https://api.github.com/users/UM-USElab/repos","events_url":"https://api.github.com/users/UM-USElab/events{/privacy}","received_events_url":"https://api.github.com/users/UM-USElab/received_events","type":"Organization","site_admin":false},"repo":{"id":8105769,"name":"gradecraft-development","full_name":"UM-USElab/gradecraft-development","owner":{"login":"UM-USElab","id":4459066,"avatar_url":"https://avatars.githubusercontent.com/u/4459066?v=3","gravatar_id":"","url":"https://api.github.com/users/UM-USElab","html_url":"https://github.com/UM-USElab","followers_url":"https://api.github.com/users/UM-USElab/followers","following_url":"https://api.github.com/users/UM-USElab/following{/other_user}","gists_url":"https://api.github.com/users/UM-USElab/gists{/gist_id}","starred_url":"https://api.github.com/users/UM-USElab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/UM-USElab/subscriptions","organizations_url":"https://api.github.com/users/UM-USElab/orgs","repos_url":"https://api.github.com/users/UM-USElab/repos","events_url":"https://api.github.com/users/UM-USElab/events{/privacy}","received_events_url":"https://api.github.com/users/UM-USElab/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/UM-USElab/gradecraft-development","description":"GradeCraft is a gameful learning management system, intended to help motivate students to be more engaged in their own learning.","fork":false,"url":"https://api.github.com/repos/UM-USElab/gradecraft-development","forks_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/forks","keys_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/keys{/key_id}","collaborators_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/teams","hooks_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/hooks","issue_events_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/issues/events{/number}","events_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/events","assignees_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/assignees{/user}","branches_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/branches{/branch}","tags_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/tags","blobs_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/git/refs{/sha}","trees_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/git/trees{/sha}","statuses_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/statuses/{sha}","languages_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/languages","stargazers_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/stargazers","contributors_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/contributors","subscribers_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/subscribers","subscription_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/subscription","commits_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/commits{/sha}","git_commits_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/git/commits{/sha}","comments_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/comments{/number}","issue_comment_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/issues/comments{/number}","contents_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/contents/{+path}","compare_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/compare/{base}...{head}","merges_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/merges","archive_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/downloads","issues_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/issues{/number}","pulls_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/pulls{/number}","milestones_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/milestones{/number}","notifications_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/labels{/name}","releases_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/releases{/id}","deployments_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/deployments","created_at":"2013-02-09T03:44:54Z","updated_at":"2016-05-26T22:07:04Z","pushed_at":"2016-05-31T18:44:47Z","git_url":"git://github.com/UM-USElab/gradecraft-development.git","ssh_url":"git@github.com:UM-USElab/gradecraft-development.git","clone_url":"https://github.com/UM-USElab/gradecraft-development.git","svn_url":"https://github.com/UM-USElab/gradecraft-development","homepage":"","size":67580,"stargazers_count":27,"watchers_count":27,"language":"Ruby","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":18,"mirror_url":null,"open_issues_count":147,"forks":18,"open_issues":147,"watchers":27,"default_branch":"master"}},"base":{"label":"UM-USElab:master","ref":"master","sha":"437a2a1e0681beba101b9776d67651bed0da0acd","user":{"login":"UM-USElab","id":4459066,"avatar_url":"https://avatars.githubusercontent.com/u/4459066?v=3","gravatar_id":"","url":"https://api.github.com/users/UM-USElab","html_url":"https://github.com/UM-USElab","followers_url":"https://api.github.com/users/UM-USElab/followers","following_url":"https://api.github.com/users/UM-USElab/following{/other_user}","gists_url":"https://api.github.com/users/UM-USElab/gists{/gist_id}","starred_url":"https://api.github.com/users/UM-USElab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/UM-USElab/subscriptions","organizations_url":"https://api.github.com/users/UM-USElab/orgs","repos_url":"https://api.github.com/users/UM-USElab/repos","events_url":"https://api.github.com/users/UM-USElab/events{/privacy}","received_events_url":"https://api.github.com/users/UM-USElab/received_events","type":"Organization","site_admin":false},"repo":{"id":8105769,"name":"gradecraft-development","full_name":"UM-USElab/gradecraft-development","owner":{"login":"UM-USElab","id":4459066,"avatar_url":"https://avatars.githubusercontent.com/u/4459066?v=3","gravatar_id":"","url":"https://api.github.com/users/UM-USElab","html_url":"https://github.com/UM-USElab","followers_url":"https://api.github.com/users/UM-USElab/followers","following_url":"https://api.github.com/users/UM-USElab/following{/other_user}","gists_url":"https://api.github.com/users/UM-USElab/gists{/gist_id}","starred_url":"https://api.github.com/users/UM-USElab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/UM-USElab/subscriptions","organizations_url":"https://api.github.com/users/UM-USElab/orgs","repos_url":"https://api.github.com/users/UM-USElab/repos","events_url":"https://api.github.com/users/UM-USElab/events{/privacy}","received_events_url":"https://api.github.com/users/UM-USElab/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/UM-USElab/gradecraft-development","description":"GradeCraft is a gameful learning management system, intended to help motivate students to be more engaged in their own learning.","fork":false,"url":"https://api.github.com/repos/UM-USElab/gradecraft-development","forks_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/forks","keys_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/keys{/key_id}","collaborators_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/teams","hooks_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/hooks","issue_events_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/issues/events{/number}","events_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/events","assignees_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/assignees{/user}","branches_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/branches{/branch}","tags_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/tags","blobs_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/git/refs{/sha}","trees_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/git/trees{/sha}","statuses_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/statuses/{sha}","languages_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/languages","stargazers_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/stargazers","contributors_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/contributors","subscribers_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/subscribers","subscription_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/subscription","commits_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/commits{/sha}","git_commits_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/git/commits{/sha}","comments_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/comments{/number}","issue_comment_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/issues/comments{/number}","contents_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/contents/{+path}","compare_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/compare/{base}...{head}","merges_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/merges","archive_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/downloads","issues_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/issues{/number}","pulls_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/pulls{/number}","milestones_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/milestones{/number}","notifications_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/labels{/name}","releases_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/releases{/id}","deployments_url":"https://api.github.com/repos/UM-USElab/gradecraft-development/deployments","created_at":"2013-02-09T03:44:54Z","updated_at":"2016-05-26T22:07:04Z","pushed_at":"2016-05-31T18:44:47Z","git_url":"git://github.com/UM-USElab/gradecraft-development.git","ssh_url":"git@github.com:UM-USElab/gradecraft-development.git","clone_url":"https://github.com/UM-USElab/gradecraft-development.git","svn_url":"https://github.com/UM-USElab/gradecraft-development","homepage":"","size":67580,"stargazers_count":27,"watchers_count":27,"language":"Ruby","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":18,"mirror_url":null,"open_issues_count":147,"forks":18,"open_issues":147,"watchers":27,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/UM-USElab/gradecraft-development/pulls/1986"},"html":{"href":"https://github.com/UM-USElab/gradecraft-development/pull/1986"},"issue":{"href":"https://api.github.com/repos/UM-USElab/gradecraft-development/issues/1986"},"comments":{"href":"https://api.github.com/repos/UM-USElab/gradecraft-development/issues/1986/comments"},"review_comments":{"href":"https://api.github.com/repos/UM-USElab/gradecraft-development/pulls/1986/comments"},"review_comment":{"href":"https://api.github.com/repos/UM-USElab/gradecraft-development/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/UM-USElab/gradecraft-development/pulls/1986/commits"},"statuses":{"href":"https://api.github.com/repos/UM-USElab/gradecraft-development/statuses/4e8b73c5456bc2af2189ce677d6c596cf8fa92de"}}}}
{"actor":{"display_login":"chcholman"}}