master 708f1848030a cached
85 files
49.0 KB
14.9k tokens
10 symbols
1 requests
Download .txt
Repository: vigetlabs/gulp-rails-pipeline
Branch: master
Commit: 708f1848030a
Files: 85
Total size: 49.0 KB

Directory structure:
gitextract_iggfzwf1/

├── .buildpacks
├── .gitignore
├── .ruby-version
├── Gemfile
├── LICENSE.txt
├── README.md
├── Rakefile
├── app/
│   ├── .gitignore
│   ├── assets/
│   │   ├── javascripts/
│   │   │   └── application.js
│   │   └── stylesheets/
│   │       └── application.css
│   ├── controllers/
│   │   ├── application_controller.rb
│   │   ├── concerns/
│   │   │   └── .keep
│   │   └── welcome_controller.rb
│   ├── helpers/
│   │   ├── application_helper.rb
│   │   └── welcome_helper.rb
│   ├── mailers/
│   │   └── .keep
│   ├── models/
│   │   ├── .keep
│   │   └── concerns/
│   │       └── .keep
│   └── views/
│       ├── layouts/
│       │   └── application.html.erb
│       └── welcome/
│           └── index.html.erb
├── bin/
│   ├── bundle
│   ├── rails
│   ├── rake
│   ├── setup
│   └── spring
├── config/
│   ├── application.rb
│   ├── boot.rb
│   ├── database.yml
│   ├── environment.rb
│   ├── environments/
│   │   ├── development.rb
│   │   ├── production.rb
│   │   └── test.rb
│   ├── initializers/
│   │   ├── assets.rb
│   │   ├── backtrace_silencers.rb
│   │   ├── cookies_serializer.rb
│   │   ├── filter_parameter_logging.rb
│   │   ├── inflections.rb
│   │   ├── mime_types.rb
│   │   ├── rev_manifest.rb
│   │   ├── session_store.rb
│   │   └── wrap_parameters.rb
│   ├── locales/
│   │   └── en.yml
│   └── routes.rb
├── config.ru
├── db/
│   └── seeds.rb
├── gulp/
│   ├── assets/
│   │   ├── javascripts/
│   │   │   ├── global.coffee
│   │   │   └── message.js
│   │   └── stylesheets/
│   │       ├── base/
│   │       │   └── _iconFont.sass
│   │       └── global.sass
│   ├── config.js
│   ├── tasks/
│   │   ├── browserSync.js
│   │   ├── browserify.js
│   │   ├── build.js
│   │   ├── clean.js
│   │   ├── default.js
│   │   ├── iconFont/
│   │   │   ├── generateIconSass.js
│   │   │   ├── index.js
│   │   │   └── template.sass
│   │   ├── images.js
│   │   ├── rev/
│   │   │   ├── index.js
│   │   │   ├── rev-assets.js
│   │   │   └── rev-font-workaround.js
│   │   ├── sass.js
│   │   ├── watch.js
│   │   └── watchify.js
│   └── util/
│       ├── bundleLogger.js
│       └── handleErrors.js
├── gulpfile.js
├── lib/
│   ├── assets/
│   │   └── .keep
│   └── tasks/
│       └── .keep
├── package.json
├── public/
│   ├── 404.html
│   ├── 422.html
│   ├── 500.html
│   └── robots.txt
├── test/
│   ├── controllers/
│   │   ├── .keep
│   │   └── welcome_controller_test.rb
│   ├── fixtures/
│   │   └── .keep
│   ├── helpers/
│   │   └── .keep
│   ├── integration/
│   │   └── .keep
│   ├── mailers/
│   │   └── .keep
│   ├── models/
│   │   └── .keep
│   └── test_helper.rb
└── vendor/
    └── assets/
        ├── javascripts/
        │   └── .keep
        └── stylesheets/
            └── .keep

================================================
FILE CONTENTS
================================================

================================================
FILE: .buildpacks
================================================
https://github.com/heroku/heroku-buildpack-nodejs.git
https://github.com/heroku/heroku-buildpack-ruby.git

