Skip to content

Instantly share code, notes, and snippets.

@ntraykov
Created August 3, 2020 14:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ntraykov/18b9c2ffc7271487699c72f7d435e139 to your computer and use it in GitHub Desktop.
Save ntraykov/18b9c2ffc7271487699c72f7d435e139 to your computer and use it in GitHub Desktop.
<?php
use Illuminate\Support\Facades\Http;
class GitHubScoreCalculator
{
const ENDPOINT = 'https://api.github.com/users/%s/events/public';
const DEFAULT_SCORE_KEY = 'default';
private $points = [
'PushEvent' => 10,
'PullRequestEvent' => 5,
'IssueCommentEvent' => 4,
self::DEFAULT_SCORE_KEY => 1,
];
public function calculate($username)
{
return $this->fetchEvents($username)
->pluck('type')
->countBy()
->map(function ($count, $event) {
return $this->calculateEventScore($count, $event);
})
->sum();
}
private function fetchEvents($username)
{
$url = sprintf(self::ENDPOINT, $username);
return collect(
Http::get($url)->json()
);
}
private function calculateEventScore($count, $event)
{
if (! array_key_exists($event, $this->points)) {
$event = self::DEFAULT_SCORE_KEY;
}
return $count * $this->points[$event];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment