# angularjs-rails-cdn
[![Gem Version](https://badge.fury.io/rb/angularjs-rails-cdn.png)](https://badge.fury.io/rb/angularjs-rails-cdn)
[![Build Status](https://secure.travis-ci.org/styx/angularjs-rails-cdn.png?branch=master)](https://travis-ci.org/styx/angularjs-rails-cdn)
[![Dependency Status](https://gemnasium.com/styx/angularjs-rails-cdn.png)](https://gemnasium.com/styx/angularjs-rails-cdn)
[![Code Climate](https://codeclimate.com/github/styx/angularjs-rails-cdn.png)](https://github.com/styx/angularjs-rails-cdn)
[![Coverage Status](https://coveralls.io/repos/styx/angularjs-rails-cdn/badge.png?branch=master)](https://coveralls.io/r/styx/angularjs-rails-cdn)
Adds CDN support to
* [angularjs-rails](https://github.com/hiravgandhi/angularjs-rails).
Serving javascripts and stylesheets from a publicly available [CDN](http://en.wikipedia.org/wiki/Content_Delivery_Network) has clear benefits:
* **Speed**: Users will be able to download AngularJS from the closest physical location.
* **Caching**: CDN is used so widely that potentially your users may not
need to download AngularJS and others at all.
* **Parallelism**: Browsers have a limitation on how many connections
can be made to a single host. Using CDN for AngularJS offloads a big one.
## Features
This gem offers the following features:
* Can support multiple CDNs, but currently only Google provider is
available.
* AngularJS version is automatically detected via angularjs-rails
(can be overriden).
* Automatically fallback to angularjs-rails bundled AngularJS when:
* You're on a development environment so that you can work offline.
* The CDN is down or unavailable.
Implications of externalizing AngularJS from `application.js` are:
* Updating your JS code won't evict the entire cache in browsers - your
code changes more often than AngularJS upgrades, right?
* `rake assets:precompile` takes less peak memory usage.
Changelog:
* v0.1.4: Clean up and missing specs
* v0.1.3: Be a bit more html_safe
* v0.1.2: Specified license in spec file
* v0.1.1: Pass options to javascript_include_tag
* v0.1.0: Initial release
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'angularjs-rails-cdn'
```
## Usage
This gem adds methods to generate a script tag to the AngularJS on a CDN of your preference:
`angularjs_include_tag` and `angularjs_url`
If you're using assets pipeline with Rails 3.1+, first remove `//= require angular` (or other special files if you are using not full version) from `application.js`.
Then in layout:
```ruby
= angularjs_include_tag :google
= javascript_include_tag 'application'
```
Other possible usages:
```ruby
# To override version
= angularjs_include_tag :google, version: '1.1.5'
# To load additional AngularJS modules
= angularjs_include_tag :google, modules: [:resources,
:cookies]
```
Note: currently only valid CDN symbols is:
```ruby
:google
```
It will generate the following for AngularJS on production:
```html
```
on development:
```html
```
If you want to check the production URL, you can pass `force: true` as an option.
```ruby
angularjs_include_tag :google, force: true
```
To fallback to rails assets when CDN is not available, add `angular.js` in `config/environments/production.rb`
```ruby
config.assets.precompile += %w( angular.js )
```