================================================
FILE: .gitignore
================================================
# From https://github.com/github/gitignore
*.rbc
capybara-*.html
.rspec
/log
/tmp
/db/*.sqlite3
/db/*.sqlite3-journal
/public/system
/coverage/
/spec/tmp
/node_modules
/app/assets/*/compiled/
/public/assets/*

**.orig
rerun.txt
pickle-email-*.html

# TODO Comment out these rules if you are OK with secrets being uploaded to the repo
config/initializers/secret_token.rb
config/secrets.yml

## Environment normalisation:
/.bundle
/vendor/bundle

# these should all be checked in to normalise the environment:
# Gemfile.lock, .ruby-version, .ruby-gemset

# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
.rvmrc

# if using bower-rails ignore default bower_components path bower.json files
/vendor/assets/bower_components
*.bowerrc
bower.json

# Ignore pow environment settings
.powenv


================================================
FILE: .ruby-version
================================================
2.1.4


================================================
FILE: Gemfile
================================================
source 'https://rubygems.org'

gem 'rails', '4.2.0'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'sqlite3', group: :development
gem 'pg', group: :production # For heroku


================================================
FILE: LICENSE.txt
================================================
The MIT License (MIT)

Copyright (c) 2015 Viget Labs

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


================================================
FILE: README.md
================================================
# DEPRECATED: [Use Blendid!](https://github.com/vigetlabs/blendid)

The work done in this repo has been rolled into a single dependency solution: [Blendid!](https://github.com/vigetlabs/blendid). You can set up your Rails project with the `yarn run blendid -- init-rails` command.


# The Gulp Asset Pipeline on Rails
- **Leaves Sprockets and manifest files intact** for use with gem installed assets
- Transform and bundle CommonJS modules (js or coffee) with Browserify
- Compile .sass/.scss with Libsass (node-sass through gulp-sass)
- Autoprefix css
- Optimize images (could be expanded to further process or resize images)
- Compile an icon font + sass from a folder of SVGs
- Full BrowserSync integration (the original Rails Asset Pipeline didn't work with live stylesheet injection)
- Revision filenames in production for caching
- Build assets on deploy with Heroku

[Production Environment Demo](https://gulp-rails-pipeline.herokuapp.com/) _(notice the revisioned asset filenames for caching)_

**This repo is only meant to be an example.** You should fork and customize it with your own Rails setup and relevant Gulp tasks, or copy the relevant files into an existing project. To understand more about individual modules, read the documentation on their respective websites and repositories. Based on [gulp-starter](https://github.com/vigetlabs/gulp-starter).

## Running the Demo
Clone the repository
```
git clone https://github.com/vigetlabs/gulp-rails-pipeline.git
```

Enter into the directory and run bundle install
```
cd gulp-rails-pipeline
bundle install
```

Install javascript dependencies. Once npm install runs, the `postinstall` setting in `package.json` will run `gulp build` and do an initial build of your assets.
```
npm install
```

Start the rails server.
```
rails s
```

Run gulp and rejoice! This will start watching and recompiling files on the fly, as well as open a browser with BrowserSync running.
```
gulp
```

Try editing `global.sass` and watch how fast it reloads the css! Once you taste the speed of Libsass + BrowserSync, you'll never go back. Test out changing view code and javascript as well.

## Asset File Structure
![Asset File Structure](file-structure.png)
### gulp/assets
This is where all your source files will live. Your source icons for icon fonts, sass files, js modules, and images. Anything that needs to get processed by Gulp. All assets are set up to compile to `public/assets`.

### public/assets
The destination of your compiled and processed assets. The `application.css` and `application.js` manifest files in `app/assets` pull compiled code from this folder.

### app/assets
The old default asset directory should only include manifest files, which are necessary if you need to require gem installed assets (e.g., jquery_ujs, turbolinks) with Sprockets. The manifest files pull in gem assets, as well as our compiled js and css files from `/public/assets`.

## Rails setup notes:

### config/application.rb
```rb
# Make public assets requireable in manifest files
config.assets.paths << Rails.root.join("public", "assets", "stylesheets")
config.assets.paths << Rails.root.join("public", "assets", "javascripts")
```
If you plan on continuing to use Sprockets to `//require=` gem assets, you'll include your compiled js and css files in the `application.js` and `application.css` manifests files. The snippet above tells Sprockets to look in our `public/assets` directories when searching for required files. With this implementation, you'll continue using the Rails `javascript_include_tag` and `stylesheet_link_tag` asset pipeline helpers to pull in your manifest files (and everything they require). If you end up *not* needing the pipeline at all, you can pull in your compiled css and js directly with the `gulp_asset_path` helper (see below) and regular html.

### config/environments/development.rb
```rb
config.assets.debug = true
config.assets.digest = false
```
To fully take advantage of BrowserSync's live stylesheet injection, be sure to configure the two values above. Setting `config.assets.debug` to `true` tells Rails to output each individual file required in your `application.js` and `application.css` manifests, rather than concatenating them. This is the default setting in development. Setting `config.assets.digest` to `false` disables appending md5 hashes for caching with future `Expires` headers. With your individual files referenced and their file names unchanged, BrowserSync can reference and replace them properly as they get changed.

### package.json
```json
"scripts": {
  "postinstall": "gulp build"
},
"dependencies": {...}
```
After running `npm install`, Node will search the `scripts` object in `package.json` for `postinstall`, and will run the script if specified. `gulp build` compiles your assets. The build can be set up differently for different Rails environments. See below. A note about `dependencies`. Services like Heroku will ignore anything in `devDependences`, since it's technically a production environment. So be sure to put anything your build process needs to run in `dependencies`, NOT `devDependencies.`

### gulp/tasks/build.js
```js
// line 6
if(process.env.RAILS_ENV === 'production') tasks.push('rev');
```
If the RAILS_ENV is set to `production`, assets will be renamed with an appended md5 hash for caching with far future `Expires` headers, and any references in stylesheets or javascript files will be updated accordingly. For inline asset references in Rails Views, you can use the following asset helper.

### app/helpers/application_helper.rb
```rb
def gulp_asset_path(path)
  path = REV_MANIFEST[path] if defined?(REV_MANIFEST)
  "/assets/#{path}"
end
```
Because we're storing our assets outside of the Rails Asset Pipeline, we need to re-implement the `asset_path` path helper as `gulp_asset_path` to reference un-hashed files in `development`, and the cacheable hashed versions of the files in `production`. This goes for other Rails Asset Pipeline helpers, such as `<%= image_tag, 'asset.png' %>`. Instead, use `<img src="<%= gulp_asset_path('asset.png') %>">`.

### config/initializers/rev_manifest.rb
```rb
rev_manifest_path = 'public/assets/rev-manifest.json'

if File.exist?(rev_manifest_path)
  REV_MANIFEST = JSON.parse(File.read(rev_manifest_path))
end
```

You'll notice this constant referenced in the `gulp_asset_path` helper above. The `gulp/tasks/rev.js` that gets run in production outputs a `rev-manifest.json` file, mapping the original filenames to the revisioned ones. If that file exists when the app starts, the hashed filenames are used. If it doesn't exist, the filename references remain unchanged.

## Deploying
To avoid git messiness and redundant rebases and merge conflicts, it's usually a good idea to `.gitignore` your compiled assets. This means you'll have to have them compile as part of your deploy process. In short, you'll need to ensure the following:

1. Node is installed
2. `npm install` runs
3. `gulp build` runs on `postinstall` (specified in package.json)

These steps must complete **before** starting the Rails server.

### Heroku
Heroku makes deploying SUPER easy, but there are a couple of things you'll need to do to get this running.

Since we're using Ruby (to run Rails) AND Node (to compile our assets with Gulp) in our setup, we need both running on our server. Heroku will automatically detect ONE of these at a time based on the presense of a `Gemfile` or `package.json`, but to get both running simultaneously, we need to [specify multiple buildpacks](https://devcenter.heroku.com/articles/using-multiple-buildpacks-for-an-app) in the order we want.

```bash
heroku buildpacks                     # view current buildpacks
heroku buildpacks:clear               # clear current buildpacks, if necessary
heroku buildpacks:add heroku/nodejs   # add the buildpacks we want ...
heroku buildpacks:add heroku/ruby     # ... in the order we want them
```

Now, when we deploy to Heroku, first `npm install` will run, then our `postinstall` script specified in `package.json`, and then `bundle install` will run.

Take note of the following:
```rb
  #production.rb line 25
  config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
```
Heroku requires `config.serve_static_files` to be enabled, so be sure to either add `RAILS_SERVE_STATIC_FILES` as a config var in your Heroku settings, or manually set this to true in your `production.rb` file.

### Capistrano

All we need to do is add a task to run `npm install` before we compile the assets.

The example below shows an example of using [nvm](https://github.com/creationix/nvm) (node version manager) to use the specified node version for your application.

```rb
# ./config/deploy.rb

before "deploy:assets:precompile", "deploy:npm_install"

namespace :deploy do
  desc "Run npm install"
  task :npm_install do
    invoke_command "bash -c '. /home/deploy/.nvm/nvm.sh && cd #{release_path} && npm install'"
  end
end
```

---
Original Blog Post: [viget.com/extend/gulp-rails-asset-pipeline](http://viget.com/extend/gulp-rails-asset-pipeline)

***

<a href="http://code.viget.com">
  <img src="http://code.viget.com/github-banner.png" alt="Code At Viget">
</a>

Visit [code.viget.com](http://code.viget.com) to see more projects from [Viget.](https://viget.com)


================================================
FILE: Rakefile
================================================
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.

require File.expand_path('../config/application', __FILE__)

Rails.application.load_tasks


================================================
FILE: app/.gitignore
================================================
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
#
# If you find yourself ignoring temporary files generated by your text editor
# or operating system, you probably want to add a global ignore instead:
#   git config --global core.excludesfile '~/.gitignore_global'

# Ignore bundler config.
/.bundle

# Ignore the default SQLite database.
/db/*.sqlite3
/db/*.sqlite3-journal

# Ignore all logfiles and tempfiles.
/log/*
!/log/.keep
/tmp


================================================
FILE: app/assets/javascripts/application.js
================================================
// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Only include gem installed javascript assets here. All other js develoment should use Common JS
// and will be compiled with Gulp and Browserify
//
//= require jquery
//= require jquery_ujs
//= require turbolinks
//
// Pull compiled from /public/assets/javascripts
//= require global


================================================
FILE: app/assets/stylesheets/application.css
================================================
/*
 * This is a manifest file that'll be compiled into application.css, which will include all the files
 * listed below.
 *
 * Use this file to include any stylesheet assets from installed gems. All other css is compiled with
 * libsass with Gulp.
 *
 * Pull compiled from /public/assets/stylesheets
 *= require global
 */


================================================
FILE: app/controllers/application_controller.rb
================================================
class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
end


================================================
FILE: app/controllers/concerns/.keep
================================================


================================================
FILE: app/controllers/welcome_controller.rb
================================================
class WelcomeController < ApplicationController
  def index
  end
end


================================================
FILE: app/helpers/application_helper.rb
================================================
module ApplicationHelper
  def gulp_asset_path(path)
    path = REV_MANIFEST[path] if defined?(REV_MANIFEST)
    "/assets/#{path}"
  end
end


================================================
FILE: app/helpers/welcome_helper.rb
================================================
module WelcomeHelper
end


================================================
FILE: app/mailers/.keep
================================================


================================================
FILE: app/models/.keep
================================================


================================================
FILE: app/models/concerns/.keep
================================================


================================================
FILE: app/views/layouts/application.html.erb
================================================
<!DOCTYPE html>
<html>
<head>
  <title>App</title>
  <%= stylesheet_link_tag 'application' %>
  <%= javascript_include_tag 'application' %>
  <%= csrf_meta_tags %>
</head>
<body>

<%= yield %>

</body>
</html>


================================================
FILE: app/views/welcome/index.html.erb
================================================
<h1>Gulp Asset Pipeline on Rails</h1>
<img src="<%= gulp_asset_path('images/gulp.png') %>" alt="">
<p><a href="https://github.com/vigetlabs/gulp-rails-pipeline">Ditch the Rails Asset Pipeline and roll your own with Gulp.</a></p>
<p>
  <a href="https://www.facebook.com/vigetlabs" class="icon -facebook"></a>
  <a href="https://twitter.com/viget" class="icon -twitter"></a>
  &lt;-- generated icon font
</p>
<p>Made with ♥ at <a href="http://viget.com">Viget</a></p>


================================================
FILE: bin/bundle
================================================
#!/usr/bin/env ruby
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
load Gem.bin_path('bundler', 'bundle')


================================================
FILE: bin/rails
================================================
#!/usr/bin/env ruby
begin
  load File.expand_path("../spring", __FILE__)
rescue LoadError
end
APP_PATH = File.expand_path('../../config/application', __FILE__)
require_relative '../config/boot'
require 'rails/commands'


================================================
FILE: bin/rake
================================================
#!/usr/bin/env ruby
begin
  load File.expand_path("../spring", __FILE__)
rescue LoadError
end
require_relative '../config/boot'
require 'rake'
Rake.application.run


================================================
FILE: bin/setup
================================================
#!/usr/bin/env ruby
require 'pathname'

# path to your application root.
APP_ROOT = Pathname.new File.expand_path('../../',  __FILE__)

Dir.chdir APP_ROOT do
  # This script is a starting point to setup your application.
  # Add necessary setup steps to this file:

  puts "== Installing dependencies =="
  system "gem install bundler --conservative"
  system "bundle check || bundle install"

  # puts "\n== Copying sample files =="
  # unless File.exist?("config/database.yml")
  #   system "cp config/database.yml.sample config/database.yml"
  # end

  puts "\n== Preparing database =="
  system "bin/rake db:setup"

  puts "\n== Removing old logs and tempfiles =="
  system "rm -f log/*"
  system "rm -rf tmp/cache"

  puts "\n== Restarting application server =="
  system "touch tmp/restart.txt"
end


================================================
FILE: bin/spring
================================================
#!/usr/bin/env ruby

# This file loads spring without using Bundler, in order to be fast
# It gets overwritten when you run the `spring binstub` command

