/// <summary>
        /// Builds a <see cref="GitHubPullRequest"/>.
        /// </summary>
        /// <param name="number">The pull request number.</param>
        /// <param name="lastCommitId">The last commit ID.</param>
        /// <param name="files">The files in the pull request.</param>
        /// <param name="diff">The full pull request unified diff.</param>
        /// <param name="branches">The <see cref="GitHubPullRequestBranches"/>.</param>
        /// <returns>A <see cref="GitHubPullRequest"/> object.</returns>
        public GitHubPullRequest Build(
            int number,
            string lastCommitId,
            IReadOnlyList<PullRequestFile> files,
            string diff,
            GitHubPullRequestBranches branches)
        {
            if (files == null)
            {
                throw new ArgumentNullException("files");
            }

            var diffs = this.parser.Split(diff);

            var pullRequestFiles =
                files.Select(
                    file =>
                    new GitHubPullRequestFile(
                        file.FileName,
                        (GitHubPullRequestFileStatus)Enum.Parse(typeof(GitHubPullRequestFileStatus), file.Status, true),
                        file.Changes,
                        diffs[file.FileName])).ToList();

            var pullRequest = new GitHubPullRequest(number, lastCommitId, pullRequestFiles, diff, branches);

            return pullRequest;
        }
        public GitHubPullRequest(int number, string lastCommitId, IEnumerable<GitHubPullRequestFile> files, string diff, GitHubPullRequestBranches branches)
        {
            const string lastCommitIdParamName = "lastCommitId";

            if (lastCommitId == null)
            {
                throw new ArgumentNullException(lastCommitIdParamName);
            }

            if (files == null)
            {
                throw new ArgumentNullException("files");
            }

            if (branches == null)
            {
                throw new ArgumentNullException("branches");
            }

            if (lastCommitId.Length == 0)
            {
                throw new ArgumentException("Cannot be empty", lastCommitIdParamName);
            }

            if (number < 1)
            {
                throw new ArgumentException("Must be greater than 0", "number");
            }

            this.Number = number;
            this.LastCommitId = lastCommitId;
            this.Diff = diff;
            this.Branches = branches;
            this.Files = files.ToList();
        }