Authorize cookbook uploads and associate owners

This ensures that the authenticated user is authorized to upload new
versions of a cookbook. If it's the first time the cookbook is being
uploaded the authenticated user is associated with the cookbook as the
owner.
Error messages must be an array.

Knife currently expects any returned error messages to be within an
array. So while most of these cases there is only one error message we
must return it within an array to maintain backwards compatability with
knife.
Use separate errors for cookbook create/destroy authorization

Knife expects any unauthorized destroy action to return a empty body and
a 403 response whereas cookbook create expects a body with an error code
and error messages and a 400 response. This accounts for the differences
between how each action should respond when authorization fails.
Display a cookbook's owner as its maintainer

A cookbook's metadata.rb allows cookbook authors to specify maintainer
name and email address. The community site API does not use those values
as the cookbook's maintainer attribute, and instead shows the username
of the owner of the cookbook.
Merge pull request #343 from opscode/owner-is-maintainer

Display a cookbook's owner as its maintainer
Update Foundation to 5.2.2

In order to take advantage of some of Foundations newer features this
updates Foundation and its JS dependencies to 5.2.2. This also moves
_settings out of vendor as it contains project specific overrides and
shouldn't be overwritten everytime we update foundation.
Ensure cookbook listing columns are equal height

This takes advantage of Foundation equalizer to ensure that the columns
in a cookbook listing are of equal height.
Don't use abide alpha_numeric for CLA fields

The abide alpha_numeric pattern doesn't allow spaces which is undesired
behavior for the CLA fields. This didn't seem to be the case in previous
versions of Foundation but it does seem to be the desired behavior
(there was a bug filed surrounding this issue). We can add stricter
pattern matching in the future but just ensuring that required
fields are filled out feels like enough.
Handle pg search ordering bug for cookbooks search

There appears to be an issue with the pg search gem
https://github.com/Casecommons/pg_search/issues/129 that breaks ordering
after a search has been performed. This changes the controller flow so
ordering is done before searching and also adds a spec originally used
to reproduce the bug but seems handy to keep around in case pg search
misbehaves again.
Resolve Foundation namespace bug

Foundation 5.2.2 has a bug where it sets the namespace to Times New
Roman which causes some issues with Foundation JS. The issue has been
resolved in Foundation master but this adds a temporary fix until the
fix for the issue has been released.
Merge pull request #347 from opscode/search-ordering

Handle pg search ordering bug for cookbooks search
Paperclip uses backwards-compatible URLs

While the true test is a production application which does not generate
backwards-incompatible URLs, we configure Paperclip so that it generates
nearly-identically formed URLs outside of production.
Add spec to ensure collaborator uploads don't change owner

This adds a spec that ensures when a cookbook collaborator uploads a new
version of a cookbook that the original owner of that cookbook doesn't
change.
Merge pull request #348 from opscode/backwards-compatible-paperclip

Paperclip uses backwards-compatible URLs
Merge pull request #333 from opscode/api-ownership

Authorize cookbook uploads and associate owners
Cookbook maintainers can add and remove collaborators from the show view
Merge pull request #327 from opscode/maintainer-fixes

Fixing some bugs with cookbook ownership and collaborators
Merge pull request #346 from opscode/update-foundation

Update Foundation, equal height cookbook columns
Add the Supermarket Beta banner.

The Supermarket Beta banner is a global drop down that contains information
surrounding the Supermarket Beta. This banner will only be around until the Beta
ends.

The content contains two key pieces that are displayed side-by-side:

- what users should expect
- how users can get involved

The banner features a slide toggle when pressed and emulates the look and feel
of buttons throughout the application. On mobile, the two pieces of content
collapse into one stacked column.