unless defined?(Spring)
  require "rubygems"
  require "bundler"

  if match = Bundler.default_lockfile.read.match(/^GEM$.*?^    (?:  )*spring \((.*?)\)$.*?^$/m)
    ENV["GEM_PATH"] = ([Bundler.bundle_path.to_s] + Gem.path).join(File::PATH_SEPARATOR)
    ENV["GEM_HOME"] = nil
    Gem.paths = ENV

    gem "spring", match[1]
    require "spring/binstub"
  end
end


================================================
FILE: config/application.rb
================================================
require File.expand_path('../boot', __FILE__)

require 'rails/all'

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module App
  class Application < Rails::Application
    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration should go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded.

    # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
    # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
    # config.time_zone = 'Central Time (US & Canada)'

    # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
    # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
    # config.i18n.default_locale = :de

    # Do not swallow errors in after_commit/after_rollback callbacks.
    config.active_record.raise_in_transactional_callbacks = true

    # Make public assets requireable in manifest files
    config.assets.paths << Rails.root.join("public", "assets", "stylesheets")
    config.assets.paths << Rails.root.join("public", "assets", "javascripts")
  end
end


================================================
FILE: config/boot.rb
================================================
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)

require 'bundler/setup' # Set up gems listed in the Gemfile.


================================================
FILE: config/database.yml
================================================
# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
#
default: &default
  adapter: sqlite3
  pool: 5
  timeout: 5000

development:
  <<: *default
  database: db/development.sqlite3

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: db/test.sqlite3

production:
  <<: *default
  database: db/production.sqlite3


================================================
FILE: config/environment.rb
================================================
# Load the Rails application.
require File.expand_path('../application', __FILE__)

# Initialize the Rails application.
Rails.application.initialize!


================================================
FILE: config/environments/development.rb
================================================
Rails.application.configure do
  # Settings specified here will take precedence over those in config/application.rb.

  # In the development environment your application's code is reloaded on
  # every request. This slows down response time but is perfect for development
  # since you don't have to restart the web server when you make code changes.
  config.cache_classes = false

  # Do not eager load code on boot.
  config.eager_load = false

  # Show full error reports and disable caching.
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send.
  config.action_mailer.raise_delivery_errors = false

  # Print deprecation notices to the Rails logger.
  config.active_support.deprecation = :log

  # Raise an error on page load if there are pending migrations.
  config.active_record.migration_error = :page_load

  # Debug mode disables concatenation and preprocessing of assets.
  # This option may cause significant delays in view rendering with a large
  # number of complex assets.
  config.assets.debug = true

  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
  # yet still be able to expire them through the digest params.
  config.assets.digest = false

  # Adds additional error checking when serving assets at runtime.
  # Checks for improperly declared sprockets dependencies.
  # Raises helpful error messages.
  config.assets.raise_runtime_errors = true

  # Raises error for missing translations
  # config.action_view.raise_on_missing_translations = true
end


================================================
FILE: config/environments/production.rb
================================================
Rails.application.configure do
  # Settings specified here will take precedence over those in config/application.rb.

  # Code is not reloaded between requests.
  config.cache_classes = true

  # Eager load code on boot. This eager loads most of Rails and
  # your application in memory, allowing both threaded web servers
  # and those relying on copy on write to perform better.
  # Rake tasks automatically ignore this option for performance.
  config.eager_load = true

  # Full error reports are disabled and caching is turned on.
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true

  # Enable Rack::Cache to put a simple HTTP cache in front of your application
  # Add `rack-cache` to your Gemfile before enabling this.
  # For large-scale production use, consider using a caching reverse proxy like
  # NGINX, varnish or squid.
  # config.action_dispatch.rack_cache = true

  # Disable serving static files from the `/public` folder by default since
  # Apache or NGINX already handles this.
  config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?

  # Compress JavaScripts and CSS.
  config.assets.js_compressor = :uglifier
  # config.assets.css_compressor = :sass

  # Do not fallback to assets pipeline if a precompiled asset is missed.
  config.assets.compile = false

  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
  # yet still be able to expire them through the digest params.
  config.assets.digest = true

  # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb

  # Specifies the header that your server uses for sending files.
  # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX

  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
  # config.force_ssl = true

  # Use the lowest log level to ensure availability of diagnostic information
  # when problems arise.
  config.log_level = :debug

  # Prepend all log lines with the following tags.
  # config.log_tags = [ :subdomain, :uuid ]

  # Use a different logger for distributed setups.
  # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)

  # Use a different cache store in production.
  # config.cache_store = :mem_cache_store

  # Enable serving of images, stylesheets, and JavaScripts from an asset server.
  # config.action_controller.asset_host = 'http://assets.example.com'

  # Ignore bad email addresses and do not raise email delivery errors.
  # Set this to true and configure the email server for immediate delivery to raise delivery errors.
  # config.action_mailer.raise_delivery_errors = false

  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
  # the I18n.default_locale when a translation cannot be found).
  config.i18n.fallbacks = true

  # Send deprecation notices to registered listeners.
  config.active_support.deprecation = :notify

  # Use default logging formatter so that PID and timestamp are not suppressed.
  config.log_formatter = ::Logger::Formatter.new

  # Do not dump schema after migrations.
  config.active_record.dump_schema_after_migration = false
end


================================================
FILE: config/environments/test.rb
================================================
Rails.application.configure do
  # Settings specified here will take precedence over those in config/application.rb.

  # The test environment is used exclusively to run your application's
  # test suite. You never need to work with it otherwise. Remember that
  # your test database is "scratch space" for the test suite and is wiped
  # and recreated between test runs. Don't rely on the data there!
  config.cache_classes = true

  # Do not eager load code on boot. This avoids loading your whole application
  # just for the purpose of running a single test. If you are using a tool that
  # preloads Rails for running tests, you may have to set it to true.
  config.eager_load = false

  # Configure static file server for tests with Cache-Control for performance.
  config.serve_static_files   = true
  config.static_cache_control = 'public, max-age=3600'

  # Show full error reports and disable caching.
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false

  # Raise exceptions instead of rendering exception templates.
  config.action_dispatch.show_exceptions = false

  # Disable request forgery protection in test environment.
  config.action_controller.allow_forgery_protection = false

  # Tell Action Mailer not to deliver emails to the real world.
  # The :test delivery method accumulates sent emails in the
  # ActionMailer::Base.deliveries array.
  config.action_mailer.delivery_method = :test

  # Randomize the order test cases are executed.
  config.active_support.test_order = :random

  # Print deprecation notices to the stderr.
  config.active_support.deprecation = :stderr

  # Raises error for missing translations
  # config.action_view.raise_on_missing_translations = true
end


================================================
FILE: config/initializers/assets.rb
================================================
# Be sure to restart your server when you modify this file.

# Version of your assets, change this if you want to expire all your assets.
Rails.application.config.assets.version = '1.0'

# Add additional assets to the asset load path
# Rails.application.config.assets.paths << Emoji.images_path

# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
# Rails.application.config.assets.precompile += %w( search.js )


================================================
FILE: config/initializers/backtrace_silencers.rb
================================================
# Be sure to restart your server when you modify this file.

# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }

# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
# Rails.backtrace_cleaner.remove_silencers!


================================================
FILE: config/initializers/cookies_serializer.rb
================================================
# Be sure to restart your server when you modify this file.

Rails.application.config.action_dispatch.cookies_serializer = :json


================================================
FILE: config/initializers/filter_parameter_logging.rb
================================================
# Be sure to restart your server when you modify this file.

# Configure sensitive parameters which will be filtered from the log file.
Rails.application.config.filter_parameters += [:password]


================================================
FILE: config/initializers/inflections.rb
================================================
# Be sure to restart your server when you modify this file.

# Add new inflection rules using the following format. Inflections
# are locale specific, and you may define rules for as many different
# locales as you wish. All of these examples are active by default:
# ActiveSupport::Inflector.inflections(:en) do |inflect|
#   inflect.plural /^(ox)$/i, '\1en'
#   inflect.singular /^(ox)en/i, '\1'
#   inflect.irregular 'person', 'people'
#   inflect.uncountable %w( fish sheep )
# end

# These inflection rules are supported but not enabled by default:
# ActiveSupport::Inflector.inflections(:en) do |inflect|
#   inflect.acronym 'RESTful'
# end


================================================
FILE: config/initializers/mime_types.rb
================================================
# Be sure to restart your server when you modify this file.

# Add new mime types for use in respond_to blocks:
# Mime::Type.register "text/richtext", :rtf


================================================
FILE: config/initializers/rev_manifest.rb
================================================
rev_manifest_path = 'public/assets/rev-manifest.json'

if File.exist?(rev_manifest_path)
  REV_MANIFEST = JSON.parse(File.read(rev_manifest_path))
end


================================================
FILE: config/initializers/session_store.rb
================================================
# Be sure to restart your server when you modify this file.

Rails.application.config.session_store :cookie_store, key: '_app_session'


================================================
FILE: config/initializers/wrap_parameters.rb
================================================
# Be sure to restart your server when you modify this file.

# This file contains settings for ActionController::ParamsWrapper which
# is enabled by default.

# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
ActiveSupport.on_load(:action_controller) do
  wrap_parameters format: [:json] if respond_to?(:wrap_parameters)
end

# To enable root element in JSON for ActiveRecord objects.
# ActiveSupport.on_load(:active_record) do
#  self.include_root_in_json = true
# end


