travis-api/lib/travis/model/request.rb
Aakriti Gupta 65f1a29d86 Move travis-core files from /vendor to /lib.
- Re-factor
- Remove code for notifications
- Remove addons
- Remove travis-core gem.
- Ignore logs directory only
- Move core tests to spec/lib
2016-07-20 11:22:25 +02:00

113 lines
2.4 KiB
Ruby

require 'active_record'
require 'simple_states'
require 'travis/model/encrypted_column'
# Models an incoming request. The only supported source for requests currently is Github.
#
# The Request will be configured by fetching `.travis.yml` from the Github API
# and needs to be approved based on the configuration. Once approved the
# Request creates a Build.
class Request < Travis::Model
require 'travis/model/request/pull_request'
include SimpleStates
serialize :token, Travis::Model::EncryptedColumn.new(disable: true)
class << self
def last_by_head_commit(head_commit)
where(head_commit: head_commit).order(:id).last
end
def older_than(id)
recent.where('id < ?', id)
end
def recent(limit = 25)
order('id DESC').limit(limit)
end
end
belongs_to :commit
belongs_to :repository
belongs_to :owner, polymorphic: true
has_many :builds
has_many :events, as: :source
validates :repository_id, presence: true
serialize :config
serialize :payload
def event_type
read_attribute(:event_type) || 'push'
end
def ref
payload['ref'] if payload
end
def branch_name
ref.scan(%r{refs/heads/(.*?)$}).flatten.first if ref
end
def tag_name
ref.scan(%r{refs/tags/(.*?)$}).flatten.first if ref
end
def api_request?
event_type == 'api'
end
def pull_request?
event_type == 'pull_request'
end
def pull_request
@pull_request ||= PullRequest.new(payload && payload['pull_request'])
end
def pull_request_title
pull_request.title if pull_request?
end
def pull_request_number
pull_request.number if pull_request?
end
def head_repo
pull_request.head_repo
end
def base_repo
pull_request.base_repo
end
def head_branch
pull_request.head_branch
end
def base_branch
pull_request.base_branch
end
def config_url
GH.full_url("repos/#{repository.slug}/contents/.travis.yml?ref=#{commit.commit}").to_s
end
def same_repo_pull_request?
begin
head_repo && base_repo && head_repo == base_repo
rescue => e
Travis.logger.error("[request:#{id}] Couldn't determine whether pull request is from the same repository: #{e.message}")
false
end
end
def creates_jobs?
Build::Config::Matrix.new(
Build::Config.new(config).normalize, multi_os: repository.multi_os_enabled?, dist_group_expansion: repository.dist_group_expansion_enabled?
).expand.size > 0
end
end