
When user activates a repository in the profile page, we now will display this repository on the 'My Repositories' list. When user chooses this repository, she will see an explenation why there is no builds and what could be done to fix this. Conflicts: assets/scripts/app/controllers.coffee assets/scripts/app/models/repo.coffee assets/scripts/app/templates/repos/list.hbs
141 lines
3.8 KiB
CoffeeScript
141 lines
3.8 KiB
CoffeeScript
require 'travis/expandable_record_array'
|
|
require 'travis/model'
|
|
|
|
@Travis.Repo = Travis.Model.extend
|
|
id: Ember.attr('string')
|
|
slug: Ember.attr('string')
|
|
description: Ember.attr('string')
|
|
lastBuildId: Ember.attr('string')
|
|
lastBuildNumber: Ember.attr(Number)
|
|
lastBuildState: Ember.attr('string')
|
|
lastBuildStartedAt: Ember.attr('string')
|
|
lastBuildFinishedAt: Ember.attr('string')
|
|
githubLanguage: Ember.attr('string')
|
|
_lastBuildDuration: Ember.attr(Number, key: 'last_build_duration')
|
|
active: Ember.attr('boolean')
|
|
|
|
lastBuild: Ember.belongsTo('Travis.Build', key: 'last_build_id')
|
|
|
|
lastBuildHash: (->
|
|
{
|
|
id: @get('lastBuildId')
|
|
number: @get('lastBuildNumber')
|
|
repo: this
|
|
}
|
|
).property('lastBuildId', 'lastBuildNumber')
|
|
|
|
allBuilds: (->
|
|
recordArray = Ember.RecordArray.create({ modelClass: Travis.Build, content: Ember.A([]) })
|
|
Travis.Build.registerRecordArray(recordArray)
|
|
recordArray
|
|
).property()
|
|
|
|
builds: (->
|
|
id = @get('id')
|
|
builds = Travis.Build.byRepoId id, event_type: 'push'
|
|
|
|
# TODO: move to controller
|
|
array = Travis.ExpandableRecordArray.create
|
|
type: Travis.Build
|
|
content: Ember.A([])
|
|
|
|
array.load(builds)
|
|
|
|
id = @get('id')
|
|
array.observe(@get('allBuilds'), (build) -> build.get('isLoaded') && build.get('repo.id') == id && !build.get('isPullRequest') )
|
|
|
|
array
|
|
).property()
|
|
|
|
pullRequests: (->
|
|
id = @get('id')
|
|
builds = Travis.Build.byRepoId id, event_type: 'pull_request'
|
|
array = Travis.ExpandableRecordArray.create
|
|
type: Travis.Build
|
|
content: Ember.A([])
|
|
|
|
array.load(builds)
|
|
|
|
id = @get('id')
|
|
array.observe(@get('allBuilds'), (build) -> build.get('isLoaded') && build.get('repo.id') == id && build.get('isPullRequest') )
|
|
|
|
array
|
|
).property()
|
|
|
|
branches: (->
|
|
Travis.Build.branches repoId: @get('id')
|
|
).property()
|
|
|
|
events: (->
|
|
Travis.Event.byRepoId @get('id')
|
|
).property()
|
|
|
|
owner: (->
|
|
(@get('slug') || '').split('/')[0]
|
|
).property('slug')
|
|
|
|
name: (->
|
|
(@get('slug') || '').split('/')[1]
|
|
).property('slug')
|
|
|
|
lastBuildDuration: (->
|
|
duration = @get('_lastBuildDuration')
|
|
duration = Travis.Helpers.durationFrom(@get('lastBuildStartedAt'), @get('lastBuildFinishedAt')) unless duration
|
|
duration
|
|
).property('_lastBuildDuration', 'lastBuildStartedAt', 'lastBuildFinishedAt')
|
|
|
|
sortOrder: (->
|
|
# cuz sortAscending seems buggy when set to false
|
|
if lastBuildFinishedAt = @get('lastBuildFinishedAt')
|
|
- new Date(lastBuildFinishedAt).getTime()
|
|
else
|
|
- new Date('9999').getTime() - parseInt(@get('lastBuildId'))
|
|
).property('lastBuildFinishedAt', 'lastBuildId')
|
|
|
|
stats: (->
|
|
if @get('slug')
|
|
@get('_stats') || $.get("https://api.github.com/repos/#{@get('slug')}", (data) =>
|
|
@set('_stats', data)
|
|
@notifyPropertyChange 'stats'
|
|
) && {}
|
|
).property('slug')
|
|
|
|
updateTimes: ->
|
|
@notifyPropertyChange 'lastBuildDuration'
|
|
|
|
regenerateKey: (options) ->
|
|
Travis.ajax.ajax '/repos/' + @get('id') + '/key', 'post', options
|
|
|
|
@Travis.Repo.reopenClass
|
|
recent: ->
|
|
@find()
|
|
|
|
ownedBy: (login) ->
|
|
@find(owner_name: login, orderBy: 'name')
|
|
|
|
accessibleBy: (login) ->
|
|
@find(member: login, active: true)
|
|
|
|
search: (query) ->
|
|
@find(search: query, orderBy: 'name')
|
|
|
|
withLastBuild: ->
|
|
filtered = Ember.FilteredRecordArray.create(
|
|
modelClass: Travis.Repo
|
|
filterFunction: (repo) -> repo.get('lastBuildId')
|
|
filterProperties: ['lastBuildId']
|
|
)
|
|
|
|
Travis.Repo.fetch().then (array) ->
|
|
filtered.updateFilter()
|
|
filtered.set('isLoaded', true)
|
|
|
|
filtered
|
|
|
|
bySlug: (slug) ->
|
|
repo = $.select(@find().toArray(), (repo) -> repo.get('slug') == slug)
|
|
if repo.length > 0 then repo else @find(slug: slug)
|
|
|
|
# buildURL: (slug) ->
|
|
# if slug then slug else 'repos'
|