================================================
FILE: config/locales/en.yml
================================================
# Files in the config/locales directory are used for internationalization
# and are automatically loaded by Rails. If you want to use locales other
# than English, add the necessary files in this directory.
#
# To use the locales, use `I18n.t`:
#
#     I18n.t 'hello'
#
# In views, this is aliased to just `t`:
#
#     <%= t('hello') %>
#
# To use a different locale, set it with `I18n.locale`:
#
#     I18n.locale = :es
#
# This would use the information in config/locales/es.yml.
#
# To learn more, please read the Rails Internationalization guide
# available at http://guides.rubyonrails.org/i18n.html.

en:
  hello: "Hello world"


================================================
FILE: config/routes.rb
================================================
Rails.application.routes.draw do
  get 'welcome/index'

  # The priority is based upon order of creation: first created -> highest priority.
  # See how all your routes lay out with "rake routes".

  # You can have the root of your site routed with "root"
  root 'welcome#index'

  # Example of regular route:
  #   get 'products/:id' => 'catalog#view'

  # Example of named route that can be invoked with purchase_url(id: product.id)
  #   get 'products/:id/purchase' => 'catalog#purchase', as: :purchase

  # Example resource route (maps HTTP verbs to controller actions automatically):
  #   resources :products

  # Example resource route with options:
  #   resources :products do
  #     member do
  #       get 'short'
  #       post 'toggle'
  #     end
  #
  #     collection do
  #       get 'sold'
  #     end
  #   end

  # Example resource route with sub-resources:
  #   resources :products do
  #     resources :comments, :sales
  #     resource :seller
  #   end

  # Example resource route with more complex sub-resources:
  #   resources :products do
  #     resources :comments
  #     resources :sales do
  #       get 'recent', on: :collection
  #     end
  #   end

  # Example resource route with concerns:
  #   concern :toggleable do
  #     post 'toggle'
  #   end
  #   resources :posts, concerns: :toggleable
  #   resources :photos, concerns: :toggleable

  # Example resource route within a namespace:
  #   namespace :admin do
  #     # Directs /admin/products/* to Admin::ProductsController
  #     # (app/controllers/admin/products_controller.rb)
  #     resources :products
  #   end
end


================================================
FILE: config.ru
================================================
# This file is used by Rack-based servers to start the application.

require ::File.expand_path('../config/environment', __FILE__)
run Rails.application


================================================
FILE: db/seeds.rb
================================================
# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
#
# Examples:
#
#   cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
#   Mayor.create(name: 'Emanuel', city: cities.first)


================================================
FILE: gulp/assets/javascripts/global.coffee
================================================
message = require './message'

console.log message


================================================
FILE: gulp/assets/javascripts/message.js
================================================
module.exports = 'yay modules!';


================================================
FILE: gulp/assets/stylesheets/base/_iconFont.sass
================================================
// DO NOT EDIT DIRECTLY!
  Generated by gulp/tasks/iconFont.js
  from ./gulp/tasks/iconFont/template.sass

@font-face
  font-family: gulp-rails-icons
  src: url("/assets/fonts/gulp-rails-icons.eot")
  src: url("/assets/fonts/gulp-rails-icons.eot?#iefix") format('embedded-opentype'), url("/assets/fonts/gulp-rails-icons.woff") format('woff'), url("/assets/fonts/gulp-rails-icons.ttf") format('truetype'), url("/assets/fonts/gulp-rails-icons.svg#gulp-rails-icons") format('svg')
  font-weight: normal
  font-style: normal

=icon($content)
  &:before
    -moz-osx-font-smoothing: grayscale
    -webkit-font-smoothing: antialiased
    content: $content
    font-family: 'gulp-rails-icons'
    font-style: normal
    font-variant: normal
    font-weight: normal
    line-height: 1
    speak: none
    text-transform: none
    @content

=icon--facebook
  +icon("\e001")
    @content

.icon
  &.-facebook
    +icon--facebook

=icon--linkedin
  +icon("\e002")
    @content

.icon
  &.-linkedin
    +icon--linkedin

=icon--pinterest
  +icon("\e003")
    @content

.icon
  &.-pinterest
    +icon--pinterest

=icon--twitter
  +icon("\e004")
    @content

.icon
  &.-twitter
    +icon--twitter




================================================
FILE: gulp/assets/stylesheets/global.sass
================================================
@import base/iconFont

body
  background: #dd3435 image-url('gulp.png')
  font-family: sans-serif

img
  background-color: white

p
  font-size: 18px

a
  text-decoration: none
  color: white


================================================
FILE: gulp/config.js
================================================
var publicAssets = "./public/assets";
var sourceFiles  = "./gulp/assets";

module.exports = {
  publicAssets: publicAssets,
  browserSync: {
    proxy: 'localhost:3000',
    files: ['./app/views/**']
  },
  sass: {
    src: sourceFiles + "/stylesheets/**/*.{sass,scss}",
    dest: publicAssets + "/stylesheets",
    settings: {
      indentedSyntax: true, // Enable .sass syntax!
      imagePath: '/assets/images' // Used by the image-url helper
    }
  },
  images: {
    src: sourceFiles + "/images/**",
    dest: publicAssets + "/images"
  },
  iconFont: {
    name: 'Gulp Rails Icons',
    src: sourceFiles + "/icons/*.svg",
    dest: publicAssets + '/fonts',
    sassDest: sourceFiles + '/stylesheets/base',
    template: './gulp/tasks/iconFont/template.sass',
    sassOutputName: '_iconFont.sass',
    fontPath: '/assets/fonts',
    className: 'icon',
    options: {
      fontName: 'gulp-rails-icons',
      appendCodepoints: true,
      normalize: false
    }
  },
  browserify: {
    bundleConfigs: [{
      entries: sourceFiles + '/javascripts/global.coffee',
      dest: publicAssets + '/javascripts',
      outputName: 'global.js',
      extensions: ['.js','.coffee']
    }]
  }
};


================================================
FILE: gulp/tasks/browserSync.js
================================================
var browserSync = require('browser-sync');
var gulp        = require('gulp');
var config      = require('../config').browserSync;

gulp.task('browserSync', function() {
  browserSync(config);
});


================================================
FILE: gulp/tasks/browserify.js
================================================
var _            = require('lodash');
var browserify   = require('browserify');
var browserSync  = require('browser-sync');
var bundleLogger = require('../util/bundleLogger');
var config       = require('../config').browserify;
var gulp         = require('gulp');
var handleErrors = require('../util/handleErrors');
var source       = require('vinyl-source-stream');
var watchify     = require('watchify');

var browserifyTask = function(callback, devMode) {

  var bundleQueue = config.bundleConfigs.length;

  var browserifyThis = function(bundleConfig) {

    if(devMode) {
      _.extend(bundleConfig, watchify.args, { debug: true });
      bundleConfig = _.omit(bundleConfig, ['external', 'require']);
    }

    var b = browserify(bundleConfig);

    var bundle = function() {
      bundleLogger.start(bundleConfig.outputName);

      return b
        .bundle()
        .on('error', handleErrors)
        .pipe(source(bundleConfig.outputName))
        .pipe(gulp.dest(bundleConfig.dest))
        .on('end', reportFinished)
        .pipe(browserSync.reload({stream:true}));
    };

    if(devMode) {
      b = watchify(b);
      b.on('update', bundle);
      bundleLogger.watch(bundleConfig.outputName);
    } else {
      if(bundleConfig.require) b.require(bundleConfig.require);
      if(bundleConfig.external) b.external(bundleConfig.external);
    }

    var reportFinished = function() {
      bundleLogger.end(bundleConfig.outputName);

      if(bundleQueue) {
        bundleQueue--;
        if(bundleQueue === 0) {
          callback();
        }
      }
    };

    return bundle();
  };

  config.bundleConfigs.forEach(browserifyThis);
};

gulp.task('browserify', browserifyTask);

module.exports = browserifyTask;


================================================
FILE: gulp/tasks/build.js
================================================
var gulp         = require('gulp');
var gulpSequence = require('gulp-sequence')

gulp.task('build', function(cb) {
  var tasks = ['clean',['iconFont', 'images'], ['sass', 'browserify']];
  if(process.env.RAILS_ENV === 'production') tasks.push('rev');
  tasks.push(cb);
  gulpSequence.apply(this, tasks);
});


================================================
FILE: gulp/tasks/clean.js
================================================
var gulp = require('gulp');
var del = require('del');
var config = require('../config');

gulp.task('clean', function (cb) {
  del([config.publicAssets], cb);
});

================================================
FILE: gulp/tasks/default.js
================================================
var gulp = require('gulp');

gulp.task('default', ['images', 'iconFont', 'sass', 'watch']);


================================================
FILE: gulp/tasks/iconFont/generateIconSass.js
================================================
var gulp     = require('gulp');
var config   = require('../../config').iconFont;
var template = require('gulp-swig');
var rename   = require('gulp-rename');

