require 'travis/api/serialize/v0/pusher/build/canceled' require 'travis/api/serialize/v0/pusher/build/created' require 'travis/api/serialize/v0/pusher/build/received' require 'travis/api/serialize/v0/pusher/build/started' require 'travis/api/serialize/v0/pusher/build/finished' module Travis module Api module Serialize module V0 module Pusher class Build include Formats attr_reader :build, :options def initialize(build, options = {}) @build = build @options = options end def data { 'build' => build_data(build), 'commit' => commit_data(build.commit), 'repository' => repository_data(build.repository) } end private def build_data(build) commit = build.commit { 'id' => build.id, 'repository_id' => build.repository_id, 'commit_id' => build.commit_id, 'number' => build.number, 'pull_request' => build.pull_request?, 'pull_request_title' => build.pull_request_title, 'pull_request_number' => build.pull_request_number, 'state' => build.state.to_s, 'started_at' => format_date(build.started_at), 'finished_at' => format_date(build.finished_at), 'duration' => build.duration, 'job_ids' => build.matrix_ids, 'event_type' => build.event_type, # this is a legacy thing, we should think about removing it 'commit' => commit.commit, 'branch' => commit.branch, 'message' => commit.message, 'compare_url' => commit.compare_url, 'committed_at' => format_date(commit.committed_at), 'author_name' => commit.author_name, 'author_email' => commit.author_email, 'committer_name' => commit.committer_name, 'committer_email' => commit.committer_email } end def commit_data(commit) { 'id' => commit.id, 'sha' => commit.commit, 'branch' => commit.branch, 'message' => commit.message, 'committed_at' => format_date(commit.committed_at), 'author_name' => commit.author_name, 'author_email' => commit.author_email, 'committer_name' => commit.committer_name, 'committer_email' => commit.committer_email, 'compare_url' => commit.compare_url, } end def repository_data(repository) { 'id' => repository.id, 'slug' => repository.slug, 'description' => repository.description, 'private' => repository.private, 'last_build_id' => repository.last_build_id, 'last_build_number' => repository.last_build_number, 'last_build_state' => repository.last_build_state.to_s, 'last_build_duration' => repository.last_build_duration, 'last_build_language' => nil, 'last_build_started_at' => format_date(repository.last_build_started_at), 'last_build_finished_at' => format_date(repository.last_build_finished_at), 'github_language' => repository.github_language, 'default_branch' => { 'name' => repository.default_branch, 'last_build_id' => last_build_on_default_branch_id(repository) }, 'active' => repository.active, 'current_build_id' => repository.current_build_id } end def last_build_on_default_branch_id(repository) default_branch = Branch.where(repository_id: repository.id, name: repository.default_branch).first if default_branch default_branch.last_build_id end end end end end end end end