rework asset compilation

This commit is contained in:
Sven Fuchs 2012-10-01 03:38:19 +02:00
parent cdd6f0047a
commit 419ace7c51
46 changed files with 40491 additions and 42120 deletions

105
AssetFile
View File

@ -1,8 +1,7 @@
# TODO add neuter for production
# https://github.com/wycats/rake-pipeline-web-filters/blob/master/lib/rake-pipeline-web-filters/neuter_filter.rb
# http://blog.nulayer.com/post/23294069876/building-simple-javascript-libraries-with-rake-pipeline?15bb0420
$: << 'lib'
require 'rake-pipeline-web-filters'
require 'rake-pipeline/travis'
require 'compass'
Compass.configuration.images_path = 'assets/images'
@ -10,62 +9,36 @@ Compass.configuration.add_import_path File.expand_path('../assets/stylesheets',
output 'public/javascripts'
input 'assets/javascripts' do
match 'vendor/**/*.js' do
files = %w(
vendor/minispade.js
vendor/jquery.min.js
vendor/handlebars.js
vendor/ember.js
vendor/ember-data.js
vendor/ansiparse.js
vendor/i18n.js
vendor/pusher.js
vendor/jquery.timeago.js
vendor/sc-routes.js
)
concat files, 'vendor.js'
end
match %r(^(travis|(app|config|data|lib)/.*)\.coffee$) do
coffee_script
end
match '**/*.hbs' do
handlebars(
:key_name_proc => proc { |input|
input.path.sub(%r(^app/templates/), '').sub(/\.hbs$/, '')
}
)
match 'app/templates/**/*.hbs' do
filter Travis::HandlebarsFilter
concat 'app/templates.js'
end
match %r(^(travis|(app|config|data|lib)/.*)\.js$) do
minispade(
string: true,
rewrite_requires: true,
module_id_generator: proc { |input|
input.path.sub(%r(^(app|lib)/), '').sub(/\.js$/, '')
}
)
concat 'application.js'
end
end
# DOH. how to simplify this.
input 'assets/javascripts/spec' do
match 'vendor/*.js' do
files = %w(
vendor/jasmine.js
vendor/jasmine-html.js
vendor/jasmine-runner.js
vendor/sinon.js
)
concat files, 'specs/vendor.js'
end
match '**/*.coffee' do
match %r(\.coffee$) do
coffee_script
concat 'specs/specs.js'
end
match %r(^(travis|(app|config|data|lib)/.*)\.js$) do
modules = proc { |input| input.path.gsub(%r((^app/|^lib/|\.js$)), '') }
minispade(string: true, rewrite_requires: true, module_id_generator: modules)
concat [], ['dev/app.js', 'min/app.js']
end
match 'vendor/**/*.js' do
precedence = %w(jquery.min minispade handlebars ember).map { |name| "vendor/#{name}.js" }
concat precedence, ['dev/vendor.js', 'min/vendor.js']
end
match 'min/**/*.js' do
filter Travis::ProductionFilter
uglify max_line_length: 50, squeeze: true
filter Travis::SafeConcatFilter do
'application.min.js'
end
end
match 'dev/**/*.js' do
concat 'application.js'
end
end
@ -73,10 +46,7 @@ output 'public/stylesheets'
input 'assets/stylesheets' do
match '**/*.{scss,sass}' do
filter Rake::Pipeline::Web::Filters::SassFilter
end
match '**/*.css' do
concat 'application.css'
concat [], 'application.css'
end
end
@ -94,3 +64,20 @@ input 'assets/static' do
end
end
# # DOH. how to simplify this.
# input 'assets/javascripts/spec' do
# match 'vendor/*.js' do
# files = %w(
# vendor/jasmine.js
# vendor/jasmine-html.js
# vendor/jasmine-runner.js
# vendor/sinon.js
# )
# concat files, 'specs/vendor.js'
# end
#
# match '**/*.coffee' do
# coffee_script
# concat 'specs/specs.js'
# end
# end

31
Gemfile
View File

@ -1,22 +1,14 @@
source :rubygems
gem 'debugger'
gem 'travis-api', github: 'travis-ci/travis-api'
gem 'travis-core', github: 'travis-ci/travis-core', branch: 'sf-travis-api'
gem 'travis-support', github: 'travis-ci/travis-support'
gem 'gh', github: 'rkh/gh'
gem 'unicorn'
gem 'sinatra'
gem 'sinatra-contrib'
gem 'rack-contrib', github: 'rack/rack-contrib'
gem 'yard-sinatra', github: 'rkh/yard-sinatra'
gem 'bunny'
gem 'pg', '~> 0.13.2'
gem 'newrelic_rpm', '~> 3.3.0'
gem 'hubble', git: 'git://github.com/roidrage/hubble'
group :assets, :development, :test do
gem 'rake', '~> 0.9.2'
end
group :assets do
gem 'rake-pipeline', github: 'livingsocial/rake-pipeline'
@ -25,14 +17,23 @@ group :assets do
gem 'coffee-script'
gem 'compass'
gem 'tilt'
gem 'uglifier'
gem 'guard'
end
group :development, :test do
gem 'rake', '~> 0.9.2'
end
group :development do
gem 'travis-api', github: 'travis-ci/travis-api'
gem 'travis-core', github: 'travis-ci/travis-core', branch: 'sf-travis-api'
gem 'travis-support', github: 'travis-ci/travis-support'
gem 'gh', github: 'rkh/gh'
gem 'bunny'
gem 'pg', '~> 0.13.2'
gem 'newrelic_rpm', '~> 3.3.0'
gem 'hubble', git: 'git://github.com/roidrage/hubble'
gem 'debugger'
gem 'foreman'
gem 'rerun'
gem 'rb-fsevent', '~> 0.9.1'

View File

@ -265,6 +265,9 @@ GEM
polyglot
polyglot (>= 0.3.1)
tzinfo (0.3.33)
uglifier (1.0.4)
execjs (>= 0.3.0)
multi_json (>= 1.0.2)
unicorn (4.3.1)
kgio (~> 2.6)
rack
@ -300,5 +303,6 @@ DEPENDENCIES
travis-api!
travis-core!
travis-support!
uglifier
unicorn
yard-sinatra!

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -34,10 +34,9 @@ require 'ext/ember/namespace'
INTERVALS: { sponsors: -1, times: -1, updateTimes: 1000 }
run: (attrs) ->
$ =>
@redirectOnHashbang()
@loadConfig (config) =>
console.log "Connecting to #{Travis.config.api_endpoint}"
app = Travis.App.create(attrs || {})
# TODO: router expects the classes for controllers on main namespace, so
# if we want to keep app at Travis.app, we need to copy that, it would
@ -54,6 +53,7 @@ require 'ext/ember/namespace'
location.href = location.href.replace('#!/', '') if location.hash.slice(0, 2) == '#!'
loadConfig: (callback) ->
Travis.get '/config', (data) =>
@get '/config', (data) =>
$.extend @config, data.config
console.log "Connecting to #{data.config.api_endpoint}"
callback(data.config)

View File

@ -43,7 +43,7 @@ if (!Array.prototype.indexOf) {
}
// Instantiate the object
var I18n = I18n || {};
window.I18n = {};
// Set default locale to english
I18n.defaultLocale = "en";

View File

@ -1,546 +0,0 @@
// ==========================================================================
// Project: SproutCore - JavaScript Application Framework
// Copyright: ©2006-2011 Strobe Inc. and contributors.
// Portions ©2008-2011 Apple Inc. All rights reserved.
// License: Licensed under MIT license (see license.js)
// ==========================================================================
var get = Ember.get, set = Ember.set;
/**
Wether the browser supports HTML5 history.
*/
var supportsHistory = !!(window.history && window.history.pushState);
/**
Wether the browser supports the hashchange event.
*/
var supportsHashChange = ('onhashchange' in window) && (document.documentMode === undefined || document.documentMode > 7);
/**
@class
Route is a class used internally by Ember.routes. The routes defined by your
application are stored in a tree structure, and this is the class for the
nodes.
*/
var Route = Ember.Object.extend(
/** @scope Route.prototype */ {
target: null,
method: null,
staticRoutes: null,
dynamicRoutes: null,
wildcardRoutes: null,
add: function(parts, target, method) {
var part, nextRoute;
// clone the parts array because we are going to alter it
parts = Ember.copy(parts);
if (!parts || parts.length === 0) {
this.target = target;
this.method = method;
} else {
part = parts.shift();
// there are 3 types of routes
switch (part.slice(0, 1)) {
// 1. dynamic routes
case ':':
part = part.slice(1, part.length);
if (!this.dynamicRoutes) this.dynamicRoutes = {};
if (!this.dynamicRoutes[part]) this.dynamicRoutes[part] = this.constructor.create();
nextRoute = this.dynamicRoutes[part];
break;
// 2. wildcard routes
case '*':
part = part.slice(1, part.length);
if (!this.wildcardRoutes) this.wildcardRoutes = {};
nextRoute = this.wildcardRoutes[part] = this.constructor.create();
break;
// 3. static routes
default:
if (!this.staticRoutes) this.staticRoutes = {};
if (!this.staticRoutes[part]) this.staticRoutes[part] = this.constructor.create();
nextRoute = this.staticRoutes[part];
}
// recursively add the rest of the route
if (nextRoute) nextRoute.add(parts, target, method);
}
},
routeForParts: function(parts, params) {
var part, key, route;
// clone the parts array because we are going to alter it
parts = Ember.copy(parts);
// if parts is empty, we are done
if (!parts || parts.length === 0) {
return this.method ? this : null;
} else {
part = parts.shift();
// try to match a static route
if (this.staticRoutes && this.staticRoutes[part]) {
return this.staticRoutes[part].routeForParts(parts, params);
} else {
// else, try to match a dynamic route
for (key in this.dynamicRoutes) {
route = this.dynamicRoutes[key].routeForParts(parts, params);
if (route) {
params[key] = part;
return route;
}
}
// else, try to match a wilcard route
for (key in this.wildcardRoutes) {
parts.unshift(part);
params[key] = parts.join('/');
return this.wildcardRoutes[key].routeForParts(null, params);
}
// if nothing was found, it means that there is no match
return null;
}
}
}
});
/**
@class
Ember.routes manages the browser location. You can change the hash part of the
current location. The following code
Ember.routes.set('location', 'notes/edit/4');
will change the location to http://domain.tld/my_app#notes/edit/4. Adding
routes will register a handler that will be called whenever the location
changes and matches the route:
Ember.routes.add(':controller/:action/:id', MyApp, MyApp.route);
You can pass additional parameters in the location hash that will be relayed
to the route handler:
Ember.routes.set('location', 'notes/show/4?format=xml&language=fr');
The syntax for the location hash is described in the location property
documentation, and the syntax for adding handlers is described in the
add method documentation.
Browsers keep track of the locations in their history, so when the user
presses the 'back' or 'forward' button, the location is changed, Ember.route
catches it and calls your handler. Except for Internet Explorer versions 7
and earlier, which do not modify the history stack when the location hash
changes.
Ember.routes also supports HTML5 history, which uses a '/' instead of a '#'
in the URLs, so that all your website's URLs are consistent.
*/
var routes = Ember.routes = Ember.Object.create(
/** @scope Ember.routes.prototype */{
/**
Set this property to true if you want to use HTML5 history, if available on
the browser, instead of the location hash.
HTML 5 history uses the history.pushState method and the window's popstate
event.
By default it is false, so your URLs will look like:
http://domain.tld/my_app#notes/edit/4
If set to true and the browser supports pushState(), your URLs will look
like:
http://domain.tld/my_app/notes/edit/4
You will also need to make sure that baseURI is properly configured, as
well as your server so that your routes are properly pointing to your
SproutCore application.
@see http://dev.w3.org/html5/spec/history.html#the-history-interface
@property
@type {Boolean}
*/
wantsHistory: false,
/**
A read-only boolean indicating whether or not HTML5 history is used. Based
on the value of wantsHistory and the browser's support for pushState.
@see wantsHistory
@property
@type {Boolean}
*/
usesHistory: null,
/**
The base URI used to resolve routes (which are relative URLs). Only used
when usesHistory is equal to true.
The build tools automatically configure this value if you have the
html5_history option activated in the Buildfile:
config :my_app, :html5_history => true
Alternatively, it uses by default the value of the href attribute of the
<base> tag of the HTML document. For example:
<base href="http://domain.tld/my_app">
The value can also be customized before or during the exectution of the
main() method.
@see http://www.w3.org/TR/html5/semantics.html#the-base-element
@property
@type {String}
*/
baseURI: document.baseURI,
/** @private
A boolean value indicating whether or not the ping method has been called
to setup the Ember.routes.
@property
@type {Boolean}
*/
_didSetup: false,
/** @private
Internal representation of the current location hash.
@property
@type {String}
*/
_location: null,
/** @private
Routes are stored in a tree structure, this is the root node.
@property
@type {Route}
*/
_firstRoute: null,
/** @private
An internal reference to the Route class.
@property
*/
_Route: Route,
/** @private
Internal method used to extract and merge the parameters of a URL.
@returns {Hash}
*/
_extractParametersAndRoute: function(obj) {
var params = {},
route = obj.route || '',
separator, parts, i, len, crumbs, key;
separator = (route.indexOf('?') < 0 && route.indexOf('&') >= 0) ? '&' : '?';
parts = route.split(separator);
route = parts[0];
if (parts.length === 1) {
parts = [];
} else if (parts.length === 2) {
parts = parts[1].split('&');
} else if (parts.length > 2) {
parts.shift();
}
// extract the parameters from the route string
len = parts.length;
for (i = 0; i < len; ++i) {
crumbs = parts[i].split('=');
params[crumbs[0]] = crumbs[1];
}
// overlay any parameter passed in obj
for (key in obj) {
if (obj.hasOwnProperty(key) && key !== 'route') {
params[key] = '' + obj[key];
}
}
// build the route
parts = [];
for (key in params) {
parts.push([key, params[key]].join('='));
}
params.params = separator + parts.join('&');
params.route = route;
return params;
},
/**
The current location hash. It is the part in the browser's location after
the '#' mark.
The following code
Ember.routes.set('location', 'notes/edit/4');
will change the location to http://domain.tld/my_app#notes/edit/4 and call
the correct route handler if it has been registered with the add method.
You can also pass additional parameters. They will be relayed to the route
handler. For example, the following code
Ember.routes.add(':controller/:action/:id', MyApp, MyApp.route);
Ember.routes.set('location', 'notes/show/4?format=xml&language=fr');
will change the location to
http://domain.tld/my_app#notes/show/4?format=xml&language=fr and call the
MyApp.route method with the following argument:
{ route: 'notes/show/4',
params: '?format=xml&language=fr',
controller: 'notes',
action: 'show',
id: '4',
format: 'xml',
language: 'fr' }
The location can also be set with a hash, the following code
Ember.routes.set('location',
{ route: 'notes/edit/4', format: 'xml', language: 'fr' });
will change the location to
http://domain.tld/my_app#notes/show/4?format=xml&language=fr.
The 'notes/show/4&format=xml&language=fr' syntax for passing parameters,
using a '&' instead of a '?', as used in SproutCore 1.0 is still supported.
@property
@type {String}
*/
location: function(key, value) {
this._skipRoute = false;
return this._extractLocation(key, value);
}.property(),
_extractLocation: function(key, value) {
var crumbs, encodedValue;
if (value !== undefined) {
if (value === null) {
value = '';
}
if (typeof(value) === 'object') {
crumbs = this._extractParametersAndRoute(value);
value = crumbs.route + crumbs.params;
}
if (!Ember.empty(value) || (this._location && this._location !== value)) {
encodedValue = encodeURI(value);
if (this.usesHistory) {
if (encodedValue.length > 0) {
encodedValue = '/' + encodedValue;
}
window.history.pushState(null, null, get(this, 'baseURI') + encodedValue);
} else {
window.location.hash = encodedValue;
}
}
this._location = value;
}
return this._location;
},
/**
You usually don't need to call this method. It is done automatically after
the application has been initialized.
It registers for the hashchange event if available. If not, it creates a
timer that looks for location changes every 150ms.
*/
ping: function() {
var that;
if (!this._didSetup) {
this._didSetup = true;
if (get(this, 'wantsHistory') && supportsHistory) {
this.usesHistory = true;
popState();
jQuery(window).bind('popstate', popState);
} else {
this.usesHistory = false;
if (supportsHashChange) {
hashChange();
jQuery(window).bind('hashchange', hashChange);
} else {
// we don't use a Ember.Timer because we don't want
// a run loop to be triggered at each ping
that = this;
this._invokeHashChange = function() {
that.hashChange();
setTimeout(that._invokeHashChange, 100);
};
this._invokeHashChange();
}
}
}
},
/**
Adds a route handler. Routes have the following format:
- 'users/show/5' is a static route and only matches this exact string,
- ':action/:controller/:id' is a dynamic route and the handler will be
called with the 'action', 'controller' and 'id' parameters passed in a
hash,
- '*url' is a wildcard route, it matches the whole route and the handler
will be called with the 'url' parameter passed in a hash.
Route types can be combined, the following are valid routes:
- 'users/:action/:id'
- ':controller/show/:id'
- ':controller/ *url' (ignore the space, because of jslint)
@param {String} route the route to be registered
@param {Object} target the object on which the method will be called, or
directly the function to be called to handle the route
@param {Function} method the method to be called on target to handle the
route, can be a function or a string
*/
add: function(route, target, method) {
if (!this._didSetup) {
Ember.run.once(this, 'ping');
}
if (method === undefined && Ember.typeOf(target) === 'function') {
method = target;
target = null;
} else if (Ember.typeOf(method) === 'string') {
method = target[method];
}
if (!this._firstRoute) this._firstRoute = Route.create();
this._firstRoute.add(route.split('/'), target, method);
return this;
},
/**
Observer of the 'location' property that calls the correct route handler
when the location changes.
*/
locationDidChange: function() {
this.trigger();
}.observes('location'),
/**
Triggers a route even if already in that route (does change the location, if it
is not already changed, as well).
If the location is not the same as the supplied location, this simply lets "location"
handle it (which ends up coming back to here).
*/
trigger: function() {
var location = get(this, 'location'),
params, route;
if (this._firstRoute) {
params = this._extractParametersAndRoute({ route: location });
location = params.route;
delete params.route;
delete params.params;
route = this.getRoute(location, params);
if (route && route.method) {
route.method.call(route.target || this, params);
}
}
},
getRoute: function(route, params) {
var firstRoute = this._firstRoute;
if (params == null) {
params = {}
}
return firstRoute.routeForParts(route.split('/'), params);
},
exists: function(route, params) {
route = this.getRoute(route, params);
return route != null && route.method != null;
}
});
/**
Event handler for the hashchange event. Called automatically by the browser
if it supports the hashchange event, or by our timer if not.
*/
function hashChange(event) {
var loc = window.location.hash;
// Remove the '#' prefix
loc = (loc && loc.length > 0) ? loc.slice(1, loc.length) : '';
if (!jQuery.browser.mozilla) {
// because of bug https://bugzilla.mozilla.org/show_bug.cgi?id=483304
loc = decodeURI(loc);
}
if (get(routes, 'location') !== loc && !routes._skipRoute) {
Ember.run.once(function() {
set(routes, 'location', loc);
});
}
routes._skipRoute = false;
}
function popState(event) {
var base = get(routes, 'baseURI'),
loc = document.location.href;
if (loc.slice(0, base.length) === base) {
// Remove the base prefix and the extra '/'
loc = loc.slice(base.length + 1, loc.length);
if (get(routes, 'location') !== loc && !routes._skipRoute) {
Ember.run.once(function() {
set(routes, 'location', loc);
});
}
}
routes._skipRoute = false;
}

View File

@ -1,135 +0,0 @@
{
"platinum": [
{
"url": "http://www.wooga.com",
"image": "wooga-205x130.png"
},
{
"url": "http://bendyworks.com",
"image": "bendyworks-205x130.png"
},
{
"url": "http://cloudcontrol.com",
"image": "cloudcontrol-205x130.png"
},
{
"url": "http://xing.de",
"image": "xing-205x130.png"
}
],
"gold": [
{
"url": "http://heroku.com",
"image": "heroku-205x60.png"
},
{
"url": "http://soundcloud.com",
"image": "soundcloud-205x60.png"
},
{
"url": "http://nedap.com",
"image": "nedap-205x60.png"
},
{
"url": "http://mongohq.com",
"image": "mongohq-205x60.png"
},
{
"url": "http://zweitag.de",
"image": "zweitag-205x60.png"
},
{
"url": "http://kanbanery.com",
"image": "kanbanery-205x60.png"
},
{
"url": "http://ticketevolution.com",
"image": "ticketevolution-205x60.jpg"
},
{
"url": "http://plan.io/travis",
"image": "planio-205x60.png"
}
],
"silver": [
{
"link": "<a href=\"http://cobot.me\">Cobot</a><span>: The one tool to run your coworking space</span>"
},
{
"link": "<a href=\"http://jumpstartlab.com\">JumpstartLab</a><span>: We build developers</span>"
},
{
"link": "<a href=\"http://evilmartians.com\">Evil Martians</a><span>: Agile Ruby on Rails development</span>"
},
{
"link": "<a href=\"http://zendesk.com\">Zendesk</a><span>: Love your helpdesk</span>"
},
{
"link": "<a href=\"http://stripe.com\">Stripe</a><span>: Payments for developers</span>"
},
{
"link": "<a href=\"http://basho.com\">Basho</a><span>: We make Riak!</span>"
},
{
"link": "<a href=\"http://thinkrelevance.com\">Relevance</a><span>: We deliver software solutions</span>"
},
{
"link": "<a href=\"http://mindmatters.de\">Mindmatters</a><span>: Software für Menschen</span>"
},
{
"link": "<a href=\"http://amenhq.com\">Amen</a><span>: The best and worst of everything</span>"
},
{
"link": "<a href=\"http://site5.com\">Site5</a><span>: Premium Web Hosting Solutions</span>"
},
{
"link": "<a href=\"http://www.crowdint.com\">Crowd Interactive</a><span>: Leading Rails consultancy in Mexico</span>"
},
{
"link": "<a href=\"http://www.atomicobject.com/detroit\">Atomic Object</a><span>: Work with really smart people</span>"
},
{
"link": "<a href=\"http://codeminer.com.br\">Codeminer</a><span>: smart services for your startup</span>"
},
{
"link": "<a href=\"http://cloudant.com\">Cloudant</a><span>: grow into your data layer, not out of it</span>"
},
{
"link": "<a href=\"http://gidsy.com\">Gidsy</a><span>: Explore, organize &amp; book unique things to do!</span>"
},
{
"link": "<a href=\"http://5apps.com\">5apps</a><span>: Package &amp; deploy HTML5 apps automatically</span>"
},
{
"link": "<a href=\"http://meltmedia.com\">Meltmedia</a><span>: We are Interactive Superheroes</span>"
},
{
"link": "<a href=\"http://www.fngtps.com\">Fingertips</a><span> offers design and development services</span>"
},
{
"link": "<a href=\"http://www.fngtps.com\">Engine Yard</a><span>: Build epic apps, let us handle the rest</span>"
},
{
"link": "<a href=\"http://malwarebytes.org\">Malwarebytes</a><span>: Defeat Malware once and for all.</span>"
},
{
"link": "<a href=\"http://readmill.com\">Readmill</a><span>: The best reading app on the iPad.</span>"
},
{
"link": "<a href=\"http://www.mdsol.com\">Medidata</a><span>: clinical tech improving quality of life</span>"
},
{
"link": "<a href=\"http://coderwall.com/teams/4f27194e973bf000040005f0\">ESM</a><span>: Japan's best agile Ruby/Rails consultancy</span>"
},
{
"link": "<a href=\"http://twitter.com\">Twitter</a><span>: instantly connects people everywhere</span>"
},
{
"link": "<a href=\"http://agileanimal.com\">AGiLE ANiMAL</a><span>: we <3 Travis CI.</span>"
},
{
"link": "<a href=\"http://tupalo.com\">Tupalo</a><span>: Discover, review &amp; share local businesses.</span>"
}
]
}

View File

@ -0,0 +1,27 @@
// DOM
var Element = {};
Element.firstChild = function () { return Element; };
Element.innerHTML = function () { return Element; };
var document = { createRange: false, createElement: function() { return Element; } };
var window = this;
this.document = document;
// Console
var console = window.console = {};
console.log = console.info = console.warn = console.error = function(){};
// jQuery
var jQuery = function() { return jQuery; };
jQuery.ready = function() { return jQuery; };
jQuery.inArray = function() { return jQuery; };
jQuery.jquery = "1.7.1";
jQuery.event = { fixHooks: {} };
var $ = jQuery;
window.jQuery = $;
// Ember
function compileHandlebarsTemplate(source) {
return Ember.Handlebars.precompile(source).toString();
}

View File

@ -0,0 +1,65 @@
require 'rake-pipeline'
require 'execjs'
require 'uglifier'
module Travis
class HandlebarsFilter < Rake::Pipeline::Filter
class << self
def source
[
File.read('lib/rake-pipeline/ember-headless.js'),
File.read('assets/javascripts/vendor/handlebars.js'),
File.read('assets/javascripts/vendor/ember.js')
].join("\n")
end
def context
@@context ||= ExecJS.compile(source)
end
def compile(source)
context.call('compileHandlebarsTemplate', source + "\n")
end
end
def generate_output(inputs, output)
inputs.each do |input|
source = self.class.compile(input.read)
source = wrap(name(input.path), source)
output.write source
end
end
def wrap(name, source)
"\nEmber.TEMPLATES['#{name}'] = Ember.Handlebars.template(#{source});\n"
end
def name(path)
path.sub(%r(^app/templates/), '').sub(/\.hbs$/, '')
end
end
class SafeConcatFilter < Rake::Pipeline::Filter
def generate_output(inputs, output)
inputs.each do |input|
source = File.read(input.fullpath) + ";"
output.write source
end
end
end
class ProductionFilter < Rake::Pipeline::Filter
def generate_output(inputs, output)
inputs.each do |input|
source = File.read(input.fullpath)
source = strip_debug(source)
source = Uglifier.compile(source)
output.write source
end
end
def strip_debug(source)
source.gsub(%r{^(\s)*Ember\.(assert|deprecate|warn)\((.*)\).*$}, "")
end
end
end

View File

@ -3,13 +3,15 @@ require 'rack/protection/path_traversal'
module Travis::Web
class App
ASSET_DIRS = %r(/(stylesheets|javascripts)/)
autoload :Api, 'travis/web/app/api'
autoload :Assets, 'travis/web/app/assets'
autoload :Config, 'travis/web/app/config'
autoload :Files, 'travis/web/app/files'
autoload :Helpers, 'travis/web/app/helpers'
autoload :Filter, 'travis/web/app/filter'
autoload :Terminal, 'travis/web/app/terminal'
autoload :Version, 'travis/web/app/version'
Rack.autoload :SSL, 'rack/ssl'
Rack.autoload :Deflater, 'rack/deflater'
@ -28,7 +30,7 @@ module Travis::Web
use Rack::Deflater if config.deflate?
use Travis::Web::App::Api, config if config.run_api?
use Travis::Web::App::Version, config
use Travis::Web::App::Assets, config
use Travis::Web::App::Filter, config
run Travis::Web::App::Files.new
end

View File

@ -1,14 +1,14 @@
class Travis::Web::App
class Filter
autoload :Endpoint, 'travis/web/app/filter/endpoint'
autoload :Version, 'travis/web/app/filter/version'
autoload :Assets, 'travis/web/app/filter/assets'
attr_reader :app, :config, :filters
def initialize(app, config)
@app = app
@config = config
@filters = [Endpoint.new(config), Version.new(config)]
@filters = [Endpoint.new(config), Assets.new(config)]
end
def call(env)

View File

@ -1,15 +0,0 @@
class Travis::Web::App::Filter
class Version
ASSET_DIRS = %r(/(stylesheets|javascripts)/)
attr_reader :config
def initialize(config)
@config = config
end
def apply(string)
string.gsub(ASSET_DIRS) { |match| "/#{config.version}/#{$1}/" }
end
end
end

View File

@ -1,37 +0,0 @@
class Travis::Web::App
class Version
include Helpers
attr_reader :app, :config
def initialize(app, config)
@app = app
@config = config
end
def call(env)
path = env['PATH_INFO']
if pass?(path)
app.call(env)
elsif versioned?(path)
app.call(map_env(env, config.version))
else
not_found
end
end
private
def pass?(path)
['/', '/index.html', 'current'].include?(path)
end
def versioned?(path)
path.starts_with?("/#{config.version}/")
end
def not_found
[404, { 'Content-Type' => 'text/html', 'Content-Length' => '9', 'X-Cascade' => 'pass' }, ['not found']]
end
end
end

View File

@ -1,807 +0,0 @@
<html><head>
<meta charset="UTF-8">
<meta rel="travis.api_endpoint" href="/api">
<title>Travis CI - Distributed Continuous Integration Platform for the Open Source Community</title>
<link rel="stylesheet" href="/stylesheets/application.css">
</head>
<body class="ember-application" id="home">
<div id="ember360" class="ember-view"><div id="ember393" class="ember-view">
<div id="ember673" class="ember-view"><div id="top">
<div id="ember697" class="ember-view"><div id="ember654" class="ember-view"><a href="#" data-ember-action="3">
<h1>Travis</h1>
</a>
<ul id="navigation">
<li class="active" data-bindattr-4="4">
<a href="/" data-ember-action="5">Home</a>
</li>
<li class="" data-bindattr-6="6">
<a href="/stats" data-ember-action="7">Stats</a>
</li>
<li>
<a href="http://about.travis-ci.org/blog">Blog</a>
</li>
<li>
<a href="http://about.travis-ci.org/docs">Docs</a>
</li>
<li class="profile signed-in" data-bindattr-8="8">
<p class="handle">
<a class="signed-out" href="#" data-ember-action="9">Sign in with Github</a>
<a class="signed-in" href="#"><img src="https://www.gravatar.com/avatar/2f042f300d1249917adf6f13d3f698b2?s=24&amp;d=mm" data-bindattr-10="10"><script id="metamorph-0-start" type="text/x-placeholder"></script>Sven Fuchs<script id="metamorph-0-end" type="text/x-placeholder"></script></a>
<span class="signing-in">Signing in</span>
</p>
<ul>
<li>
<a href="/profile" class="profile" data-ember-action="11">Profile</a>
</li>
<li>
<a href="/" class="signout" data-ember-action="12">Sign Out</a>
</li>
</ul>
</li>
</ul>
</div></div>
</div>
<div id="page">
<div id="left">
<div id="ember723" class="ember-view"><div id="ember661" class="ember-view"><div id="search_box">
<input id="ember733" class="ember-view ember-text-field" type="text">
</div>
<div id="ember748" class="ember-view"><ul class="tabs">
<li id="tab_recent" class="active" data-bindattr-13="13">
<h5><a name="recent" data-ember-action="14">Recent</a></h5>
</li>
<li id="tab_owned" class="display" data-bindattr-15="15">
<h5><a name="owned" data-ember-action="16">My Repositories</a></h5>
</li>
<li id="tab_search" class="" data-bindattr-17="17">
<h5><a name="search" data-ember-action="18">Search</a></h5>
</li>
</ul>
</div>
<a data-ember-action="19" class="toggle-info"></a>
<div class="tab">
<ul id="repositories" class="ember-view"><li id="ember1041" class="ember-view repository green selected">
<script id="metamorph-64-start" type="text/x-placeholder"></script>
<div class="slug-and-status">
<span class="status"></span>
<a href="/travis-ci/travis-core" data-bindattr-64="64" data-ember-action="65" class="slug"><script id="metamorph-65-start" type="text/x-placeholder"></script>travis-ci/travis-core<script id="metamorph-65-end" type="text/x-placeholder"></script></a>
</div>
<a href="/travis-ci/travis-core/builds/1905992" data-bindattr-66="66" data-ember-action="67" class="last_build"><script id="metamorph-66-start" type="text/x-placeholder"></script>838<script id="metamorph-66-end" type="text/x-placeholder"></script></a>
<p class="summary">
<span class="duration_label">Duration:</span>
<abbr class="duration" title="2012-07-19T16:51:14Z" data-bindattr-68="68"><script id="metamorph-67-start" type="text/x-placeholder"></script>1 hr 5 min 38 sec<script id="metamorph-67-end" type="text/x-placeholder"></script></abbr>,
<span class="finished_at_label">Finished:</span>
<abbr class="finished_at timeago" title="2012-07-19T17:17:50Z" data-bindattr-69="69"><script id="metamorph-68-start" type="text/x-placeholder"></script>2 months ago<script id="metamorph-68-end" type="text/x-placeholder"></script></abbr>
</p>
<span class="indicator"></span>
<script id="metamorph-69-start" type="text/x-placeholder"></script>
<div class="info">
<p class="description"><script id="metamorph-70-start" type="text/x-placeholder"></script>Models and classes shared by Travis hub and server<script id="metamorph-70-end" type="text/x-placeholder"></script></p>
</div>
<script id="metamorph-69-end" type="text/x-placeholder"></script>
<script id="metamorph-64-end" type="text/x-placeholder"></script>
</li><li id="ember1030" class="ember-view repository green">
<script id="metamorph-57-start" type="text/x-placeholder"></script>
<div class="slug-and-status">
<span class="status"></span>
<a href="/travis-ci/travis-ci-some-very-long-name" data-bindattr-58="58" data-ember-action="59" class="slug"><script id="metamorph-58-start" type="text/x-placeholder"></script>travis-ci/travis-ci-some-very-long-name<script id="metamorph-58-end" type="text/x-placeholder"></script></a>
</div>
<a href="/travis-ci/travis-ci-some-very-long-name/builds/1906054" data-bindattr-60="60" data-ember-action="61" class="last_build"><script id="metamorph-59-start" type="text/x-placeholder"></script>1962<script id="metamorph-59-end" type="text/x-placeholder"></script></a>
<p class="summary">
<span class="duration_label">Duration:</span>
<abbr class="duration" title="2012-07-19T16:56:47Z" data-bindattr-62="62"><script id="metamorph-60-start" type="text/x-placeholder"></script>3 min 52 sec<script id="metamorph-60-end" type="text/x-placeholder"></script></abbr>,
<span class="finished_at_label">Finished:</span>
<abbr class="finished_at timeago" title="2012-07-19T17:00:39Z" data-bindattr-63="63"><script id="metamorph-61-start" type="text/x-placeholder"></script>2 months ago<script id="metamorph-61-end" type="text/x-placeholder"></script></abbr>
</p>
<span class="indicator"></span>
<script id="metamorph-62-start" type="text/x-placeholder"></script>
<div class="info">
<p class="description"><script id="metamorph-63-start" type="text/x-placeholder"></script>A distributed build system for the open source community.<script id="metamorph-63-end" type="text/x-placeholder"></script></p>
</div>
<script id="metamorph-62-end" type="text/x-placeholder"></script>
<script id="metamorph-57-end" type="text/x-placeholder"></script>
</li><li id="ember1049" class="ember-view repository red">
<script id="metamorph-71-start" type="text/x-placeholder"></script>
<div class="slug-and-status">
<span class="status"></span>
<a href="/rkh/yard-sinatra" data-bindattr-70="70" data-ember-action="71" class="slug"><script id="metamorph-72-start" type="text/x-placeholder"></script>rkh/yard-sinatra<script id="metamorph-72-end" type="text/x-placeholder"></script></a>
</div>
<a href="/rkh/yard-sinatra/builds/1888371" data-bindattr-72="72" data-ember-action="73" class="last_build"><script id="metamorph-73-start" type="text/x-placeholder"></script>8<script id="metamorph-73-end" type="text/x-placeholder"></script></a>
<p class="summary">
<span class="duration_label">Duration:</span>
<abbr class="duration" title="2012-07-17T19:23:31Z" data-bindattr-74="74"><script id="metamorph-74-start" type="text/x-placeholder"></script>3 min 14 sec<script id="metamorph-74-end" type="text/x-placeholder"></script></abbr>,
<span class="finished_at_label">Finished:</span>
<abbr class="finished_at timeago" title="2012-07-17T19:24:43Z" data-bindattr-75="75"><script id="metamorph-75-start" type="text/x-placeholder"></script>2 months ago<script id="metamorph-75-end" type="text/x-placeholder"></script></abbr>
</p>
<span class="indicator"></span>
<script id="metamorph-76-start" type="text/x-placeholder"></script>
<div class="info">
<p class="description"><script id="metamorph-77-start" type="text/x-placeholder"></script>Display sinatra routes in yard documentation.<script id="metamorph-77-end" type="text/x-placeholder"></script></p>
</div>
<script id="metamorph-76-end" type="text/x-placeholder"></script>
<script id="metamorph-71-end" type="text/x-placeholder"></script>
</li><li id="ember1057" class="ember-view repository green">
<script id="metamorph-78-start" type="text/x-placeholder"></script>
<div class="slug-and-status">
<span class="status"></span>
<a href="/travis-ci/travis-hub" data-bindattr-76="76" data-ember-action="77" class="slug"><script id="metamorph-79-start" type="text/x-placeholder"></script>travis-ci/travis-hub<script id="metamorph-79-end" type="text/x-placeholder"></script></a>
</div>
<a href="/travis-ci/travis-hub/builds/1884596" data-bindattr-78="78" data-ember-action="79" class="last_build"><script id="metamorph-80-start" type="text/x-placeholder"></script>449<script id="metamorph-80-end" type="text/x-placeholder"></script></a>
<p class="summary">
<span class="duration_label">Duration:</span>
<abbr class="duration" title="2012-07-17T11:55:20Z" data-bindattr-80="80"><script id="metamorph-81-start" type="text/x-placeholder"></script>4 min 27 sec<script id="metamorph-81-end" type="text/x-placeholder"></script></abbr>,
<span class="finished_at_label">Finished:</span>
<abbr class="finished_at timeago" title="2012-07-17T11:57:58Z" data-bindattr-81="81"><script id="metamorph-82-start" type="text/x-placeholder"></script>2 months ago<script id="metamorph-82-end" type="text/x-placeholder"></script></abbr>
</p>
<span class="indicator"></span>
<script id="metamorph-83-start" type="text/x-placeholder"></script>
<div class="info">
<p class="description"><script id="metamorph-84-start" type="text/x-placeholder"></script>Collects build log streams, worker state reports and many other things [from Travis workers]<script id="metamorph-84-end" type="text/x-placeholder"></script></p>
</div>
<script id="metamorph-83-end" type="text/x-placeholder"></script>
<script id="metamorph-78-end" type="text/x-placeholder"></script>
</li><li id="ember1065" class="ember-view repository red">
<script id="metamorph-85-start" type="text/x-placeholder"></script>
<div class="slug-and-status">
<span class="status"></span>
<a href="/rkh/gh" data-bindattr-82="82" data-ember-action="83" class="slug"><script id="metamorph-86-start" type="text/x-placeholder"></script>rkh/gh<script id="metamorph-86-end" type="text/x-placeholder"></script></a>
</div>
<a href="/rkh/gh/builds/1836256" data-bindattr-84="84" data-ember-action="85" class="last_build"><script id="metamorph-87-start" type="text/x-placeholder"></script>117<script id="metamorph-87-end" type="text/x-placeholder"></script></a>
<p class="summary">
<span class="duration_label">Duration:</span>
<abbr class="duration" title="2012-07-11T14:17:54Z" data-bindattr-86="86"><script id="metamorph-88-start" type="text/x-placeholder"></script>9 min 19 sec<script id="metamorph-88-end" type="text/x-placeholder"></script></abbr>,
<span class="finished_at_label">Finished:</span>
<abbr class="finished_at timeago" title="2012-07-11T14:19:38Z" data-bindattr-87="87"><script id="metamorph-89-start" type="text/x-placeholder"></script>2 months ago<script id="metamorph-89-end" type="text/x-placeholder"></script></abbr>
</p>
<span class="indicator"></span>
<script id="metamorph-90-start" type="text/x-placeholder"></script>
<div class="info">
<p class="description"><script id="metamorph-91-start" type="text/x-placeholder"></script>Layered GitHub API client<script id="metamorph-91-end" type="text/x-placeholder"></script></p>
</div>
<script id="metamorph-90-end" type="text/x-placeholder"></script>
<script id="metamorph-85-end" type="text/x-placeholder"></script>
</li><li id="ember1073" class="ember-view repository green">
<script id="metamorph-92-start" type="text/x-placeholder"></script>
<div class="slug-and-status">
<span class="status"></span>
<a href="/travis-ci/travis-support" data-bindattr-88="88" data-ember-action="89" class="slug"><script id="metamorph-93-start" type="text/x-placeholder"></script>travis-ci/travis-support<script id="metamorph-93-end" type="text/x-placeholder"></script></a>
</div>
<a href="/travis-ci/travis-support/builds/1827969" data-bindattr-90="90" data-ember-action="91" class="last_build"><script id="metamorph-94-start" type="text/x-placeholder"></script>145<script id="metamorph-94-end" type="text/x-placeholder"></script></a>
<p class="summary">
<span class="duration_label">Duration:</span>
<abbr class="duration" title="2012-07-10T17:03:10Z" data-bindattr-92="92"><script id="metamorph-95-start" type="text/x-placeholder"></script>16 min<script id="metamorph-95-end" type="text/x-placeholder"></script></abbr>,
<span class="finished_at_label">Finished:</span>
<abbr class="finished_at timeago" title="2012-07-10T17:05:17Z" data-bindattr-93="93"><script id="metamorph-96-start" type="text/x-placeholder"></script>2 months ago<script id="metamorph-96-end" type="text/x-placeholder"></script></abbr>
</p>
<span class="indicator"></span>
<script id="metamorph-97-start" type="text/x-placeholder"></script>
<div class="info">
<p class="description"><script id="metamorph-98-start" type="text/x-placeholder"></script>Support classes and extensions used in travis-ci<script id="metamorph-98-end" type="text/x-placeholder"></script></p>
</div>
<script id="metamorph-97-end" type="text/x-placeholder"></script>
<script id="metamorph-92-end" type="text/x-placeholder"></script>
</li><li id="ember1081" class="ember-view repository green">
<script id="metamorph-99-start" type="text/x-placeholder"></script>
<div class="slug-and-status">
<span class="status"></span>
<a href="/mattmatt/lograge" data-bindattr-94="94" data-ember-action="95" class="slug"><script id="metamorph-100-start" type="text/x-placeholder"></script>mattmatt/lograge<script id="metamorph-100-end" type="text/x-placeholder"></script></a>
</div>
<a href="/mattmatt/lograge/builds/1348710" data-bindattr-96="96" data-ember-action="97" class="last_build"><script id="metamorph-101-start" type="text/x-placeholder"></script>27<script id="metamorph-101-end" type="text/x-placeholder"></script></a>
<p class="summary">
<span class="duration_label">Duration:</span>
<abbr class="duration" title="2012-05-16T19:20:45Z" data-bindattr-98="98"><script id="metamorph-102-start" type="text/x-placeholder"></script>1 min 11 sec<script id="metamorph-102-end" type="text/x-placeholder"></script></abbr>,
<span class="finished_at_label">Finished:</span>
<abbr class="finished_at timeago" title="2012-05-16T19:21:22Z" data-bindattr-99="99"><script id="metamorph-103-start" type="text/x-placeholder"></script>4 months ago<script id="metamorph-103-end" type="text/x-placeholder"></script></abbr>
</p>
<span class="indicator"></span>
<script id="metamorph-104-start" type="text/x-placeholder"></script>
<div class="info">
<p class="description"><script id="metamorph-105-start" type="text/x-placeholder"></script>An attempt to tame Rails' default policy to log everything.<script id="metamorph-105-end" type="text/x-placeholder"></script></p>
</div>
<script id="metamorph-104-end" type="text/x-placeholder"></script>
<script id="metamorph-99-end" type="text/x-placeholder"></script>
</li><li id="ember1089" class="ember-view repository green">
<script id="metamorph-106-start" type="text/x-placeholder"></script>
<div class="slug-and-status">
<span class="status"></span>
<a href="/svenfuchs/gem-release" data-bindattr-100="100" data-ember-action="101" class="slug"><script id="metamorph-107-start" type="text/x-placeholder"></script>svenfuchs/gem-release<script id="metamorph-107-end" type="text/x-placeholder"></script></a>
</div>
<a href="/svenfuchs/gem-release/builds/1149382" data-bindattr-102="102" data-ember-action="103" class="last_build"><script id="metamorph-108-start" type="text/x-placeholder"></script>134<script id="metamorph-108-end" type="text/x-placeholder"></script></a>
<p class="summary">
<span class="duration_label">Duration:</span>
<abbr class="duration" title="2012-04-22T18:51:03Z" data-bindattr-104="104"><script id="metamorph-109-start" type="text/x-placeholder"></script>2 min 35 sec<script id="metamorph-109-end" type="text/x-placeholder"></script></abbr>,
<span class="finished_at_label">Finished:</span>
<abbr class="finished_at timeago" title="2012-04-22T18:51:59Z" data-bindattr-105="105"><script id="metamorph-110-start" type="text/x-placeholder"></script>5 months ago<script id="metamorph-110-end" type="text/x-placeholder"></script></abbr>
</p>
<span class="indicator"></span>
<script id="metamorph-111-start" type="text/x-placeholder"></script>
<div class="info">
<p class="description"><script id="metamorph-112-start" type="text/x-placeholder"></script>Release your ruby gems with ease. (What a bold statement for such a tiny plugin ...)<script id="metamorph-112-end" type="text/x-placeholder"></script></p>
</div>
<script id="metamorph-111-end" type="text/x-placeholder"></script>
<script id="metamorph-106-end" type="text/x-placeholder"></script>
</li><li id="ember1097" class="ember-view repository green">
<script id="metamorph-113-start" type="text/x-placeholder"></script>
<div class="slug-and-status">
<span class="status"></span>
<a href="/mattmatt/hurt_logger" data-bindattr-106="106" data-ember-action="107" class="slug"><script id="metamorph-114-start" type="text/x-placeholder"></script>mattmatt/hurt_logger<script id="metamorph-114-end" type="text/x-placeholder"></script></a>
</div>
<a href="/mattmatt/hurt_logger/builds/791653" data-bindattr-108="108" data-ember-action="109" class="last_build"><script id="metamorph-115-start" type="text/x-placeholder"></script>11<script id="metamorph-115-end" type="text/x-placeholder"></script></a>
<p class="summary">
<span class="duration_label">Duration:</span>
<abbr class="duration" title="2012-03-04T11:25:48Z" data-bindattr-110="110"><script id="metamorph-116-start" type="text/x-placeholder"></script>2 min 52 sec<script id="metamorph-116-end" type="text/x-placeholder"></script></abbr>,
<span class="finished_at_label">Finished:</span>
<abbr class="finished_at timeago" title="2012-03-04T11:27:21Z" data-bindattr-111="111"><script id="metamorph-117-start" type="text/x-placeholder"></script>6 months ago<script id="metamorph-117-end" type="text/x-placeholder"></script></abbr>
</p>
<span class="indicator"></span>
<script id="metamorph-118-start" type="text/x-placeholder"></script><script id="metamorph-118-end" type="text/x-placeholder"></script>
<script id="metamorph-113-end" type="text/x-placeholder"></script>
</li><li id="ember1105" class="ember-view repository green">
<script id="metamorph-119-start" type="text/x-placeholder"></script>
<div class="slug-and-status">
<span class="status"></span>
<a href="/svenfuchs/minimal" data-bindattr-112="112" data-ember-action="113" class="slug"><script id="metamorph-120-start" type="text/x-placeholder"></script>svenfuchs/minimal<script id="metamorph-120-end" type="text/x-placeholder"></script></a>
</div>
<a href="/svenfuchs/minimal/builds/747813" data-bindattr-114="114" data-ember-action="115" class="last_build"><script id="metamorph-121-start" type="text/x-placeholder"></script>78<script id="metamorph-121-end" type="text/x-placeholder"></script></a>
<p class="summary">
<span class="duration_label">Duration:</span>
<abbr class="duration" title="2012-02-27T00:09:43Z" data-bindattr-116="116"><script id="metamorph-122-start" type="text/x-placeholder"></script>3 min 10 sec<script id="metamorph-122-end" type="text/x-placeholder"></script></abbr>,
<span class="finished_at_label">Finished:</span>
<abbr class="finished_at timeago" title="2012-02-27T00:10:41Z" data-bindattr-117="117"><script id="metamorph-123-start" type="text/x-placeholder"></script>6 months ago<script id="metamorph-123-end" type="text/x-placeholder"></script></abbr>
</p>
<span class="indicator"></span>
<script id="metamorph-124-start" type="text/x-placeholder"></script>
<div class="info">
<p class="description"><script id="metamorph-125-start" type="text/x-placeholder"></script>Minimal templating engine inspired by Markaby &amp; Erector but much smaller and targeting Rails 3<script id="metamorph-125-end" type="text/x-placeholder"></script></p>
</div>
<script id="metamorph-124-end" type="text/x-placeholder"></script>
<script id="metamorph-119-end" type="text/x-placeholder"></script>
</li></ul>
</div>
</div></div>
</div>
<div id="main">
<div id="ember780" class="ember-view"><div id="ember666" class="ember-view"><div id="repository" class="" data-bindattr-20="20">
<script id="metamorph-1-start" type="text/x-placeholder"></script>
<script id="metamorph-48-start" type="text/x-placeholder"></script>
<h3>
<a href="http://github.com/travis-ci/travis-core" data-bindattr-32="32"><script id="metamorph-49-start" type="text/x-placeholder"></script>travis-ci/travis-core<script id="metamorph-49-end" type="text/x-placeholder"></script></a>
</h3>
<p class="description"><script id="metamorph-50-start" type="text/x-placeholder"></script>Models and classes shared by Travis hub and server<script id="metamorph-50-end" type="text/x-placeholder"></script></p>
<ul class="github-stats">
<li class="language">
<script id="metamorph-51-start" type="text/x-placeholder"></script><script id="metamorph-51-end" type="text/x-placeholder"></script>
</li>
<li>
<a class="watchers" title="Watchers" href="http://github.com/travis-ci/travis-core/watchers" data-bindattr-33="33">
<script id="metamorph-52-start" type="text/x-placeholder"></script>78<script id="metamorph-52-end" type="text/x-placeholder"></script>
</a>
</li>
<li>
<a class="forks" title="Forks" href="http://github.com/travis-ci/travis-core/network" data-bindattr-34="34">
<script id="metamorph-53-start" type="text/x-placeholder"></script>33<script id="metamorph-53-end" type="text/x-placeholder"></script>
</a>
</li>
</ul>
<div id="ember1152" class="ember-view"><ul class="tabs">
<li id="tab_current" class="active" data-bindattr-35="35">
<h5>
<a href="/travis-ci/travis-core" data-bindattr-36="36" data-ember-action="37">
Current
</a>
</h5>
</li>
<li id="tab_builds" class="" data-bindattr-38="38">
<h5>
<a href="/travis-ci/travis-core/builds" data-bindattr-39="39" data-ember-action="40">
Build History
</a>
</h5>
</li>
<li id="tab_pull_requests" class="" data-bindattr-41="41">
<h5>
<a href="/travis-ci/travis-core/pull_requests" data-bindattr-42="42" data-ember-action="43">
Pull Requests
</a>
</h5>
</li>
<li id="tab_branches" class="" data-bindattr-44="44">
<h5>
<a href="/travis-ci/travis-core/branches" data-bindattr-45="45" data-ember-action="46">
Branch Summary
</a>
</h5>
</li>
<li id="tab_build" class="" data-bindattr-47="47">
<h5>
<a href="/travis-ci/travis-core/builds/1905992" data-bindattr-48="48" data-ember-action="49">
Build <script id="metamorph-54-start" type="text/x-placeholder"></script>838<script id="metamorph-54-end" type="text/x-placeholder"></script>
</a>
</h5>
</li>
<li id="tab_job" class="" data-bindattr-50="50">
<h5>
<a href="/travis-ci/travis-core/jobs/undefined" data-bindattr-51="51" data-ember-action="52">
Job <script id="metamorph-55-start" type="text/x-placeholder"></script><script id="metamorph-55-end" type="text/x-placeholder"></script>
</a>
</h5>
</li>
</ul>
</div>
<div id="ember1190" class="ember-view"><div id="tools">
<a href="#" data-ember-action="53"></a>
<div class="pane">
<p>
<label>Branch:</label>
<script id="metamorph-56-start" type="text/x-placeholder"></script>
<span class="loading"></span>
<script id="metamorph-56-end" type="text/x-placeholder"></script>
</p>
<p>
<label>Image URL:</label>
<input type="text" class="url" value="https://secure.travis-ci.org/travis-ci/travis-core.png" data-bindattr-54="54">
</p>
<p>
<label>Markdown:</label>
<input type="text" class="markdown" value="[![Build Status](https://secure.travis-ci.org/travis-ci/travis-core.png)](https://localhost:3000/travis-ci/travis-core)" data-bindattr-55="55">
</p>
<p>
<label>Textile:</label>
<input type="text" class="textile" value="!https://secure.travis-ci.org/travis-ci/travis-core.png!:https://localhost:3000/travis-ci/travis-core" data-bindattr-56="56">
</p>
<p>
<label>RDOC:</label>
<input type="text" class="rdoc" value="{&lt;img src=&quot;https://secure.travis-ci.org/travis-ci/travis-core.png&quot; alt=&quot;Build Status&quot; /&gt;}[https://localhost:3000/travis-ci/travis-core]" data-bindattr-57="57">
</p>
</div>
</div>
</div>
<script id="metamorph-48-end" type="text/x-placeholder"></script>
<script id="metamorph-1-end" type="text/x-placeholder"></script>
<div class="tab">
<div id="ember789" class="ember-view"><div id="ember687" class="ember-view"><script id="metamorph-2-start" type="text/x-placeholder"></script>
<script id="metamorph-3-start" type="text/x-placeholder"></script>
<div id="build" class="red" data-bindattr-120="120">
<dl id="summary">
<div class="left">
<dt>Build</dt>
<dd class="number">
<span class="status"></span>
<a href="/travis-ci/travis-core/builds/1905992" data-bindattr-121="121" data-ember-action="122">
<script id="metamorph-129-start" type="text/x-placeholder"></script>838<script id="metamorph-129-end" type="text/x-placeholder"></script>
</a>
</dd>
<dt class="finished_at_label">Finished</dt>
<dd class="finished_at timeago" data-bindattr-123="123"><script id="metamorph-130-start" type="text/x-placeholder"></script>2 months ago<script id="metamorph-130-end" type="text/x-placeholder"></script></dd>
<dt>Duration</dt>
<dd class="duration" data-bindattr-124="124"><script id="metamorph-131-start" type="text/x-placeholder"></script>1 hr 5 min 38 sec<script id="metamorph-131-end" type="text/x-placeholder"></script></dd>
</div>
<div class="right">
<dt>Commit</dt>
<dd class="commit"><a href="http://github.com/travis-ci/travis-core/commit/42b82fb8fc99986c6d1999c8f39272a292731b4e" data-bindattr-125="125"><script id="metamorph-132-start" type="text/x-placeholder"></script>42b82fb (master)<script id="metamorph-132-end" type="text/x-placeholder"></script></a></dd>
<script id="metamorph-133-start" type="text/x-placeholder"></script>
<dt>Compare</dt>
<dd class="compare"><a href="https://github.com/travis-ci/travis-core/pull/81" data-bindattr-126="126"><script id="metamorph-134-start" type="text/x-placeholder"></script>81<script id="metamorph-134-end" type="text/x-placeholder"></script></a></dd>
<script id="metamorph-133-end" type="text/x-placeholder"></script>
<script id="metamorph-135-start" type="text/x-placeholder"></script>
<dt>Author</dt>
<dd class="author"><a href="mailto:narf@bofh.bg" data-bindattr-127="127"><script id="metamorph-136-start" type="text/x-placeholder"></script>Andrey Andreev<script id="metamorph-136-end" type="text/x-placeholder"></script></a></dd>
<script id="metamorph-135-end" type="text/x-placeholder"></script>
<script id="metamorph-137-start" type="text/x-placeholder"></script>
<dt>Committer</dt>
<dd class="committer"><a href="mailto:narf@bofh.bg" data-bindattr-128="128"><script id="metamorph-138-start" type="text/x-placeholder"></script>Andrey Andreev<script id="metamorph-138-end" type="text/x-placeholder"></script></a></dd>
<script id="metamorph-137-end" type="text/x-placeholder"></script>
</div>
<dt>Message</dt>
<dd class="message"><script id="metamorph-139-start" type="text/x-placeholder"></script>Fix issue #537 (branch names with slashes included)<br><script id="metamorph-139-end" type="text/x-placeholder"></script></dd>
<script id="metamorph-140-start" type="text/x-placeholder"></script>
<dt>Config</dt>
<dd class="config"><script id="metamorph-141-start" type="text/x-placeholder"></script>Rvm: 1.9.3, jruby-18mode, jruby-19mode, Jdk: openjdk6<script id="metamorph-141-end" type="text/x-placeholder"></script></dd>
<script id="metamorph-140-end" type="text/x-placeholder"></script>
</dl>
</div>
<script id="metamorph-142-start" type="text/x-placeholder"></script>
<div id="ember1595" class="ember-view"><script id="metamorph-143-start" type="text/x-placeholder"></script>
<script id="metamorph-144-start" type="text/x-placeholder"></script>
<table id="jobs" class="list">
<caption>
Build Matrix
</caption>
<script id="metamorph-144-end" type="text/x-placeholder"></script>
<thead>
<tr>
<script id="metamorph-150-start" type="text/x-placeholder"></script><script id="metamorph-145-start" type="text/x-placeholder"></script>
<th><script id="metamorph-151-start" type="text/x-placeholder"></script>Job<script id="metamorph-151-end" type="text/x-placeholder"></script></th>
<script id="metamorph-145-end" type="text/x-placeholder"></script><script id="metamorph-146-start" type="text/x-placeholder"></script>
<th><script id="metamorph-152-start" type="text/x-placeholder"></script>Duration<script id="metamorph-152-end" type="text/x-placeholder"></script></th>
<script id="metamorph-146-end" type="text/x-placeholder"></script><script id="metamorph-147-start" type="text/x-placeholder"></script>
<th><script id="metamorph-153-start" type="text/x-placeholder"></script>Finished<script id="metamorph-153-end" type="text/x-placeholder"></script></th>
<script id="metamorph-147-end" type="text/x-placeholder"></script><script id="metamorph-148-start" type="text/x-placeholder"></script>
<th><script id="metamorph-154-start" type="text/x-placeholder"></script>Rvm<script id="metamorph-154-end" type="text/x-placeholder"></script></th>
<script id="metamorph-148-end" type="text/x-placeholder"></script><script id="metamorph-149-start" type="text/x-placeholder"></script>
<th><script id="metamorph-155-start" type="text/x-placeholder"></script>Jdk<script id="metamorph-155-end" type="text/x-placeholder"></script></th>
<script id="metamorph-149-end" type="text/x-placeholder"></script><script id="metamorph-150-end" type="text/x-placeholder"></script>
</tr>
</thead>
<tbody>
<script id="metamorph-158-start" type="text/x-placeholder"></script><script id="metamorph-156-start" type="text/x-placeholder"></script>
<tr id="ember1636" class="ember-view green">
<td class="number">
<span class="status"></span>
<a href="/travis-ci/travis-core/jobs/1905993" data-bindattr-129="129" data-ember-action="130">
<script id="metamorph-159-start" type="text/x-placeholder"></script>838.1<script id="metamorph-159-end" type="text/x-placeholder"></script>
</a>
</td>
<td class="duration" title="2012-07-19T16:51:14Z" data-bindattr-131="131">
<script id="metamorph-160-start" type="text/x-placeholder"></script>1 min 54 sec<script id="metamorph-160-end" type="text/x-placeholder"></script>
</td>
<td class="finished_at timeago" title="2012-07-19T16:53:08Z" data-bindattr-132="132">
<script id="metamorph-161-start" type="text/x-placeholder"></script>2 months ago<script id="metamorph-161-end" type="text/x-placeholder"></script>
</td>
<script id="metamorph-165-start" type="text/x-placeholder"></script><script id="metamorph-162-start" type="text/x-placeholder"></script>
<td><script id="metamorph-166-start" type="text/x-placeholder"></script>1.9.3<script id="metamorph-166-end" type="text/x-placeholder"></script></td>
<script id="metamorph-162-end" type="text/x-placeholder"></script><script id="metamorph-163-start" type="text/x-placeholder"></script>
<td><script id="metamorph-167-start" type="text/x-placeholder"></script>openjdk6<script id="metamorph-167-end" type="text/x-placeholder"></script></td>
<script id="metamorph-163-end" type="text/x-placeholder"></script><script id="metamorph-164-start" type="text/x-placeholder"></script>
<td><script id="metamorph-168-start" type="text/x-placeholder"></script>PERL_CPANM_OPT="--mirror http://cpan.mirrors.travis-ci.org --mirror http://cpan.cpantesters.org/ --mirror http://search.cpan.org/CPAN --cascade-search --notest --force --skip-satisfied" ES="localhost:9200"<script id="metamorph-168-end" type="text/x-placeholder"></script></td>
<script id="metamorph-164-end" type="text/x-placeholder"></script><script id="metamorph-165-end" type="text/x-placeholder"></script>
</tr>
<script id="metamorph-156-end" type="text/x-placeholder"></script><script id="metamorph-157-start" type="text/x-placeholder"></script>
<tr id="ember1673" class="ember-view green">
<td class="number">
<span class="status"></span>
<a href="/travis-ci/travis-core/jobs/1905994" data-bindattr-133="133" data-ember-action="134">
<script id="metamorph-169-start" type="text/x-placeholder"></script>838.2<script id="metamorph-169-end" type="text/x-placeholder"></script>
</a>
</td>
<td class="duration" title="2012-07-19T16:51:14Z" data-bindattr-135="135">
<script id="metamorph-170-start" type="text/x-placeholder"></script>5 min 5 sec<script id="metamorph-170-end" type="text/x-placeholder"></script>
</td>
<td class="finished_at timeago" title="2012-07-19T16:56:19Z" data-bindattr-136="136">
<script id="metamorph-171-start" type="text/x-placeholder"></script>2 months ago<script id="metamorph-171-end" type="text/x-placeholder"></script>
</td>
<script id="metamorph-174-start" type="text/x-placeholder"></script><script id="metamorph-172-start" type="text/x-placeholder"></script>
<td><script id="metamorph-175-start" type="text/x-placeholder"></script>jruby-18mode<script id="metamorph-175-end" type="text/x-placeholder"></script></td>
<script id="metamorph-172-end" type="text/x-placeholder"></script><script id="metamorph-173-start" type="text/x-placeholder"></script>
<td><script id="metamorph-176-start" type="text/x-placeholder"></script>openjdk6<script id="metamorph-176-end" type="text/x-placeholder"></script></td>
<script id="metamorph-173-end" type="text/x-placeholder"></script><script id="metamorph-174-end" type="text/x-placeholder"></script>
</tr>
<script id="metamorph-157-end" type="text/x-placeholder"></script><script id="metamorph-158-end" type="text/x-placeholder"></script>
</tbody>
</table>
<script id="metamorph-177-start" type="text/x-placeholder"></script><script id="metamorph-177-end" type="text/x-placeholder"></script>
<script id="metamorph-143-end" type="text/x-placeholder"></script>
</div>
<div id="ember1713" class="ember-view"><script id="metamorph-178-start" type="text/x-placeholder"></script>
<script id="metamorph-179-start" type="text/x-placeholder"></script>
<table id="allowed_failure_jobs" class="list">
<caption>
Allowed Failures
<a title="What's this?" class="help" name="help-allowed_failures" data-ember-action="137"></a>
</caption>
<script id="metamorph-179-end" type="text/x-placeholder"></script>
<thead>
<tr>
<script id="metamorph-185-start" type="text/x-placeholder"></script><script id="metamorph-180-start" type="text/x-placeholder"></script>
<th><script id="metamorph-186-start" type="text/x-placeholder"></script>Job<script id="metamorph-186-end" type="text/x-placeholder"></script></th>
<script id="metamorph-180-end" type="text/x-placeholder"></script><script id="metamorph-181-start" type="text/x-placeholder"></script>
<th><script id="metamorph-187-start" type="text/x-placeholder"></script>Duration<script id="metamorph-187-end" type="text/x-placeholder"></script></th>
<script id="metamorph-181-end" type="text/x-placeholder"></script><script id="metamorph-182-start" type="text/x-placeholder"></script>
<th><script id="metamorph-188-start" type="text/x-placeholder"></script>Finished<script id="metamorph-188-end" type="text/x-placeholder"></script></th>
<script id="metamorph-182-end" type="text/x-placeholder"></script><script id="metamorph-183-start" type="text/x-placeholder"></script>
<th><script id="metamorph-189-start" type="text/x-placeholder"></script>Rvm<script id="metamorph-189-end" type="text/x-placeholder"></script></th>
<script id="metamorph-183-end" type="text/x-placeholder"></script><script id="metamorph-184-start" type="text/x-placeholder"></script>
<th><script id="metamorph-190-start" type="text/x-placeholder"></script>Jdk<script id="metamorph-190-end" type="text/x-placeholder"></script></th>
<script id="metamorph-184-end" type="text/x-placeholder"></script><script id="metamorph-185-end" type="text/x-placeholder"></script>
</tr>
</thead>
<tbody>
<script id="metamorph-194-start" type="text/x-placeholder"></script><script id="metamorph-191-start" type="text/x-placeholder"></script>
<tr id="ember1753" class="ember-view green">
<td class="number">
<span class="status"></span>
<a href="/travis-ci/travis-core/jobs/1905995" data-bindattr-138="138" data-ember-action="139">
<script id="metamorph-195-start" type="text/x-placeholder"></script>838.3<script id="metamorph-195-end" type="text/x-placeholder"></script>
</a>
</td>
<td class="duration" title="2012-07-19T16:51:14Z" data-bindattr-140="140">
<script id="metamorph-196-start" type="text/x-placeholder"></script>5 min 37 sec<script id="metamorph-196-end" type="text/x-placeholder"></script>
</td>
<td class="finished_at timeago" title="2012-07-19T16:56:51Z" data-bindattr-141="141">
<script id="metamorph-197-start" type="text/x-placeholder"></script>2 months ago<script id="metamorph-197-end" type="text/x-placeholder"></script>
</td>
<script id="metamorph-200-start" type="text/x-placeholder"></script><script id="metamorph-198-start" type="text/x-placeholder"></script>
<td><script id="metamorph-201-start" type="text/x-placeholder"></script>jruby-19mode<script id="metamorph-201-end" type="text/x-placeholder"></script></td>
<script id="metamorph-198-end" type="text/x-placeholder"></script><script id="metamorph-199-start" type="text/x-placeholder"></script>
<td><script id="metamorph-202-start" type="text/x-placeholder"></script>openjdk6<script id="metamorph-202-end" type="text/x-placeholder"></script></td>
<script id="metamorph-199-end" type="text/x-placeholder"></script><script id="metamorph-200-end" type="text/x-placeholder"></script>
</tr>
<script id="metamorph-191-end" type="text/x-placeholder"></script><script id="metamorph-192-start" type="text/x-placeholder"></script>
<tr id="ember1789" class="ember-view red">
<td class="number">
<span class="status"></span>
<a href="/travis-ci/travis-core/jobs/1905996" data-bindattr-142="142" data-ember-action="143">
<script id="metamorph-203-start" type="text/x-placeholder"></script>838.4<script id="metamorph-203-end" type="text/x-placeholder"></script>
</a>
</td>
<td class="duration" title="2012-07-19T16:51:14Z" data-bindattr-144="144">
<script id="metamorph-204-start" type="text/x-placeholder"></script>26 min 26 sec<script id="metamorph-204-end" type="text/x-placeholder"></script>
</td>
<td class="finished_at timeago" title="2012-07-19T17:17:40Z" data-bindattr-145="145">
<script id="metamorph-205-start" type="text/x-placeholder"></script>2 months ago<script id="metamorph-205-end" type="text/x-placeholder"></script>
</td>
<script id="metamorph-209-start" type="text/x-placeholder"></script><script id="metamorph-206-start" type="text/x-placeholder"></script>
<td><script id="metamorph-210-start" type="text/x-placeholder"></script>jruby-head<script id="metamorph-210-end" type="text/x-placeholder"></script></td>
<script id="metamorph-206-end" type="text/x-placeholder"></script><script id="metamorph-207-start" type="text/x-placeholder"></script>
<td><script id="metamorph-211-start" type="text/x-placeholder"></script>openjdk6<script id="metamorph-211-end" type="text/x-placeholder"></script></td>
<script id="metamorph-207-end" type="text/x-placeholder"></script><script id="metamorph-208-start" type="text/x-placeholder"></script>
<td><script id="metamorph-212-start" type="text/x-placeholder"></script>JRUBY_OPTS=--1.9<script id="metamorph-212-end" type="text/x-placeholder"></script></td>
<script id="metamorph-208-end" type="text/x-placeholder"></script><script id="metamorph-209-end" type="text/x-placeholder"></script>
</tr>
<script id="metamorph-192-end" type="text/x-placeholder"></script><script id="metamorph-193-start" type="text/x-placeholder"></script>
<tr id="ember1826" class="ember-view red">
<td class="number">
<span class="status"></span>
<a href="/travis-ci/travis-core/jobs/1905997" data-bindattr-146="146" data-ember-action="147">
<script id="metamorph-213-start" type="text/x-placeholder"></script>838.5<script id="metamorph-213-end" type="text/x-placeholder"></script>
</a>
</td>
<td class="duration" title="2012-07-19T16:51:14Z" data-bindattr-148="148">
<script id="metamorph-214-start" type="text/x-placeholder"></script>26 min 36 sec<script id="metamorph-214-end" type="text/x-placeholder"></script>
</td>
<td class="finished_at timeago" title="2012-07-19T17:17:50Z" data-bindattr-149="149">
<script id="metamorph-215-start" type="text/x-placeholder"></script>2 months ago<script id="metamorph-215-end" type="text/x-placeholder"></script>
</td>
<script id="metamorph-219-start" type="text/x-placeholder"></script><script id="metamorph-216-start" type="text/x-placeholder"></script>
<td><script id="metamorph-220-start" type="text/x-placeholder"></script>jruby-head<script id="metamorph-220-end" type="text/x-placeholder"></script></td>
<script id="metamorph-216-end" type="text/x-placeholder"></script><script id="metamorph-217-start" type="text/x-placeholder"></script>
<td><script id="metamorph-221-start" type="text/x-placeholder"></script>openjdk6<script id="metamorph-221-end" type="text/x-placeholder"></script></td>
<script id="metamorph-217-end" type="text/x-placeholder"></script><script id="metamorph-218-start" type="text/x-placeholder"></script>
<td><script id="metamorph-222-start" type="text/x-placeholder"></script>JRUBY_OPTS=--1.8<script id="metamorph-222-end" type="text/x-placeholder"></script></td>
<script id="metamorph-218-end" type="text/x-placeholder"></script><script id="metamorph-219-end" type="text/x-placeholder"></script>
</tr>
<script id="metamorph-193-end" type="text/x-placeholder"></script><script id="metamorph-194-end" type="text/x-placeholder"></script>
</tbody>
</table>
<script id="metamorph-223-start" type="text/x-placeholder"></script>
<div id="help-allowed_failures" class="popup">
<h4>Allowed Failures</h4>
<p>
Allowed Failures are items in your build matrix that are allowed to
fail without causing the entire build to be shown as failed.
</p>
<p>
You can define allowed failures in the build matrix as follows:
</p>
<pre>matrix:
allow_failures:
- rvm: ruby-head</pre>
<p>
This lets you add in experimental and preparatory builds to test against versions or
configurations that you are not ready to officially support.
</p>
</div>
<script id="metamorph-223-end" type="text/x-placeholder"></script>
<script id="metamorph-178-end" type="text/x-placeholder"></script>
</div>
<script id="metamorph-142-end" type="text/x-placeholder"></script>
<script id="metamorph-3-end" type="text/x-placeholder"></script>
<script id="metamorph-2-end" type="text/x-placeholder"></script>
</div></div>
</div>
</div>
</div></div>
</div>
<div id="right">
<div id="ember797" class="ember-view"><div id="ember670" class="ember-view"><a id="github" href="https://github.com/travis-ci" title="Fork me on GitHub">
Fork me on Github
</a>
<div id="slider" data-ember-action="21">
<div class="icon"></div>&nbsp;
</div>
<div id="ember804" class="ember-view"><div id="ember566" class="ember-view"><h4>Sponsors</h4>
<ul class="sponsors top">
<script id="metamorph-5-start" type="text/x-placeholder"></script><script id="metamorph-4-start" type="text/x-placeholder"></script>
<script id="metamorph-7-start" type="text/x-placeholder"></script><script id="metamorph-6-start" type="text/x-placeholder"></script>
<li class="platinum" data-bindattr-22="22">
<a href="http://xing.de" data-bindattr-23="23">
<img src="/images/sponsors/xing-205x130.png" data-bindattr-24="24">
</a>
</li>
<script id="metamorph-6-end" type="text/x-placeholder"></script><script id="metamorph-7-end" type="text/x-placeholder"></script>
<script id="metamorph-4-end" type="text/x-placeholder"></script><script id="metamorph-5-end" type="text/x-placeholder"></script>
</ul>
<p class="hint">
<a href="https://love.travis-ci.org/sponsors">
See all of our amazing sponsors →
</a>
</p>
</div></div>
<div id="ember838" class="ember-view"><div id="ember476" class="ember-view"><div id="ember841" class="ember-view">
<h4>
Workers
<a id="toggle-workers" data-ember-action="25"></a>
</h4>
<ul id="workers">
<script id="metamorph-9-start" type="text/x-placeholder"></script><script id="metamorph-8-start" type="text/x-placeholder"></script>
No workers
<script id="metamorph-8-end" type="text/x-placeholder"></script><script id="metamorph-9-end" type="text/x-placeholder"></script>
</ul>
</div>
</div></div>
<div id="ember863" class="ember-view"><div id="ember508" class="ember-view"><ul id="queues">
<script id="metamorph-16-start" type="text/x-placeholder"></script><script id="metamorph-10-start" type="text/x-placeholder"></script>
<li class="queue">
<h4>Queue: <script id="metamorph-17-start" type="text/x-placeholder"></script>Common<script id="metamorph-17-end" type="text/x-placeholder"></script></h4>
<ul id="queue_common" data-bindattr-26="26">
<script id="metamorph-19-start" type="text/x-placeholder"></script><script id="metamorph-126-start" type="text/x-placeholder"></script>
<div id="ember1489" class="ember-view">
<li>
<a href="/travis-ci/travis-ci-some-very-long-name/jobs/1906055" data-bindattr-118="118" data-ember-action="119">
<span class="slug">
<script id="metamorph-127-start" type="text/x-placeholder"></script>travis-ci/travis-ci-some-very-long-name<script id="metamorph-127-end" type="text/x-placeholder"></script>
</span>
#<script id="metamorph-128-start" type="text/x-placeholder"></script>1962.1<script id="metamorph-128-end" type="text/x-placeholder"></script>
</a>
</li>
</div>
<script id="metamorph-126-end" type="text/x-placeholder"></script><script id="metamorph-19-end" type="text/x-placeholder"></script>
</ul>
</li>
<script id="metamorph-10-end" type="text/x-placeholder"></script><script id="metamorph-11-start" type="text/x-placeholder"></script>
<li class="queue">
<h4>Queue: <script id="metamorph-20-start" type="text/x-placeholder"></script>PHP, Perl and Python<script id="metamorph-20-end" type="text/x-placeholder"></script></h4>
<ul id="queue_php" data-bindattr-27="27">
<script id="metamorph-22-start" type="text/x-placeholder"></script><script id="metamorph-21-start" type="text/x-placeholder"></script>
There are no jobs
<script id="metamorph-21-end" type="text/x-placeholder"></script><script id="metamorph-22-end" type="text/x-placeholder"></script>
</ul>
</li>
<script id="metamorph-11-end" type="text/x-placeholder"></script><script id="metamorph-12-start" type="text/x-placeholder"></script>
<li class="queue">
<h4>Queue: <script id="metamorph-23-start" type="text/x-placeholder"></script>Node.js<script id="metamorph-23-end" type="text/x-placeholder"></script></h4>
<ul id="queue_node_js" data-bindattr-28="28">
<script id="metamorph-25-start" type="text/x-placeholder"></script><script id="metamorph-24-start" type="text/x-placeholder"></script>
There are no jobs
<script id="metamorph-24-end" type="text/x-placeholder"></script><script id="metamorph-25-end" type="text/x-placeholder"></script>
</ul>
</li>
<script id="metamorph-12-end" type="text/x-placeholder"></script><script id="metamorph-13-start" type="text/x-placeholder"></script>
<li class="queue">
<h4>Queue: <script id="metamorph-26-start" type="text/x-placeholder"></script>JVM and Erlang<script id="metamorph-26-end" type="text/x-placeholder"></script></h4>
<ul id="queue_jvmotp" data-bindattr-29="29">
<script id="metamorph-28-start" type="text/x-placeholder"></script><script id="metamorph-27-start" type="text/x-placeholder"></script>
There are no jobs
<script id="metamorph-27-end" type="text/x-placeholder"></script><script id="metamorph-28-end" type="text/x-placeholder"></script>
</ul>
</li>
<script id="metamorph-13-end" type="text/x-placeholder"></script><script id="metamorph-14-start" type="text/x-placeholder"></script>
<li class="queue">
<h4>Queue: <script id="metamorph-29-start" type="text/x-placeholder"></script>Rails<script id="metamorph-29-end" type="text/x-placeholder"></script></h4>
<ul id="queue_rails" data-bindattr-30="30">
<script id="metamorph-31-start" type="text/x-placeholder"></script><script id="metamorph-30-start" type="text/x-placeholder"></script>
There are no jobs
<script id="metamorph-30-end" type="text/x-placeholder"></script><script id="metamorph-31-end" type="text/x-placeholder"></script>
</ul>
</li>
<script id="metamorph-14-end" type="text/x-placeholder"></script><script id="metamorph-15-start" type="text/x-placeholder"></script>
<li class="queue">
<h4>Queue: <script id="metamorph-32-start" type="text/x-placeholder"></script>Spree<script id="metamorph-32-end" type="text/x-placeholder"></script></h4>
<ul id="queue_spree" data-bindattr-31="31">
<script id="metamorph-34-start" type="text/x-placeholder"></script><script id="metamorph-33-start" type="text/x-placeholder"></script>
There are no jobs
<script id="metamorph-33-end" type="text/x-placeholder"></script><script id="metamorph-34-end" type="text/x-placeholder"></script>
</ul>
</li>
<script id="metamorph-15-end" type="text/x-placeholder"></script><script id="metamorph-16-end" type="text/x-placeholder"></script>
</ul>
</div></div>
<div id="ember969" class="ember-view"><div id="ember646" class="ember-view"><div class="box">
<h4>Sponsors</h4>
<ul class="sponsors bottom">
<script id="metamorph-41-start" type="text/x-placeholder"></script><script id="metamorph-35-start" type="text/x-placeholder"></script>
<li>
<script id="metamorph-42-start" type="text/x-placeholder"></script><a href="http://meltmedia.com">Meltmedia</a><span>: We are Interactive Superheroes</span><script id="metamorph-42-end" type="text/x-placeholder"></script>
</li>
<script id="metamorph-35-end" type="text/x-placeholder"></script><script id="metamorph-36-start" type="text/x-placeholder"></script>
<li>
<script id="metamorph-43-start" type="text/x-placeholder"></script><a href="http://malwarebytes.org">Malwarebytes</a><span>: Defeat Malware once and for all.</span><script id="metamorph-43-end" type="text/x-placeholder"></script>
</li>
<script id="metamorph-36-end" type="text/x-placeholder"></script><script id="metamorph-37-start" type="text/x-placeholder"></script>
<li>
<script id="metamorph-44-start" type="text/x-placeholder"></script><a href="http://coderwall.com/teams/4f27194e973bf000040005f0">ESM</a><span>: Japan's best agile Ruby/Rails consultancy</span><script id="metamorph-44-end" type="text/x-placeholder"></script>
</li>
<script id="metamorph-37-end" type="text/x-placeholder"></script><script id="metamorph-38-start" type="text/x-placeholder"></script>
<li>
<script id="metamorph-45-start" type="text/x-placeholder"></script><a href="http://agileanimal.com">AGiLE ANiMAL</a><span>: we &lt;3 Travis CI.</span><script id="metamorph-45-end" type="text/x-placeholder"></script>
</li>
<script id="metamorph-38-end" type="text/x-placeholder"></script><script id="metamorph-39-start" type="text/x-placeholder"></script>
<li>
<script id="metamorph-46-start" type="text/x-placeholder"></script><a href="http://www.engineyard.com">Engine Yard</a><span>: Build epic apps, let us handle the rest</span><script id="metamorph-46-end" type="text/x-placeholder"></script>
</li>
<script id="metamorph-39-end" type="text/x-placeholder"></script><script id="metamorph-40-start" type="text/x-placeholder"></script>
<li>
<script id="metamorph-47-start" type="text/x-placeholder"></script><a href="http://www.mdsol.com">Medidata</a><span>: clinical tech improving quality of life</span><script id="metamorph-47-end" type="text/x-placeholder"></script>
</li>
<script id="metamorph-40-end" type="text/x-placeholder"></script><script id="metamorph-41-end" type="text/x-placeholder"></script>
</ul>
<p class="hint">
<a href="https://love.travis-ci.org/sponsors">
See all of our amazing sponsors →
</a>
</p>
</div>
</div></div>
<div id="about" class="box">
<h4>Join us and help!</h4>
<ul>
<li>Repository: <a href="http://github.com/travis-ci">Github</a></li>
<li>Twitter: <a href="http://twitter.com/travisci">@travisci</a></li>
<li>Mailing List: <a href="http://groups.google.com/group/travis-ci">travis-ci</a></li>
<li><a href="irc://irc.freenode.net#travis">irc.freenode.net#travis</a></li>
</ul>
</div>
</div></div>
</div>
</div>
</div></div></div></body></html>

View File

@ -5,14 +5,10 @@
<meta rel="travis.api_endpoint" href="https://api.travis-ci.org">
<title>Travis CI - Distributed Continuous Integration Platform for the Open Source Community</title>
<link rel="stylesheet" href="/stylesheets/application.css">
<script src="/javascripts/vendor.js"></script>
<script src="/javascripts/application.js"></script>
<script>
// minispade.require('mocks')
minispade.require('app')
$(function() {
Travis.run()
});
</script>
</head>
<body id="home"></body>

File diff suppressed because one or more lines are too long

8459
public/javascripts/application.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,28 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="/stylesheets/application.css">
</head>
<body style="background: none">
<div id="page">
<div id="left">
content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content
content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content
content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content
content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content
content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content
content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content
content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content
content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content
content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content
content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content
</div>
<div id="main">
content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content
</div>
<div id="right">
content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content content
</div>
</div>
</body>
</html>

View File

@ -1,29 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Travis CI - Distributed Continuous Integration Platform for the Open Source Community</title>
<link rel="stylesheet" href="/stylesheets/application.css">
<link rel="stylesheet" href="/stylesheets/jasmine.css">
<script src="/javascripts/vendor.js"></script>
<script src="/javascripts/application.js"></script>
<script src="/javascripts/specs/vendor.js"></script>
<script src="/javascripts/specs/specs.js"></script>
</head>
<body>
<script>
window.cachedSearch = window.location.search;
minispade.require('mocks')
for(key in minispade.modules)
if(key.match(/_spec$/))
minispade.require(key);
var console_reporter = new jasmine.ConsoleReporter();
jasmine.getEnv().addReporter(new jasmine.HtmlReporter());
jasmine.getEnv().addReporter(console_reporter);
jasmine.getEnv().execute();
</script>
</body>
</html>

View File

@ -1,135 +0,0 @@
{
"platinum": [
{
"url": "http://www.wooga.com",
"image": "wooga-205x130.png"
},
{
"url": "http://bendyworks.com",
"image": "bendyworks-205x130.png"
},
{
"url": "http://cloudcontrol.com",
"image": "cloudcontrol-205x130.png"
},
{
"url": "http://xing.de",
"image": "xing-205x130.png"
}
],
"gold": [
{
"url": "http://heroku.com",
"image": "heroku-205x60.png"
},
{
"url": "http://soundcloud.com",
"image": "soundcloud-205x60.png"
},
{
"url": "http://nedap.com",
"image": "nedap-205x60.png"
},
{
"url": "http://mongohq.com",
"image": "mongohq-205x60.png"
},
{
"url": "http://zweitag.de",
"image": "zweitag-205x60.png"
},
{
"url": "http://kanbanery.com",
"image": "kanbanery-205x60.png"
},
{
"url": "http://ticketevolution.com",
"image": "ticketevolution-205x60.jpg"
},
{
"url": "http://plan.io/travis",
"image": "planio-205x60.png"
}
],
"silver": [
{
"link": "<a href=\"http://cobot.me\">Cobot</a><span>: The one tool to run your coworking space</span>"
},
{
"link": "<a href=\"http://jumpstartlab.com\">JumpstartLab</a><span>: We build developers</span>"
},
{
"link": "<a href=\"http://evilmartians.com\">Evil Martians</a><span>: Agile Ruby on Rails development</span>"
},
{
"link": "<a href=\"http://zendesk.com\">Zendesk</a><span>: Love your helpdesk</span>"
},
{
"link": "<a href=\"http://stripe.com\">Stripe</a><span>: Payments for developers</span>"
},
{
"link": "<a href=\"http://basho.com\">Basho</a><span>: We make Riak!</span>"
},
{
"link": "<a href=\"http://thinkrelevance.com\">Relevance</a><span>: We deliver software solutions</span>"
},
{
"link": "<a href=\"http://mindmatters.de\">Mindmatters</a><span>: Software für Menschen</span>"
},
{
"link": "<a href=\"http://amenhq.com\">Amen</a><span>: The best and worst of everything</span>"
},
{
"link": "<a href=\"http://site5.com\">Site5</a><span>: Premium Web Hosting Solutions</span>"
},
{
"link": "<a href=\"http://www.crowdint.com\">Crowd Interactive</a><span>: Leading Rails consultancy in Mexico</span>"
},
{
"link": "<a href=\"http://www.atomicobject.com/detroit\">Atomic Object</a><span>: Work with really smart people</span>"
},
{
"link": "<a href=\"http://codeminer.com.br\">Codeminer</a><span>: smart services for your startup</span>"
},
{
"link": "<a href=\"http://cloudant.com\">Cloudant</a><span>: grow into your data layer, not out of it</span>"
},
{
"link": "<a href=\"http://gidsy.com\">Gidsy</a><span>: Explore, organize &amp; book unique things to do!</span>"
},
{
"link": "<a href=\"http://5apps.com\">5apps</a><span>: Package &amp; deploy HTML5 apps automatically</span>"
},
{
"link": "<a href=\"http://meltmedia.com\">Meltmedia</a><span>: We are Interactive Superheroes</span>"
},
{
"link": "<a href=\"http://www.fngtps.com\">Fingertips</a><span> offers design and development services</span>"
},
{
"link": "<a href=\"http://www.fngtps.com\">Engine Yard</a><span>: Build epic apps, let us handle the rest</span>"
},
{
"link": "<a href=\"http://malwarebytes.org\">Malwarebytes</a><span>: Defeat Malware once and for all.</span>"
},
{
"link": "<a href=\"http://readmill.com\">Readmill</a><span>: The best reading app on the iPad.</span>"
},
{
"link": "<a href=\"http://www.mdsol.com\">Medidata</a><span>: clinical tech improving quality of life</span>"
},
{
"link": "<a href=\"http://coderwall.com/teams/4f27194e973bf000040005f0\">ESM</a><span>: Japan's best agile Ruby/Rails consultancy</span>"
},
{
"link": "<a href=\"http://twitter.com\">Twitter</a><span>: instantly connects people everywhere</span>"
},
{
"link": "<a href=\"http://agileanimal.com\">AGiLE ANiMAL</a><span>: we <3 Travis CI.</span>"
},
{
"link": "<a href=\"http://tupalo.com\">Tupalo</a><span>: Discover, review &amp; share local businesses.</span>"
}
]
}

File diff suppressed because it is too large Load Diff