module.exports = function(glyphs, options) {

  var iconSass = template({
    data: {
      icons: glyphs.map(function(glyph) {
        return {
          name: glyph.name,
          code: glyph.unicode[0].charCodeAt(0).toString(16).toUpperCase()
        }
      }),
      fontName: config.options.fontName,
      fontPath: config.fontPath,
      className: config.className,
      comment: 'DO NOT EDIT DIRECTLY!\n  Generated by gulp/tasks/iconFont.js\n  from ' + config.template
    }
  });

  gulp.src(config.template)
    .pipe(iconSass)
    .pipe(rename(config.sassOutputName))
    .pipe(gulp.dest(config.sassDest));
};


================================================
FILE: gulp/tasks/iconFont/index.js
================================================
var gulp             = require('gulp');
var iconfont         = require('gulp-iconfont');
var config           = require('../../config').iconFont;
var generateIconSass = require('./generateIconSass');

gulp.task('iconFont', function() {
  return gulp.src(config.src)
    .pipe(iconfont(config.options))
    .on('glyphs', generateIconSass)
    .pipe(gulp.dest(config.dest));
});


================================================
FILE: gulp/tasks/iconFont/template.sass
================================================
// {{comment}}

@font-face
  font-family: {{fontName}}
  src: url("{{fontPath}}/{{fontName}}.eot")
  src: url("{{fontPath}}/{{fontName}}.eot?#iefix") format('embedded-opentype'), url("{{fontPath}}/{{fontName}}.woff") format('woff'), url("{{fontPath}}/{{fontName}}.ttf") format('truetype'), url("{{fontPath}}/{{fontName}}.svg#{{fontName}}") format('svg')
  font-weight: normal
  font-style: normal

=icon($content)
  &:before
    -moz-osx-font-smoothing: grayscale
    -webkit-font-smoothing: antialiased
    content: $content
    font-family: '{{fontName}}'
    font-style: normal
    font-variant: normal
    font-weight: normal
    line-height: 1
    speak: none
    text-transform: none
    @content

{% for icon in icons -%}
=icon--{{icon.name}}
  +icon("\{{icon.code}}")
    @content

.icon
  &.-{{icon.name}}
    +icon--{{icon.name}}

{% endfor %}


================================================
FILE: gulp/tasks/images.js
================================================
var changed    = require('gulp-changed');
var gulp       = require('gulp');
var imagemin   = require('gulp-imagemin');
var config     = require('../config').images;
var browserSync  = require('browser-sync');

gulp.task('images', function() {
  return gulp.src(config.src)
    .pipe(changed(config.dest)) // Ignore unchanged files
    .pipe(imagemin()) // Optimize
    .pipe(gulp.dest(config.dest))
    .pipe(browserSync.reload({stream:true}));
});


================================================
FILE: gulp/tasks/rev/index.js
================================================
var config       = require('../../config');
var gulp         = require('gulp');
var revCollector = require('gulp-rev-collector');

// Replace asset references in compiled css and js files
gulp.task('rev', ['rev-assets', 'rev-font-workaround'], function(){
  return gulp.src([config.publicAssets + '/rev-manifest.json', config.publicAssets + '/**/*.{css,js}'])
    .pipe(revCollector())
    .pipe(gulp.dest(config.publicAssets));
});


================================================
FILE: gulp/tasks/rev/rev-assets.js
================================================
var config       = require('../../config');
var gulp         = require('gulp');
var rev          = require('gulp-rev');

// Add md5 hashes to assets
gulp.task('rev-assets', function(){
  return gulp.src(config.publicAssets + '/**/**.!(css|js|eot|woff|ttf)')
    .pipe(rev())
    .pipe(gulp.dest(config.publicAssets))
    .pipe(rev.manifest())
    .pipe(gulp.dest(config.publicAssets));
});


================================================
FILE: gulp/tasks/rev/rev-font-workaround.js
================================================
// 2) Font rev workaround
var _            = require('lodash');
var config       = require('../../config');
var fs           = require('fs');
var gulp         = require('gulp');
var merge        = require('merge-stream');
var rename       = require("gulp-rename");
var rev          = require('gulp-rev');

// .ttf fonts have an embedded timestamp, which cause the contents
// of the file to change ever-so-slightly. This was a problem for
// file reving, which generates a hash based on the contents of the file.
// This meant that even if source files had not changed, the hash would
// change with every recompile, as well as .eot, and .woff files, which
// are derived from a source svg font

// The solution is to only hash svg font files, then append the
// generated hash to the ttf, eot, and woff files (instead of
// leting each file generate its own hash)

gulp.task('rev-font-workaround', ['rev-assets'], function() {
  var manifest = require('../../.' + config.publicAssets + '/rev-manifest.json');
  var fontList = [];

  _.each(manifest, function(reference, key) {
    var fontPath = config.iconFont.dest.split(config.publicAssets)[1].substr(1);

    if (key.match(fontPath + '/' + config.iconFont.options.fontName)) {
      var path = key.split('.svg')[0];
      var hash = reference.split(path)[1].split('.svg')[0];

      fontList.push({
        path: path,
        hash: hash
      });
    }
  });

  // Add hash to non-svg font files
  var streams = fontList.map(function(file) {
    // Add references in manifest
    ['.eot', '.woff', '.ttf'].forEach(function(ext){
      manifest[file.path + ext] = file.path + file.hash + ext;
    });

    return gulp.src(config.publicAssets + '/' + file.path + '*.!(svg)')
      .pipe(rename({suffix: file.hash}))
      .pipe(gulp.dest(config.iconFont.dest));
  });

  // Re-write rev-manifest.json to disk
  fs.writeFile(config.publicAssets + '/rev-manifest.json', JSON.stringify(manifest, null, 2));

  return merge.apply(this, streams);
});


================================================
FILE: gulp/tasks/sass.js
================================================
var gulp         = require('gulp');
var browserSync  = require('browser-sync');
var sass         = require('gulp-sass');
var sourcemaps   = require('gulp-sourcemaps');
var handleErrors = require('../util/handleErrors');
var config       = require('../config').sass;
var autoprefixer = require('gulp-autoprefixer');

gulp.task('sass', function () {
  return gulp.src(config.src)
    .pipe(sourcemaps.init())
    .pipe(sass(config.settings))
    .on('error', handleErrors)
    .pipe(autoprefixer({ browsers: ['last 2 version'] }))
    .pipe(sourcemaps.write())
    .pipe(gulp.dest(config.dest))
    .pipe(browserSync.reload({stream:true}));
});


================================================
FILE: gulp/tasks/watch.js
================================================
/* Notes:
   - gulp/tasks/browserify.js handles js recompiling with watchify
   - gulp/tasks/browserSync.js watches and reloads compiled files
*/

var gulp   = require('gulp');
var config = require('../config');
var watch  = require('gulp-watch');

gulp.task('watch', ['watchify','browserSync'], function(callback) {
  watch(config.sass.src, function() { gulp.start('sass'); });
  watch(config.images.src, function() { gulp.start('images'); });
  watch(config.iconFont.src, function() { gulp.start('iconFont'); });
  // Watchify will watch and recompile our JS, so no need to gulp.watch it
});


================================================
FILE: gulp/tasks/watchify.js
================================================
var gulp           = require('gulp');
var browserifyTask = require('./browserify');

gulp.task('watchify', function(callback) {
  // Start browserify task with devMode === true
  browserifyTask(callback, true);
});


================================================
FILE: gulp/util/bundleLogger.js
================================================
/* bundleLogger
   ------------
   Provides gulp style logs to the bundle method in browserify.js
*/

var gutil        = require('gulp-util');
var prettyHrtime = require('pretty-hrtime');
var startTime;

module.exports = {
  start: function(filepath) {
    startTime = process.hrtime();
    gutil.log('Bundling', gutil.colors.green(filepath) + '...');
  },

  watch: function(bundleName) {
    gutil.log('Watching files required by', gutil.colors.yellow(bundleName));
  },

  end: function(filepath) {
    var taskTime = process.hrtime(startTime);
    var prettyTime = prettyHrtime(taskTime);
    gutil.log('Bundled', gutil.colors.green(filepath), 'in', gutil.colors.magenta(prettyTime));
  }
};


================================================
FILE: gulp/util/handleErrors.js
================================================
var notify = require("gulp-notify");

module.exports = function() {

  var args = Array.prototype.slice.call(arguments);

  // Send error to notification center with gulp-notify
  notify.onError({
    title: "Compile Error",
    message: "<%= error %>"
  }).apply(this, args);

  // Keep gulp from hanging on this task
  this.emit('end');
};

================================================
FILE: gulpfile.js
================================================
/*
  gulpfile.js
  ===========
  Rather than manage one giant configuration file responsible
  for creating multiple tasks, each task has been broken out into
  its own file in gulp/tasks. Any files in that directory get
  automatically required below.

  To add a new task, simply add a new task file that directory.
  gulp/tasks/default.js specifies the default set of tasks to run
  when you run `gulp`.
*/

var requireDir = require('require-dir');

// Require all tasks in gulp/tasks, including subfolders
requireDir('./gulp/tasks', { recurse: true });


================================================
FILE: lib/assets/.keep
================================================


================================================
FILE: lib/tasks/.keep
================================================


