{"action":"created","comment":{"url":"https://api.github.com/repos/projecttacoma/bonnie/pulls/comments/76831182","id":76831182,"diff_hunk":"@@ -24,6 +24,278 @@ def index\n     render :json => MultiJson.encode(records.as_json(methods: [:cms_id, :user_email]))\n   end\n \n+   # get the change history of patients for a measure (by HQMF Set ID)\n+  def history\n+    # get all previous versions of this measure, ordering by version\n+    # TODO add by_user(current_user) clause into query\n+    @measure_patients = Record.by_user(current_user).where({:measure_ids.in => [ params[:id] ]}).order_by(updated_at: :desc)\n+    results = []\n+    @measure_id = params[:id]\n+    @measure_patients.each_with_index do |patient,index|\n+      results << {}\n+      results[-1]['label'] = \"#{patient.first} #{patient.last}\"\n+      results[-1]['times'] = []\n+      \n+      #results[-1]['times'] << change\n+      curr_expected = []\n+      curr_actual = []\n+      \n+      \n+      \n+      # if this patient has no history we need to create a initial patient creation and leave\n+      if patient.history_tracks.count == 0\n+        change = {}\n+        # change['result'] = 'pass' # or 'fail'\n+        # for updateTime, we use the ObjectId generation time (because created_at is nil)\n+        change['updateTime'] = (patient._id.generation_time.tv_sec * 1000)\n+        change['changed'] = 'Initial Patient Creation'\n+        \n+        calc_results = calculate_value_results(filter_values_by_measure(patient.calc_results),\n+          filter_values_by_measure(patient.expected_values))\n+        \n+        change['result'] = calc_results[:result]\n+        change['results'] = calc_results[:results]\n+        change['values'] = calc_results[:values]\n+        \n+        results[-1]['times'] << change\n+        \n+      else\n+        # if the patient was created before history_tracking. the first tracker will be update instead of create\n+        # make an Initial patient for this \n+        if patient.history_tracks.first.action == 'update'\n+          change = {}\n+          # change['result'] = 'pass' # or 'fail'\n+          # for updateTime, we use the ObjectId generation time (because created_at is nil)\n+          change['updateTime'] = (patient._id.generation_time.tv_sec * 1000)\n+          change['changed'] = 'Initial Patient Creation'\n+          \n+          curr_actual = filter_values_by_measure(patient.calc_results)\n+          curr_expected = filter_values_by_measure(patient.expected_values)\n+          # TODO: figure out how to get values for this.\n+          calc_results = calculate_value_results(curr_actual, curr_expected)\n+          \n+          change['result'] = calc_results[:result]\n+          change['results'] = calc_results[:results]\n+          change['values'] = calc_results[:values]\n+          \n+          results[-1]['times'] << change\n+        end\n+        # LOOP for each version of the patient\n+        patient.history_tracks.each do |track|\n+          curr_actual = filter_values_by_measure(track.modified['calc_results']) if track.modified['calc_results']\n+          curr_expected = filter_values_by_measure(track.modified['expected_values']) if track.modified['expected_values']\n+          \n+          # next if track.original.empty? # skip if this is the creation one\n+          @calc_values = {\n+            curr_actual: curr_actual,\n+            curr_expected: curr_expected\n+          }\n+          \n+          change = {}\n+          # change['result'] = 'pass' # or 'fail'\n+          change['updateTime'] = (track.updated_at.tv_sec * 1000)\n+          \n+          calc_results = calculate_value_results(curr_actual, curr_expected)\n+          \n+          change['result'] = calc_results[:result]\n+          change['results'] = calc_results[:results]\n+          change['values'] = calc_results[:values]\n+          description = ''\n+          \n+          if track.action == 'create'\n+            description = 'Initial Patient Creation'\n+          else \n+            # loop through each of the attributes that were tracked on this change\n+            track.tracked_changes.each do |key, value|\n+              # puts key\n+              # puts \"   \" + value.to_s\n+              if key == 'calc_results'\n+                @calc_values.store(:from_act, value['from'])\n+                @calc_values.store(:to_act, value['to'])\n+              end\n+\n+              if key == 'expected_values'\n+                @calc_values.store(:from_exp, value['from'])\n+                @calc_values.store(:to_exp, value['to'])\n+              end\n+              description += \"Changes in #{key.gsub('_',' ')}: \"\n+              description += history_changes(value['from'],value['to']) if key == 'source_data_criteria'\n+              description += history_changes_singles(key, value['from'], value['to']) unless value['from'].class == Array\n+              # history_changes_results(key, value['from'], value['to'], curr_actual, curr_expected, change['result']) unless key.index('value').nil?\n+              description += \"<br/>\"\n+            end\n+          end\n+          @calc_values[:curr_expected] = curr_expected\n+          @calc_values[:curr_actual] = curr_actual\n+          change['changed'] = description\n+          results[-1]['times'] << change\n+        end  # end LOOP\n+      end # end no history\n+    end # end patient loop\n+   render :json => results\n+  end\n+\n+  def history_changes(from,to)\n+    changes = {}\n+    return '' unless from\n+    removed = from.map{ |x|x['id'] } - to.map{ |x|x['id']}\n+    changes['Removed'] = removed.join(', ') if !removed.empty?\n+\n+    added = to.map{|x|x['id']} - from.map{|x|x['id']}\n+    changes['Added'] = added.join(', ') if !added.empty?\n+\n+    changes['Changed'] = ''\n+    change_keys = to.map{|x|x['id']} - (added + removed)\n+    change_keys.each do |key|\n+      original = from.select{|x|x['id']==key}.first\n+      updated = to.select{|x|x['id']==key}.first\n+      diffs = updated.easy_diff(original)\n+      description = diffs.map{|x|x.keys}.flatten.uniq.join(', ')\n+      changes['Changed'] += \"<br/>\\n&nbsp;&nbsp;- #{key} #{description}\"\n+    end\n+\n+    narrative = ''\n+    changes.each do |key,value|\n+      narrative += \"#{key} #{value}<br/>\\n\"\n+    end\n+    narrative\n+  end\n+\n+  def history_changes_singles(field, from, to)\n+    narrative = ''\n+    if field.index('date').nil?\n+      narrative = \"#{field} changed from #{from} to #{to}\"\n+    else\n+      narrative = \"#{field} changed from #{Time.at(from).strftime(\"%m/%d/%Y\")} to #{Time.at(to).strftime(\"%m/%d/%Y\")}\"\n+    end\n+    narrative\n+  end\n+\n+  def history_changes_results(field, from, to, acts, exps, fordot)\n+    puts \"The from is #{from}\"\n+    # binding.pry\n+    blah = {}\n+    unless from.nil?\n+      from.each do |pops|\n+        me = {}\n+        pops.to_a[2..pops.size - 1].each { |k, v| me[k.to_sym] = { field.to_sym => v } } # need to find a way to filter out measure_id and population_index\n+        blah[pops['population_index']] = me\n+      end # from.each\n+    end\n+    meh = {}\n+    unless to.nil?\n+      # acts = to if field == 'calc_results'\n+      # exps = to if field == 'expected_values'\n+      to.each do |pops|\n+        me = {}\n+        pops.to_a[2..pops.size - 1].each { |k, v| me[k.to_sym] = { field.to_sym => v } }\n+        meh[pops['population_index']] = me\n+      end # to.each\n+    end\n+\n+    result = []\n+    evald = ''\n+    exps.each do |pop| # Run through excepted in case there are more logic populations in actual\n+      pop.keys[2..pop.size - 1].each do |k|\n+        if pop[k] == acts[pop['population_index']][k]\n+          evald = 'pass'\n+        else\n+          evald = 'fail'\n+          break\n+        end\n+      end\n+      result << evald\n+      fordot = result\n+    end\n+\n+    # finale = { from: blah, to: meh }\n+    # if @big_finale.empty?\n+    #   @big_finale = finale\n+    # else\n+    #   finale.map do |ftk, ftv| # for from and to\n+    #     ftv.map do |pk, pv| # for each strat population\n+    #       pv.map do |plk, plv| # for each logic population\n+    #         @big_finale[ftk][pk][plk].store(plv.keys.first.to_sym, plv.values.first) if @big_finale[ftk][pk][plk].class != NilClass\n+    #       end # for each logic population\n+    #     end # for each strat population\n+    #   end # for from and to\n+    # end # @big_finale.empty?\n+\n+    return acts, exps, fordot\n+  end\n+\n+\n+\n+  # Returns the expected or actuals for the measure that this is being processed\n+  def filter_values_by_measure(values)\n+    if !values\n+      return []\n+    end\n+    result = []\n+    values.each do |value|\n+      result << value if value['measure_id'] == @measure_id\n+    end\n+    result\n+  end\n+  \n+  # takes the actual and expected values and determines the pass_fail situation for each population_set\n+  # returns the overall result and result for each population set\n+  def calculate_value_results(actual, expected)\n+    \n+    # TODO: determine what to do when actual is empty, just use expected\n+    actual = expected unless actual\n+    \n+    results = { result: 'pass', results: [], values: [] }\n+    \n+    # iterate through each actual for each population set\n+    actual.each do |pop_actual|\n+      pop_index = pop_actual['population_index']\n+      pop_expected = expected.find { |exp| exp['population_index'] == pop_index }\n+      \n+      pop_result = 'pass'\n+      pop_values = { population_index: pop_index }\n+      \n+      # compare each value\n+      HQMF::Measure::LogicExtractor::POPULATION_MAP.each_pair do |logic_code, logic_name|\n+        actual_value = pop_actual.fetch(logic_code, nil)\n+        expected_value = pop_expected.fetch(logic_code, 0)\n+        \n+        next if !actual_value\n+        \n+        pop_values[logic_code] = { expected: expected_value, actual: actual_value }\n+        \n+        if actual_value != expected_value\n+          pop_result = 'fail'\n+          results[:result] = 'fail'\n+        end\n+      end\n+      \n+      results[:results][pop_index] = pop_result\n+      results[:values][pop_index] = pop_values\n+    end\n+    \n+    return results\n+  end\n+  \n+  # wrap patientData in stratifications","path":"app/controllers/patients_controller.rb","position":257,"original_position":257,"commit_id":"1ce1ac6b4d46267fa3ecec0a9a5e8beb9db8cea3","original_commit_id":"1ce1ac6b4d46267fa3ecec0a9a5e8beb9db8cea3","user":{"login":"mulcahyk","id":17731116,"avatar_url":"https://avatars.githubusercontent.com/u/17731116?v=3","gravatar_id":"","url":"https://api.github.com/users/mulcahyk","html_url":"https://github.com/mulcahyk","followers_url":"https://api.github.com/users/mulcahyk/followers","following_url":"https://api.github.com/users/mulcahyk/following{/other_user}","gists_url":"https://api.github.com/users/mulcahyk/gists{/gist_id}","starred_url":"https://api.github.com/users/mulcahyk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mulcahyk/subscriptions","organizations_url":"https://api.github.com/users/mulcahyk/orgs","repos_url":"https://api.github.com/users/mulcahyk/repos","events_url":"https://api.github.com/users/mulcahyk/events{/privacy}","received_events_url":"https://api.github.com/users/mulcahyk/received_events","type":"User","site_admin":false},"body":"Do we still need this?  It was from the prototype.","created_at":"2016-08-30T16:33:14Z","updated_at":"2016-08-30T16:33:14Z","html_url":"https://github.com/projecttacoma/bonnie/pull/567#discussion_r76831182","pull_request_url":"https://api.github.com/repos/projecttacoma/bonnie/pulls/567","_links":{"self":{"href":"https://api.github.com/repos/projecttacoma/bonnie/pulls/comments/76831182"},"html":{"href":"https://github.com/projecttacoma/bonnie/pull/567#discussion_r76831182"},"pull_request":{"href":"https://api.github.com/repos/projecttacoma/bonnie/pulls/567"}}},"pull_request":{"url":"https://api.github.com/repos/projecttacoma/bonnie/pulls/567","id":82270636,"html_url":"https://github.com/projecttacoma/bonnie/pull/567","diff_url":"https://github.com/projecttacoma/bonnie/pull/567.diff","patch_url":"https://github.com/projecttacoma/bonnie/pull/567.patch","issue_url":"https://api.github.com/repos/projecttacoma/bonnie/issues/567","number":567,"state":"open","locked":false,"title":"Measure History PR Dry Run","user":{"login":"hossenlopp","id":11613067,"avatar_url":"https://avatars.githubusercontent.com/u/11613067?v=3","gravatar_id":"","url":"https://api.github.com/users/hossenlopp","html_url":"https://github.com/hossenlopp","followers_url":"https://api.github.com/users/hossenlopp/followers","following_url":"https://api.github.com/users/hossenlopp/following{/other_user}","gists_url":"https://api.github.com/users/hossenlopp/gists{/gist_id}","starred_url":"https://api.github.com/users/hossenlopp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hossenlopp/subscriptions","organizations_url":"https://api.github.com/users/hossenlopp/orgs","repos_url":"https://api.github.com/users/hossenlopp/repos","events_url":"https://api.github.com/users/hossenlopp/events{/privacy}","received_events_url":"https://api.github.com/users/hossenlopp/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-08-22T21:56:49Z","updated_at":"2016-08-30T16:33:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"651fe6a52de527c5da98a459d771432fbe32a79c","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/projecttacoma/bonnie/pulls/567/commits","review_comments_url":"https://api.github.com/repos/projecttacoma/bonnie/pulls/567/comments","review_comment_url":"https://api.github.com/repos/projecttacoma/bonnie/pulls/comments{/number}","comments_url":"https://api.github.com/repos/projecttacoma/bonnie/issues/567/comments","statuses_url":"https://api.github.com/repos/projecttacoma/bonnie/statuses/1ce1ac6b4d46267fa3ecec0a9a5e8beb9db8cea3","head":{"label":"projecttacoma:measure_history","ref":"measure_history","sha":"1ce1ac6b4d46267fa3ecec0a9a5e8beb9db8cea3","user":{"login":"projecttacoma","id":5497023,"avatar_url":"https://avatars.githubusercontent.com/u/5497023?v=3","gravatar_id":"","url":"https://api.github.com/users/projecttacoma","html_url":"https://github.com/projecttacoma","followers_url":"https://api.github.com/users/projecttacoma/followers","following_url":"https://api.github.com/users/projecttacoma/following{/other_user}","gists_url":"https://api.github.com/users/projecttacoma/gists{/gist_id}","starred_url":"https://api.github.com/users/projecttacoma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/projecttacoma/subscriptions","organizations_url":"https://api.github.com/users/projecttacoma/orgs","repos_url":"https://api.github.com/users/projecttacoma/repos","events_url":"https://api.github.com/users/projecttacoma/events{/privacy}","received_events_url":"https://api.github.com/users/projecttacoma/received_events","type":"Organization","site_admin":false},"repo":{"id":12958279,"name":"bonnie","full_name":"projecttacoma/bonnie","owner":{"login":"projecttacoma","id":5497023,"avatar_url":"https://avatars.githubusercontent.com/u/5497023?v=3","gravatar_id":"","url":"https://api.github.com/users/projecttacoma","html_url":"https://github.com/projecttacoma","followers_url":"https://api.github.com/users/projecttacoma/followers","following_url":"https://api.github.com/users/projecttacoma/following{/other_user}","gists_url":"https://api.github.com/users/projecttacoma/gists{/gist_id}","starred_url":"https://api.github.com/users/projecttacoma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/projecttacoma/subscriptions","organizations_url":"https://api.github.com/users/projecttacoma/orgs","repos_url":"https://api.github.com/users/projecttacoma/repos","events_url":"https://api.github.com/users/projecttacoma/events{/privacy}","received_events_url":"https://api.github.com/users/projecttacoma/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/projecttacoma/bonnie","description":"Clinical Quality Measure Testing Tool","fork":false,"url":"https://api.github.com/repos/projecttacoma/bonnie","forks_url":"https://api.github.com/repos/projecttacoma/bonnie/forks","keys_url":"https://api.github.com/repos/projecttacoma/bonnie/keys{/key_id}","collaborators_url":"https://api.github.com/repos/projecttacoma/bonnie/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/projecttacoma/bonnie/teams","hooks_url":"https://api.github.com/repos/projecttacoma/bonnie/hooks","issue_events_url":"https://api.github.com/repos/projecttacoma/bonnie/issues/events{/number}","events_url":"https://api.github.com/repos/projecttacoma/bonnie/events","assignees_url":"https://api.github.com/repos/projecttacoma/bonnie/assignees{/user}","branches_url":"https://api.github.com/repos/projecttacoma/bonnie/branches{/branch}","tags_url":"https://api.github.com/repos/projecttacoma/bonnie/tags","blobs_url":"https://api.github.com/repos/projecttacoma/bonnie/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/projecttacoma/bonnie/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/projecttacoma/bonnie/git/refs{/sha}","trees_url":"https://api.github.com/repos/projecttacoma/bonnie/git/trees{/sha}","statuses_url":"https://api.github.com/repos/projecttacoma/bonnie/statuses/{sha}","languages_url":"https://api.github.com/repos/projecttacoma/bonnie/languages","stargazers_url":"https://api.github.com/repos/projecttacoma/bonnie/stargazers","contributors_url":"https://api.github.com/repos/projecttacoma/bonnie/contributors","subscribers_url":"https://api.github.com/repos/projecttacoma/bonnie/subscribers","subscription_url":"https://api.github.com/repos/projecttacoma/bonnie/subscription","commits_url":"https://api.github.com/repos/projecttacoma/bonnie/commits{/sha}","git_commits_url":"https://api.github.com/repos/projecttacoma/bonnie/git/commits{/sha}","comments_url":"https://api.github.com/repos/projecttacoma/bonnie/comments{/number}","issue_comment_url":"https://api.github.com/repos/projecttacoma/bonnie/issues/comments{/number}","contents_url":"https://api.github.com/repos/projecttacoma/bonnie/contents/{+path}","compare_url":"https://api.github.com/repos/projecttacoma/bonnie/compare/{base}...{head}","merges_url":"https://api.github.com/repos/projecttacoma/bonnie/merges","archive_url":"https://api.github.com/repos/projecttacoma/bonnie/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/projecttacoma/bonnie/downloads","issues_url":"https://api.github.com/repos/projecttacoma/bonnie/issues{/number}","pulls_url":"https://api.github.com/repos/projecttacoma/bonnie/pulls{/number}","milestones_url":"https://api.github.com/repos/projecttacoma/bonnie/milestones{/number}","notifications_url":"https://api.github.com/repos/projecttacoma/bonnie/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/projecttacoma/bonnie/labels{/name}","releases_url":"https://api.github.com/repos/projecttacoma/bonnie/releases{/id}","deployments_url":"https://api.github.com/repos/projecttacoma/bonnie/deployments","created_at":"2013-09-19T20:11:14Z","updated_at":"2016-08-04T14:08:04Z","pushed_at":"2016-08-30T04:15:03Z","git_url":"git://github.com/projecttacoma/bonnie.git","ssh_url":"git@github.com:projecttacoma/bonnie.git","clone_url":"https://github.com/projecttacoma/bonnie.git","svn_url":"https://github.com/projecttacoma/bonnie","homepage":null,"size":84205,"stargazers_count":17,"watchers_count":17,"language":"Ruby","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":19,"mirror_url":null,"open_issues_count":9,"forks":19,"open_issues":9,"watchers":17,"default_branch":"master"}},"base":{"label":"projecttacoma:measure_history_base","ref":"measure_history_base","sha":"9bcce328bd64f2984c5fb51e15cd4e0ba3c8630c","user":{"login":"projecttacoma","id":5497023,"avatar_url":"https://avatars.githubusercontent.com/u/5497023?v=3","gravatar_id":"","url":"https://api.github.com/users/projecttacoma","html_url":"https://github.com/projecttacoma","followers_url":"https://api.github.com/users/projecttacoma/followers","following_url":"https://api.github.com/users/projecttacoma/following{/other_user}","gists_url":"https://api.github.com/users/projecttacoma/gists{/gist_id}","starred_url":"https://api.github.com/users/projecttacoma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/projecttacoma/subscriptions","organizations_url":"https://api.github.com/users/projecttacoma/orgs","repos_url":"https://api.github.com/users/projecttacoma/repos","events_url":"https://api.github.com/users/projecttacoma/events{/privacy}","received_events_url":"https://api.github.com/users/projecttacoma/received_events","type":"Organization","site_admin":false},"repo":{"id":12958279,"name":"bonnie","full_name":"projecttacoma/bonnie","owner":{"login":"projecttacoma","id":5497023,"avatar_url":"https://avatars.githubusercontent.com/u/5497023?v=3","gravatar_id":"","url":"https://api.github.com/users/projecttacoma","html_url":"https://github.com/projecttacoma","followers_url":"https://api.github.com/users/projecttacoma/followers","following_url":"https://api.github.com/users/projecttacoma/following{/other_user}","gists_url":"https://api.github.com/users/projecttacoma/gists{/gist_id}","starred_url":"https://api.github.com/users/projecttacoma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/projecttacoma/subscriptions","organizations_url":"https://api.github.com/users/projecttacoma/orgs","repos_url":"https://api.github.com/users/projecttacoma/repos","events_url":"https://api.github.com/users/projecttacoma/events{/privacy}","received_events_url":"https://api.github.com/users/projecttacoma/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/projecttacoma/bonnie","description":"Clinical Quality Measure Testing Tool","fork":false,"url":"https://api.github.com/repos/projecttacoma/bonnie","forks_url":"https://api.github.com/repos/projecttacoma/bonnie/forks","keys_url":"https://api.github.com/repos/projecttacoma/bonnie/keys{/key_id}","collaborators_url":"https://api.github.com/repos/projecttacoma/bonnie/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/projecttacoma/bonnie/teams","hooks_url":"https://api.github.com/repos/projecttacoma/bonnie/hooks","issue_events_url":"https://api.github.com/repos/projecttacoma/bonnie/issues/events{/number}","events_url":"https://api.github.com/repos/projecttacoma/bonnie/events","assignees_url":"https://api.github.com/repos/projecttacoma/bonnie/assignees{/user}","branches_url":"https://api.github.com/repos/projecttacoma/bonnie/branches{/branch}","tags_url":"https://api.github.com/repos/projecttacoma/bonnie/tags","blobs_url":"https://api.github.com/repos/projecttacoma/bonnie/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/projecttacoma/bonnie/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/projecttacoma/bonnie/git/refs{/sha}","trees_url":"https://api.github.com/repos/projecttacoma/bonnie/git/trees{/sha}","statuses_url":"https://api.github.com/repos/projecttacoma/bonnie/statuses/{sha}","languages_url":"https://api.github.com/repos/projecttacoma/bonnie/languages","stargazers_url":"https://api.github.com/repos/projecttacoma/bonnie/stargazers","contributors_url":"https://api.github.com/repos/projecttacoma/bonnie/contributors","subscribers_url":"https://api.github.com/repos/projecttacoma/bonnie/subscribers","subscription_url":"https://api.github.com/repos/projecttacoma/bonnie/subscription","commits_url":"https://api.github.com/repos/projecttacoma/bonnie/commits{/sha}","git_commits_url":"https://api.github.com/repos/projecttacoma/bonnie/git/commits{/sha}","comments_url":"https://api.github.com/repos/projecttacoma/bonnie/comments{/number}","issue_comment_url":"https://api.github.com/repos/projecttacoma/bonnie/issues/comments{/number}","contents_url":"https://api.github.com/repos/projecttacoma/bonnie/contents/{+path}","compare_url":"https://api.github.com/repos/projecttacoma/bonnie/compare/{base}...{head}","merges_url":"https://api.github.com/repos/projecttacoma/bonnie/merges","archive_url":"https://api.github.com/repos/projecttacoma/bonnie/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/projecttacoma/bonnie/downloads","issues_url":"https://api.github.com/repos/projecttacoma/bonnie/issues{/number}","pulls_url":"https://api.github.com/repos/projecttacoma/bonnie/pulls{/number}","milestones_url":"https://api.github.com/repos/projecttacoma/bonnie/milestones{/number}","notifications_url":"https://api.github.com/repos/projecttacoma/bonnie/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/projecttacoma/bonnie/labels{/name}","releases_url":"https://api.github.com/repos/projecttacoma/bonnie/releases{/id}","deployments_url":"https://api.github.com/repos/projecttacoma/bonnie/deployments","created_at":"2013-09-19T20:11:14Z","updated_at":"2016-08-04T14:08:04Z","pushed_at":"2016-08-30T04:15:03Z","git_url":"git://github.com/projecttacoma/bonnie.git","ssh_url":"git@github.com:projecttacoma/bonnie.git","clone_url":"https://github.com/projecttacoma/bonnie.git","svn_url":"https://github.com/projecttacoma/bonnie","homepage":null,"size":84205,"stargazers_count":17,"watchers_count":17,"language":"Ruby","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":19,"mirror_url":null,"open_issues_count":9,"forks":19,"open_issues":9,"watchers":17,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/projecttacoma/bonnie/pulls/567"},"html":{"href":"https://github.com/projecttacoma/bonnie/pull/567"},"issue":{"href":"https://api.github.com/repos/projecttacoma/bonnie/issues/567"},"comments":{"href":"https://api.github.com/repos/projecttacoma/bonnie/issues/567/comments"},"review_comments":{"href":"https://api.github.com/repos/projecttacoma/bonnie/pulls/567/comments"},"review_comment":{"href":"https://api.github.com/repos/projecttacoma/bonnie/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/projecttacoma/bonnie/pulls/567/commits"},"statuses":{"href":"https://api.github.com/repos/projecttacoma/bonnie/statuses/1ce1ac6b4d46267fa3ecec0a9a5e8beb9db8cea3"}}}}
{"actor":{"display_login":"mulcahyk"}}