================================================
FILE: package.json
================================================
{
  "name": "gulp-rails",
  "description": "Gulp Asset Pipeline with Rails",
  "engines": {
    "node": "0.10.36",
    "npm": "2.3.0"
  },
  "repository": {
    "type": "git",
    "url": "git://github.com/greypants/gulp-rails.git"
  },
  "scripts": {
    "postinstall": "gulp build"
  },
  "browserify": {
    "transform": [
      "coffeeify"
    ]
  },
  "dependencies": {
    "browser-sync": "~2.4.0",
    "browserify": "^8.0.2",
    "coffeeify": "~0.7.0",
    "del": "^1.1.1",
    "gulp": "^3.8.7",
    "gulp-autoprefixer": "^2.0.0",
    "gulp-changed": "^0.4.1",
    "gulp-filesize": "0.0.6",
    "gulp-iconfont": "^3.0.0",
    "gulp-imagemin": "^0.6.2",
    "gulp-notify": "^1.4.2",
    "gulp-rename": "^1.2.0",
    "gulp-rev": "^3.0.1",
    "gulp-rev-collector": "^0.1.3",
    "gulp-sass": "^2.0.4",
    "gulp-sequence": "^0.3.2",
    "gulp-sourcemaps": "^1.2.8",
    "gulp-swig": "^0.7.4",
    "gulp-util": "^3.0.0",
    "gulp-watch": "^4.1.1",
    "lodash": "^2.4.1",
    "merge-stream": "^0.1.7",
    "pretty-hrtime": "~0.2.1",
    "require-dir": "^0.1.0",
    "vinyl-source-stream": "~0.1.1",
    "watchify": "^2.2.1"
  }
}


================================================
FILE: public/404.html
================================================
<!DOCTYPE html>
<html>
<head>
  <title>The page you were looking for doesn't exist (404)</title>
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <style>
  body {
    background-color: #EFEFEF;
    color: #2E2F30;
    text-align: center;
    font-family: arial, sans-serif;
    margin: 0;
  }

  div.dialog {
    width: 95%;
    max-width: 33em;
    margin: 4em auto 0;
  }

  div.dialog > div {
    border: 1px solid #CCC;
    border-right-color: #999;
    border-left-color: #999;
    border-bottom-color: #BBB;
    border-top: #B00100 solid 4px;
    border-top-left-radius: 9px;
    border-top-right-radius: 9px;
    background-color: white;
    padding: 7px 12% 0;
    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
  }

  h1 {
    font-size: 100%;
    color: #730E15;
    line-height: 1.5em;
  }

  div.dialog > p {
    margin: 0 0 1em;
    padding: 1em;
    background-color: #F7F7F7;
    border: 1px solid #CCC;
    border-right-color: #999;
    border-left-color: #999;
    border-bottom-color: #999;
    border-bottom-left-radius: 4px;
    border-bottom-right-radius: 4px;
    border-top-color: #DADADA;
    color: #666;
    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
  }
  </style>
</head>

<body>
  <!-- This file lives in public/404.html -->
  <div class="dialog">
    <div>
      <h1>The page you were looking for doesn't exist.</h1>
      <p>You may have mistyped the address or the page may have moved.</p>
    </div>
    <p>If you are the application owner check the logs for more information.</p>
  </div>
</body>
</html>


================================================
FILE: public/422.html
================================================
<!DOCTYPE html>
<html>
<head>
  <title>The change you wanted was rejected (422)</title>
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <style>
  body {
    background-color: #EFEFEF;
    color: #2E2F30;
    text-align: center;
    font-family: arial, sans-serif;
    margin: 0;
  }

  div.dialog {
    width: 95%;
    max-width: 33em;
    margin: 4em auto 0;
  }

  div.dialog > div {
    border: 1px solid #CCC;
    border-right-color: #999;
    border-left-color: #999;
    border-bottom-color: #BBB;
    border-top: #B00100 solid 4px;
    border-top-left-radius: 9px;
    border-top-right-radius: 9px;
    background-color: white;
    padding: 7px 12% 0;
    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
  }

  h1 {
    font-size: 100%;
    color: #730E15;
    line-height: 1.5em;
  }

  div.dialog > p {
    margin: 0 0 1em;
    padding: 1em;
    background-color: #F7F7F7;
    border: 1px solid #CCC;
    border-right-color: #999;
    border-left-color: #999;
    border-bottom-color: #999;
    border-bottom-left-radius: 4px;
    border-bottom-right-radius: 4px;
    border-top-color: #DADADA;
    color: #666;
    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
  }
  </style>
</head>

<body>
  <!-- This file lives in public/422.html -->
  <div class="dialog">
    <div>
      <h1>The change you wanted was rejected.</h1>
      <p>Maybe you tried to change something you didn't have access to.</p>
    </div>
    <p>If you are the application owner check the logs for more information.</p>
  </div>
</body>
</html>


================================================
FILE: public/500.html
================================================
<!DOCTYPE html>
<html>
<head>
  <title>We're sorry, but something went wrong (500)</title>
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <style>
  body {
    background-color: #EFEFEF;
    color: #2E2F30;
    text-align: center;
    font-family: arial, sans-serif;
    margin: 0;
  }

  div.dialog {
    width: 95%;
    max-width: 33em;
    margin: 4em auto 0;
  }

  div.dialog > div {
    border: 1px solid #CCC;
    border-right-color: #999;
    border-left-color: #999;
    border-bottom-color: #BBB;
    border-top: #B00100 solid 4px;
    border-top-left-radius: 9px;
    border-top-right-radius: 9px;
    background-color: white;
    padding: 7px 12% 0;
    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
  }

  h1 {
    font-size: 100%;
    color: #730E15;
    line-height: 1.5em;
  }

  div.dialog > p {
    margin: 0 0 1em;
    padding: 1em;
    background-color: #F7F7F7;
    border: 1px solid #CCC;
    border-right-color: #999;
    border-left-color: #999;
    border-bottom-color: #999;
    border-bottom-left-radius: 4px;
    border-bottom-right-radius: 4px;
    border-top-color: #DADADA;
    color: #666;
    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
  }
  </style>
</head>

<body>
  <!-- This file lives in public/500.html -->
  <div class="dialog">
    <div>
      <h1>We're sorry, but something went wrong.</h1>
    </div>
    <p>If you are the application owner check the logs for more information.</p>
  </div>
</body>
</html>


================================================
FILE: public/robots.txt
================================================
# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
#
# To ban all spiders from the entire site uncomment the next two lines:
# User-agent: *
# Disallow: /


================================================
FILE: test/controllers/.keep
================================================


================================================
FILE: test/controllers/welcome_controller_test.rb
================================================
require 'test_helper'

class WelcomeControllerTest < ActionController::TestCase
  test "should get index" do
    get :index
    assert_response :success
  end

end


================================================
FILE: test/fixtures/.keep
================================================


================================================
FILE: test/helpers/.keep
================================================


================================================
FILE: test/integration/.keep
================================================


================================================
FILE: test/mailers/.keep
================================================


================================================
FILE: test/models/.keep
================================================


================================================
FILE: test/test_helper.rb
================================================
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'

class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  fixtures :all

  # Add more helper methods to be used by all tests here...
end


================================================
FILE: vendor/assets/javascripts/.keep
================================================


================================================
FILE: vendor/assets/stylesheets/.keep
================================================
Download .txt
gitextract_iggfzwf1/

├── .buildpacks
├── .gitignore
├── .ruby-version
├── Gemfile
├── LICENSE.txt
├── README.md
├── Rakefile
├── app/
│   ├── .gitignore
│   ├── assets/
│   │   ├── javascripts/
│   │   │   └── application.js
│   │   └── stylesheets/
│   │       └── application.css
│   ├── controllers/
│   │   ├── application_controller.rb
│   │   ├── concerns/
│   │   │   └── .keep
│   │   └── welcome_controller.rb
│   ├── helpers/
│   │   ├── application_helper.rb
│   │   └── welcome_helper.rb
│   ├── mailers/
│   │   └── .keep
│   ├── models/
│   │   ├── .keep
│   │   └── concerns/
│   │       └── .keep
│   └── views/
│       ├── layouts/
│       │   └── application.html.erb
│       └── welcome/
│           └── index.html.erb
├── bin/
│   ├── bundle
│   ├── rails
│   ├── rake
│   ├── setup
│   └── spring
├── config/
│   ├── application.rb
│   ├── boot.rb
│   ├── database.yml
│   ├── environment.rb
│   ├── environments/
│   │   ├── development.rb
│   │   ├── production.rb
│   │   └── test.rb
│   ├── initializers/
│   │   ├── assets.rb
│   │   ├── backtrace_silencers.rb
│   │   ├── cookies_serializer.rb
│   │   ├── filter_parameter_logging.rb
│   │   ├── inflections.rb
│   │   ├── mime_types.rb
│   │   ├── rev_manifest.rb
│   │   ├── session_store.rb
│   │   └── wrap_parameters.rb
│   ├── locales/
│   │   └── en.yml
│   └── routes.rb
├── config.ru
├── db/
│   └── seeds.rb
├── gulp/
│   ├── assets/
│   │   ├── javascripts/
│   │   │   ├── global.coffee
│   │   │   └── message.js
│   │   └── stylesheets/
│   │       ├── base/
│   │       │   └── _iconFont.sass
│   │       └── global.sass
│   ├── config.js
│   ├── tasks/
│   │   ├── browserSync.js
│   │   ├── browserify.js
│   │   ├── build.js
│   │   ├── clean.js
│   │   ├── default.js
│   │   ├── iconFont/
│   │   │   ├── generateIconSass.js
│   │   │   ├── index.js
│   │   │   └── template.sass
│   │   ├── images.js
│   │   ├── rev/
│   │   │   ├── index.js
│   │   │   ├── rev-assets.js
│   │   │   └── rev-font-workaround.js
│   │   ├── sass.js
│   │   ├── watch.js
│   │   └── watchify.js
│   └── util/
│       ├── bundleLogger.js
│       └── handleErrors.js
├── gulpfile.js
├── lib/
│   ├── assets/
│   │   └── .keep
│   └── tasks/
│       └── .keep
├── package.json
├── public/
│   ├── 404.html
│   ├── 422.html
│   ├── 500.html
│   └── robots.txt
├── test/
│   ├── controllers/
│   │   ├── .keep
│   │   └── welcome_controller_test.rb
│   ├── fixtures/
│   │   └── .keep
│   ├── helpers/
│   │   └── .keep
│   ├── integration/
│   │   └── .keep
│   ├── mailers/
│   │   └── .keep
│   ├── models/
│   │   └── .keep
│   └── test_helper.rb
└── vendor/
    └── assets/
        ├── javascripts/
        │   └── .keep
        └── stylesheets/
            └── .keep
Download .txt
SYMBOL INDEX (10 symbols across 7 files)

FILE: app/controllers/application_controller.rb
  class ApplicationController (line 1) | class ApplicationController < ActionController::Base

FILE: app/controllers/welcome_controller.rb
  class WelcomeController (line 1) | class WelcomeController < ApplicationController
    method index (line 2) | def index

FILE: app/helpers/application_helper.rb
  type ApplicationHelper (line 1) | module ApplicationHelper
    function gulp_asset_path (line 2) | def gulp_asset_path(path)

FILE: app/helpers/welcome_helper.rb
  type WelcomeHelper (line 1) | module WelcomeHelper

FILE: config/application.rb
  type App (line 9) | module App
    class Application (line 10) | class Application < Rails::Application

FILE: test/controllers/welcome_controller_test.rb
  class WelcomeControllerTest (line 3) | class WelcomeControllerTest < ActionController::TestCase

FILE: test/test_helper.rb
  class ActiveSupport::TestCase (line 5) | class ActiveSupport::TestCase
Condensed preview — 85 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (57K chars).
[
  {
    "path": ".buildpacks",
    "chars": 105,
    "preview": "https://github.com/heroku/heroku-buildpack-nodejs.git\nhttps://github.com/heroku/heroku-buildpack-ruby.git"
  },
  {
    "path": ".gitignore",
    "chars": 806,
    "preview": "# From https://github.com/github/gitignore\n*.rbc\ncapybara-*.html\n.rspec\n/log\n/tmp\n/db/*.sqlite3\n/db/*.sqlite3-journal\n/p"
  },
  {
    "path": ".ruby-version",
    "chars": 6,
    "preview": "2.1.4\n"
  },
  {
    "path": "Gemfile",
    "chars": 250,
    "preview": "source 'https://rubygems.org'\n\ngem 'rails', '4.2.0'\ngem 'sass-rails', '~> 5.0'\ngem 'uglifier', '>= 1.3.0'\ngem 'coffee-ra"
  },
  {
    "path": "LICENSE.txt",
    "chars": 1077,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2015 Viget Labs\n\nPermission is hereby granted, free of charge, to any person obtain"
  },
  {
    "path": "README.md",
    "chars": 9316,
    "preview": "# DEPRECATED: [Use Blendid!](https://github.com/vigetlabs/blendid)\n\nThe work done in this repo has been rolled into a si"
  },
  {
    "path": "Rakefile",
    "chars": 249,
    "preview": "# Add your own tasks in files placed in lib/tasks ending in .rake,\n# for example lib/tasks/capistrano.rake, and they wil"
  },
  {
    "path": "app/.gitignore",
    "chars": 474,
    "preview": "# See https://help.github.com/articles/ignoring-files for more about ignoring files.\n#\n# If you find yourself ignoring t"
  },
  {
    "path": "app/assets/javascripts/application.js",
    "chars": 408,
    "preview": "// This is a manifest file that'll be compiled into application.js, which will include all the files\n// listed below.\n//"
  },
  {
    "path": "app/assets/stylesheets/application.css",
    "chars": 324,
    "preview": "/*\n * This is a manifest file that'll be compiled into application.css, which will include all the files\n * listed below"
  },
  {
    "path": "app/controllers/application_controller.rb",
    "chars": 204,
    "preview": "class ApplicationController < ActionController::Base\n  # Prevent CSRF attacks by raising an exception.\n  # For APIs, you"
  },
  {
    "path": "app/controllers/concerns/.keep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "app/controllers/welcome_controller.rb",
    "chars": 70,
    "preview": "class WelcomeController < ApplicationController\n  def index\n  end\nend\n"
  },
  {
    "path": "app/helpers/application_helper.rb",
    "chars": 141,
    "preview": "module ApplicationHelper\n  def gulp_asset_path(path)\n    path = REV_MANIFEST[path] if defined?(REV_MANIFEST)\n    \"/asset"
  },
  {
    "path": "app/helpers/welcome_helper.rb",
    "chars": 25,
    "preview": "module WelcomeHelper\nend\n"
  },
  {
    "path": "app/mailers/.keep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "app/models/.keep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "app/models/concerns/.keep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "app/views/layouts/application.html.erb",
    "chars": 210,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n  <title>App</title>\n  <%= stylesheet_link_tag 'application' %>\n  <%= javascript_include_t"
  },
  {
    "path": "app/views/welcome/index.html.erb",
    "chars": 466,
    "preview": "<h1>Gulp Asset Pipeline on Rails</h1>\n<img src=\"<%= gulp_asset_path('images/gulp.png') %>\" alt=\"\">\n<p><a href=\"https://g"
  },
  {
    "path": "bin/bundle",
    "chars": 129,
    "preview": "#!/usr/bin/env ruby\nENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)\nload Gem.bin_path('bundler', '"
  },
  {
    "path": "bin/rails",
    "chars": 219,
    "preview": "#!/usr/bin/env ruby\nbegin\n  load File.expand_path(\"../spring\", __FILE__)\nrescue LoadError\nend\nAPP_PATH = File.expand_pat"
  },
  {
    "path": "bin/rake",
    "chars": 164,
    "preview": "#!/usr/bin/env ruby\nbegin\n  load File.expand_path(\"../spring\", __FILE__)\nrescue LoadError\nend\nrequire_relative '../confi"
  },
  {
    "path": "bin/setup",
    "chars": 805,
    "preview": "#!/usr/bin/env ruby\nrequire 'pathname'\n\n# path to your application root.\nAPP_ROOT = Pathname.new File.expand_path('../.."
  },
  {
    "path": "bin/spring",
    "chars": 518,
    "preview": "#!/usr/bin/env ruby\n\n# This file loads spring without using Bundler, in order to be fast\n# It gets overwritten when you "
  },
  {
    "path": "config/application.rb",
    "chars": 1322,
    "preview": "require File.expand_path('../boot', __FILE__)\n\nrequire 'rails/all'\n\n# Require the gems listed in Gemfile, including any "
  },
  {
    "path": "config/boot.rb",
    "chars": 132,
    "preview": "ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)\n\nrequire 'bundler/setup' # Set up gems listed in t"
  },
  {
    "path": "config/database.yml",
    "chars": 552,
    "preview": "# SQLite version 3.x\n#   gem install sqlite3\n#\n#   Ensure the SQLite 3 gem is defined in your Gemfile\n#   gem 'sqlite3'\n"
  },
  {
    "path": "config/environment.rb",
    "chars": 150,
    "preview": "# Load the Rails application.\nrequire File.expand_path('../application', __FILE__)\n\n# Initialize the Rails application.\n"
  },
  {
    "path": "config/environments/development.rb",
    "chars": 1601,
    "preview": "Rails.application.configure do\n  # Settings specified here will take precedence over those in config/application.rb.\n\n  "
  },
  {
    "path": "config/environments/production.rb",
    "chars": 3304,
    "preview": "Rails.application.configure do\n  # Settings specified here will take precedence over those in config/application.rb.\n\n  "
  },
  {
    "path": "config/environments/test.rb",
    "chars": 1755,
    "preview": "Rails.application.configure do\n  # Settings specified here will take precedence over those in config/application.rb.\n\n  "
  },
  {
    "path": "config/initializers/assets.rb",
    "chars": 486,
    "preview": "# Be sure to restart your server when you modify this file.\n\n# Version of your assets, change this if you want to expire"
  },
  {
    "path": "config/initializers/backtrace_silencers.rb",
    "chars": 404,
    "preview": "# Be sure to restart your server when you modify this file.\n\n# You can add backtrace silencers for libraries that you're"
  },
  {
    "path": "config/initializers/cookies_serializer.rb",
    "chars": 129,
    "preview": "# Be sure to restart your server when you modify this file.\n\nRails.application.config.action_dispatch.cookies_serializer"
  },
  {
    "path": "config/initializers/filter_parameter_logging.rb",
    "chars": 194,
    "preview": "# Be sure to restart your server when you modify this file.\n\n# Configure sensitive parameters which will be filtered fro"
  },
  {
    "path": "config/initializers/inflections.rb",
    "chars": 647,
    "preview": "# Be sure to restart your server when you modify this file.\n\n# Add new inflection rules using the following format. Infl"
  },
  {
    "path": "config/initializers/mime_types.rb",
    "chars": 156,
    "preview": "# Be sure to restart your server when you modify this file.\n\n# Add new mime types for use in respond_to blocks:\n# Mime::"
  },
  {
    "path": "config/initializers/rev_manifest.rb",
    "chars": 151,
    "preview": "rev_manifest_path = 'public/assets/rev-manifest.json'\n\nif File.exist?(rev_manifest_path)\n  REV_MANIFEST = JSON.parse(Fil"
  },
  {
    "path": "config/initializers/session_store.rb",
    "chars": 135,
    "preview": "# Be sure to restart your server when you modify this file.\n\nRails.application.config.session_store :cookie_store, key: "
  },
  {
    "path": "config/initializers/wrap_parameters.rb",
    "chars": 517,
    "preview": "# Be sure to restart your server when you modify this file.\n\n# This file contains settings for ActionController::ParamsW"
  },
  {
    "path": "config/locales/en.yml",
    "chars": 634,
    "preview": "# Files in the config/locales directory are used for internationalization\n# and are automatically loaded by Rails. If yo"
  },
  {
    "path": "config/routes.rb",
    "chars": 1622,
    "preview": "Rails.application.routes.draw do\n  get 'welcome/index'\n\n  # The priority is based upon order of creation: first created "
  },
  {
    "path": "config.ru",
    "chars": 153,
    "preview": "# This file is used by Rack-based servers to start the application.\n\nrequire ::File.expand_path('../config/environment',"
  },
  {
    "path": "db/seeds.rb",
    "chars": 343,
    "preview": "# This file should contain all the record creation needed to seed the database with its default values.\n# The data can t"
  },
  {
    "path": "gulp/assets/javascripts/global.coffee",
    "chars": 51,
    "preview": "message = require './message'\n\nconsole.log message\n"
  },
  {
    "path": "gulp/assets/javascripts/message.js",
    "chars": 33,
    "preview": "module.exports = 'yay modules!';\n"
  },
  {
    "path": "gulp/assets/stylesheets/base/_iconFont.sass",
    "chars": 1185,
    "preview": "// DO NOT EDIT DIRECTLY!\n  Generated by gulp/tasks/iconFont.js\n  from ./gulp/tasks/iconFont/template.sass\n\n@font-face\n  "
  },
  {
    "path": "gulp/assets/stylesheets/global.sass",
    "chars": 192,
    "preview": "@import base/iconFont\n\nbody\n  background: #dd3435 image-url('gulp.png')\n  font-family: sans-serif\n\nimg\n  background-colo"
  },
  {
    "path": "gulp/config.js",
    "chars": 1194,
    "preview": "var publicAssets = \"./public/assets\";\nvar sourceFiles  = \"./gulp/assets\";\n\nmodule.exports = {\n  publicAssets: publicAsse"
  },
  {
    "path": "gulp/tasks/browserSync.js",
    "chars": 196,
    "preview": "var browserSync = require('browser-sync');\nvar gulp        = require('gulp');\nvar config      = require('../config').bro"
  },
  {
    "path": "gulp/tasks/browserify.js",
    "chars": 1729,
    "preview": "var _            = require('lodash');\nvar browserify   = require('browserify');\nvar browserSync  = require('browser-sync"
  },
  {
    "path": "gulp/tasks/build.js",
    "chars": 308,
    "preview": "var gulp         = require('gulp');\nvar gulpSequence = require('gulp-sequence')\n\ngulp.task('build', function(cb) {\n  var"
  },
  {
    "path": "gulp/tasks/clean.js",
    "chars": 162,
    "preview": "var gulp = require('gulp');\nvar del = require('del');\nvar config = require('../config');\n\ngulp.task('clean', function (c"
  },
  {
    "path": "gulp/tasks/default.js",
    "chars": 92,
    "preview": "var gulp = require('gulp');\n\ngulp.task('default', ['images', 'iconFont', 'sass', 'watch']);\n"
  },
  {
    "path": "gulp/tasks/iconFont/generateIconSass.js",
    "chars": 783,
    "preview": "var gulp     = require('gulp');\nvar config   = require('../../config').iconFont;\nvar template = require('gulp-swig');\nva"
  },
  {
    "path": "gulp/tasks/iconFont/index.js",
    "chars": 377,
    "preview": "var gulp             = require('gulp');\nvar iconfont         = require('gulp-iconfont');\nvar config           = require("
  },
  {
    "path": "gulp/tasks/iconFont/template.sass",
    "chars": 854,
    "preview": "// {{comment}}\n\n@font-face\n  font-family: {{fontName}}\n  src: url(\"{{fontPath}}/{{fontName}}.eot\")\n  src: url(\"{{fontPat"
  },
  {
    "path": "gulp/tasks/images.js",
    "chars": 449,
    "preview": "var changed    = require('gulp-changed');\nvar gulp       = require('gulp');\nvar imagemin   = require('gulp-imagemin');\nv"
  },
  {
    "path": "gulp/tasks/rev/index.js",
    "chars": 433,
    "preview": "var config       = require('../../config');\nvar gulp         = require('gulp');\nvar revCollector = require('gulp-rev-col"
  },
  {
    "path": "gulp/tasks/rev/rev-assets.js",
    "chars": 390,
    "preview": "var config       = require('../../config');\nvar gulp         = require('gulp');\nvar rev          = require('gulp-rev');\n"
  },
  {
    "path": "gulp/tasks/rev/rev-font-workaround.js",
    "chars": 2000,
    "preview": "// 2) Font rev workaround\nvar _            = require('lodash');\nvar config       = require('../../config');\nvar fs      "
  },
  {
    "path": "gulp/tasks/sass.js",
    "chars": 643,
    "preview": "var gulp         = require('gulp');\nvar browserSync  = require('browser-sync');\nvar sass         = require('gulp-sass');"
  },
  {
    "path": "gulp/tasks/watch.js",
    "chars": 594,
    "preview": "/* Notes:\n   - gulp/tasks/browserify.js handles js recompiling with watchify\n   - gulp/tasks/browserSync.js watches and "
  },
  {
    "path": "gulp/tasks/watchify.js",
    "chars": 215,
    "preview": "var gulp           = require('gulp');\nvar browserifyTask = require('./browserify');\n\ngulp.task('watchify', function(call"
  },
  {
    "path": "gulp/util/bundleLogger.js",
    "chars": 696,
    "preview": "/* bundleLogger\n   ------------\n   Provides gulp style logs to the bundle method in browserify.js\n*/\n\nvar gutil        ="
  },
  {
    "path": "gulp/util/handleErrors.js",
    "chars": 341,
    "preview": "var notify = require(\"gulp-notify\");\n\nmodule.exports = function() {\n\n  var args = Array.prototype.slice.call(arguments);"
  },
  {
    "path": "gulpfile.js",
    "chars": 557,
    "preview": "/*\n  gulpfile.js\n  ===========\n  Rather than manage one giant configuration file responsible\n  for creating multiple tas"
  },
  {
    "path": "lib/assets/.keep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "lib/tasks/.keep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "package.json",
    "chars": 1134,
    "preview": "{\n  \"name\": \"gulp-rails\",\n  \"description\": \"Gulp Asset Pipeline with Rails\",\n  \"engines\": {\n    \"node\": \"0.10.36\",\n    \""
  },
  {
    "path": "public/404.html",
    "chars": 1564,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n  <title>The page you were looking for doesn't exist (404)</title>\n  <meta name=\"viewport\""
  },
  {
    "path": "public/422.html",
    "chars": 1547,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n  <title>The change you wanted was rejected (422)</title>\n  <meta name=\"viewport\" content="
  },
  {
    "path": "public/500.html",
    "chars": 1477,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n  <title>We're sorry, but something went wrong (500)</title>\n  <meta name=\"viewport\" conte"
  },
  {
    "path": "public/robots.txt",
    "chars": 202,
    "preview": "# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file\n#\n# To ban all spiders"
  },
  {
    "path": "test/controllers/.keep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "test/controllers/welcome_controller_test.rb",
    "chars": 164,
    "preview": "require 'test_helper'\n\nclass WelcomeControllerTest < ActionController::TestCase\n  test \"should get index\" do\n    get :in"
  },
  {
    "path": "test/fixtures/.keep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "test/helpers/.keep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "test/integration/.keep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "test/mailers/.keep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "test/models/.keep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "test/test_helper.rb",
    "chars": 312,
    "preview": "ENV['RAILS_ENV'] ||= 'test'\nrequire File.expand_path('../../config/environment', __FILE__)\nrequire 'rails/test_help'\n\ncl"
  },
  {
    "path": "vendor/assets/javascripts/.keep",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "vendor/assets/stylesheets/.keep",
    "chars": 0,
    "preview": ""
  }
]

About this extraction

This page contains the full source code of the vigetlabs/gulp-rails-pipeline GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 85 files (49.0 KB), approximately 14.9k tokens, and a symbol index with 10 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!