hyperloop 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/.travis.yml +4 -0
 - data/Gemfile +1 -1
 - data/README.md +89 -11
 - data/Rakefile +5 -0
 - data/bin/hyperloop +7 -0
 - data/hyperloop.gemspec +12 -3
 - data/lib/hyperloop/application.rb +56 -16
 - data/lib/hyperloop/cli.rb +11 -0
 - data/lib/hyperloop/generators/site/Gemfile +3 -0
 - data/lib/hyperloop/generators/site/_partial.html.erb +1 -0
 - data/lib/hyperloop/generators/site/about.html.erb +3 -0
 - data/lib/hyperloop/generators/site/app.css +2 -0
 - data/lib/hyperloop/generators/site/app.js +2 -0
 - data/lib/hyperloop/generators/site/application.html.erb +23 -0
 - data/lib/hyperloop/generators/site/bootstrap.css +6805 -0
 - data/lib/hyperloop/generators/site/config.ru +4 -0
 - data/lib/hyperloop/generators/site/current-time.coffee +3 -0
 - data/lib/hyperloop/generators/site/index.html.erb +11 -0
 - data/lib/hyperloop/generators/site/jquery.js +8829 -0
 - data/lib/hyperloop/generators/site/main.scss +7 -0
 - data/lib/hyperloop/generators/site/socool.jpg +0 -0
 - data/lib/hyperloop/generators/site.rb +47 -0
 - data/lib/hyperloop/response.rb +2 -2
 - data/lib/hyperloop/version.rb +1 -1
 - data/lib/hyperloop/view/registry.rb +90 -0
 - data/lib/hyperloop/view/scope.rb +23 -0
 - data/lib/hyperloop/view.rb +73 -0
 - data/lib/hyperloop.rb +3 -1
 - data/spec/application_spec.rb +155 -19
 - data/spec/fixtures/assets/app/assets/images/my-gif.gif +0 -0
 - data/spec/fixtures/assets/app/assets/images/my-jpg.jpg +0 -0
 - data/spec/fixtures/assets/app/assets/images/my-png.png +0 -0
 - data/spec/fixtures/assets/app/assets/javascripts/app.js +1 -0
 - data/spec/fixtures/assets/app/assets/javascripts/my-scripts.coffee +1 -0
 - data/spec/fixtures/assets/app/assets/shouldfail/shouldfail.css +3 -0
 - data/spec/fixtures/assets/app/assets/stylesheets/app.css +1 -0
 - data/spec/fixtures/assets/app/assets/stylesheets/my-styles.scss +3 -0
 - data/spec/fixtures/assets/app/views/index.html.erb +7 -0
 - data/spec/fixtures/assets/app/views/layouts/application.html.erb +15 -0
 - data/spec/fixtures/assets/vendor/assets/javascripts/vendored.js +1 -0
 - data/spec/fixtures/assets/vendor/assets/stylesheets/vendored.css +3 -0
 - data/spec/fixtures/erb/app/views/about.html.erb +10 -0
 - data/spec/fixtures/erb/app/views/index.html.erb +10 -0
 - data/spec/fixtures/layouts/app/views/index.html.erb +3 -0
 - data/spec/fixtures/layouts/app/views/layouts/application.html.erb +12 -0
 - data/spec/fixtures/layouts/app/views/subdir/index.html.erb +3 -0
 - data/spec/fixtures/partials/app/views/index.html.erb +3 -0
 - data/spec/fixtures/partials/app/views/layouts/application.html.erb +12 -0
 - data/spec/fixtures/partials/app/views/subdir/_partial.html.erb +1 -0
 - data/spec/fixtures/partials/app/views/subdir/index.html.erb +3 -0
 - data/spec/fixtures/partials/app/views/subdir/nonroot.html.erb +3 -0
 - data/spec/response_spec.rb +3 -3
 - data/spec/spec_helper.rb +34 -0
 - data/spec/view/registry_spec.rb +56 -0
 - data/spec/view/scope_spec.rb +21 -0
 - data/spec/view_spec.rb +93 -0
 - metadata +202 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 2dfb955d1503bb9133c9c4f83c7813a1a65a1f41
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 9321f9d51755fbeef6ef2bd694c3a129d273cbe4
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 9c03dd0d3a042535c644e6db73be972d79783f92ed9a1231889050f3e086693aadb59d0b25716289646ba982737c2d0684c9dd1549993ca27edf4c42c10e9e94
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: f97317e18c1b3aa65243650b00d18fd235252799d6b740c5af0f409168e7f12e0bc98683f7424f9cd73bf76f2d0abb02dcb0081bc0b3cea2af64a26cf1e53d5c
         
     | 
    
        data/.travis.yml
    ADDED
    
    
    
        data/Gemfile
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,24 +1,102 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Hyperloop
         
     | 
| 
      
 1 
     | 
    
         
            +
            # Hyperloop [](https://travis-ci.org/jakeboxer/hyperloop)
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
      
 3 
     | 
    
         
            +
            Hyperloop is a framework that lets you make static websites with a technology stack familiar to Rails programmers.
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 5 
     | 
    
         
            +
            Before you keep reading, let's get one thing out of the way:
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
            ### If you think your website might need a database, do not use Hyperloop.
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
      
 9 
     | 
    
         
            +
            I came up with the idea for Hyperloop after hearing one too many experienced web developers say "I don't even know how
         
     | 
| 
      
 10 
     | 
    
         
            +
            to set up a regular website anymore."
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
      
 12 
     | 
    
         
            +
            With Hyperloop, you can create a new site just like you would with Rails. You can write ERB and Sass and CoffeeScript
         
     | 
| 
      
 13 
     | 
    
         
            +
            and all that other good stuff. You can use layouts and partials and deploy to Heroku.
         
     | 
| 
       12 
14 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
      
 15 
     | 
    
         
            +
            Basically, you can do all the stuff you're used to with Rails. On top of that, you don't have to type any of the magic
         
     | 
| 
      
 16 
     | 
    
         
            +
            incantations that just aren't necessary in a static site. You don't have to set up routes. You don't have to make
         
     | 
| 
      
 17 
     | 
    
         
            +
            controllers with a method for every view. You don't have to think about environments or tests or schemas or helpers or
         
     | 
| 
      
 18 
     | 
    
         
            +
            any of the other boilerplate directories/files that would clutter up a static site being shoehorned into a Rails app.
         
     | 
| 
       14 
19 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
      
 20 
     | 
    
         
            +
            ## Getting Started
         
     | 
| 
       16 
21 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
      
 22 
     | 
    
         
            +
            1. Install Hyperloop and Thin at the command prompt if you haven't yet:
         
     | 
| 
       18 
23 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
      
 24 
     | 
    
         
            +
                    gem install hyperloop
         
     | 
| 
      
 25 
     | 
    
         
            +
                    gem install thin
         
     | 
| 
       20 
26 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
      
 27 
     | 
    
         
            +
            2. At the command prompt, create a new Hyperloop site:
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                    hyperloop new mysite
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
               where "mysite" is the site name.
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            3. Change directory to `mysite` and start the web server:
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                    cd mysite
         
     | 
| 
      
 36 
     | 
    
         
            +
                    thin start
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            4. Go to [http://localhost:3000/](http://localhost:3000/) and you'll see your brand new website!
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            ## Structure
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            ### Layout
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            Your layout is in `app/views/layouts/application.html.erb`.
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            ### Views
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            Your site root is in `app/views/index.html.erb`.
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            If you create `app/views/hello.html.erb`, you'll be able to get to it by going to
         
     | 
| 
      
 51 
     | 
    
         
            +
            [http://localhost:3000/hello/](http://localhost:3000/hello/).
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
            ### Subdirectories
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            You can nest views in subdirectories. If you create the following files, the following URLs will work:
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
            - `app/views/people/ted_nyman.html.erb` will make [http://localhost:3000/people/ted_nyman/](http://localhost:3000/people/ted_nyman/) work.
         
     | 
| 
      
 58 
     | 
    
         
            +
            - `app/views/people/index.html.erb` will make [http://localhost:3000/people/](http://localhost:3000/people/) work.
         
     | 
| 
      
 59 
     | 
    
         
            +
            - `app/views/projects/2013/yeezus.html.erb` will make [http://localhost:3000/projects/2013/yeezus/](http://localhost:3000/projects/2013/yeezus/) work.
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            ### Partials
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
            If you create `app/views/_some_section.html.erb`, you'll be able to load it as a partial almost like you would in Rails:
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            ``` ruby
         
     | 
| 
      
 66 
     | 
    
         
            +
            <%= render "some_section" %>
         
     | 
| 
      
 67 
     | 
    
         
            +
            ```
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
            Note: In Rails, it's `<%= render :partial => "some_section" %>`, since there are other things you could want to render
         
     | 
| 
      
 70 
     | 
    
         
            +
            besides a partial. In Hyperloop, there aren't, so the options hash isn't necessary.
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
            ### CSS, SCSS, Sass, JavaScript, and CoffeeScript
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
            If you create some files like:
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
            ```
         
     | 
| 
      
 77 
     | 
    
         
            +
            app/assets/stylesheets/bootstrap.css
         
     | 
| 
      
 78 
     | 
    
         
            +
            app/assets/stylesheets/stylez1.css
         
     | 
| 
      
 79 
     | 
    
         
            +
            app/assets/stylesheets/stylez2.scss
         
     | 
| 
      
 80 
     | 
    
         
            +
            app/assets/javascripts/jquery.js
         
     | 
| 
      
 81 
     | 
    
         
            +
            app/assets/javascripts/scriptz1.js
         
     | 
| 
      
 82 
     | 
    
         
            +
            app/assets/javascripts/scriptz2.coffee
         
     | 
| 
      
 83 
     | 
    
         
            +
            ```
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            They'll be included in all your views, so long as you have these two tags:
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
            ``` html
         
     | 
| 
      
 88 
     | 
    
         
            +
            <!-- I suggest putting this in between <head> and </head> -->
         
     | 
| 
      
 89 
     | 
    
         
            +
            <link href="/assets/stylesheets/app.css" media="all" rel="stylesheet" type="text/css">
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
            <!-- I suggest putting this at the end of the document body (as in, right before </body>) -->
         
     | 
| 
      
 92 
     | 
    
         
            +
            <script src="/assets/javascripts/app.js" type="text/javascript"></script>
         
     | 
| 
      
 93 
     | 
    
         
            +
            ```
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
            somewhere in your layout. All your CSS and JS assets belong in these folders, including vendored ones like jQuery and Bootstrap.
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
            ### Images
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
            If you create `app/assets/images/photo.jpg`, you'll be able to show it in a view with `<img src="/assets/images/photo.jpg">`.
         
     | 
| 
       22 
100 
     | 
    
         | 
| 
       23 
101 
     | 
    
         
             
            ## Contributing
         
     | 
| 
       24 
102 
     | 
    
         | 
    
        data/Rakefile
    CHANGED
    
    
    
        data/bin/hyperloop
    ADDED
    
    
    
        data/hyperloop.gemspec
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # coding: utf-8
         
     | 
| 
       2 
     | 
    
         
            -
            lib = File.expand_path( 
     | 
| 
      
 2 
     | 
    
         
            +
            lib = File.expand_path("../lib", __FILE__)
         
     | 
| 
       3 
3 
     | 
    
         
             
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         
     | 
| 
       4 
     | 
    
         
            -
            require  
     | 
| 
      
 4 
     | 
    
         
            +
            require "hyperloop/version"
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            Gem::Specification.new do |spec|
         
     | 
| 
       7 
7 
     | 
    
         
             
              spec.name          = "hyperloop"
         
     | 
| 
         @@ -18,9 +18,18 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       18 
18 
     | 
    
         
             
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         
     | 
| 
       19 
19 
     | 
    
         
             
              spec.require_paths = ["lib"]
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
              spec.add_dependency  
     | 
| 
      
 21 
     | 
    
         
            +
              spec.add_dependency "coffee-script", "~> 2.2.0"
         
     | 
| 
      
 22 
     | 
    
         
            +
              spec.add_dependency "rack", "~> 1.5"
         
     | 
| 
      
 23 
     | 
    
         
            +
              spec.add_dependency "sass", "~> 3.2.12"
         
     | 
| 
      
 24 
     | 
    
         
            +
              spec.add_dependency "sprockets", "~> 2.10.0"
         
     | 
| 
      
 25 
     | 
    
         
            +
              spec.add_dependency "thor", "~> 0.18.1"
         
     | 
| 
      
 26 
     | 
    
         
            +
              spec.add_dependency "tilt", "~> 1.4.1"
         
     | 
| 
      
 27 
     | 
    
         
            +
              spec.add_dependency "yui-compressor", "~> 0.12.0"
         
     | 
| 
       22 
28 
     | 
    
         | 
| 
       23 
29 
     | 
    
         
             
              spec.add_development_dependency "bundler", "~> 1.3"
         
     | 
| 
      
 30 
     | 
    
         
            +
              spec.add_development_dependency "nokogiri", "~> 1.6.0"
         
     | 
| 
      
 31 
     | 
    
         
            +
              spec.add_development_dependency "pry"
         
     | 
| 
      
 32 
     | 
    
         
            +
              spec.add_development_dependency "pry-debugger"
         
     | 
| 
       24 
33 
     | 
    
         
             
              spec.add_development_dependency "rake"
         
     | 
| 
       25 
34 
     | 
    
         
             
              spec.add_development_dependency "rspec", "~> 2.14"
         
     | 
| 
       26 
35 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,26 +1,32 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require  
     | 
| 
      
 1 
     | 
    
         
            +
            require "rack"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "sprockets"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "yui/compressor"
         
     | 
| 
       2 
4 
     | 
    
         | 
| 
       3 
5 
     | 
    
         
             
            module Hyperloop
         
     | 
| 
       4 
6 
     | 
    
         
             
              class Application
         
     | 
| 
       5 
7 
     | 
    
         
             
                include Rack::Utils
         
     | 
| 
       6 
8 
     | 
    
         | 
| 
       7 
9 
     | 
    
         
             
                def initialize(root=nil)
         
     | 
| 
       8 
     | 
    
         
            -
                  @root 
     | 
| 
       9 
     | 
    
         
            -
                  @ 
     | 
| 
      
 10 
     | 
    
         
            +
                  @root          = root
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @view_registry = View::Registry.new(@root)
         
     | 
| 
       10 
12 
     | 
    
         
             
                end
         
     | 
| 
       11 
13 
     | 
    
         | 
| 
       12 
14 
     | 
    
         
             
                # Rack call interface.
         
     | 
| 
       13 
15 
     | 
    
         
             
                def call(env)
         
     | 
| 
       14 
16 
     | 
    
         
             
                  request  = Rack::Request.new(env)
         
     | 
| 
       15 
17 
     | 
    
         
             
                  response = Response.new
         
     | 
| 
       16 
     | 
    
         
            -
                  path     = view_path(request)
         
     | 
| 
       17 
18 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
                  if  
     | 
| 
       19 
     | 
    
         
            -
                    # If  
     | 
| 
       20 
     | 
    
         
            -
                     
     | 
| 
      
 19 
     | 
    
         
            +
                  if self.class.asset_path?(request.path) && asset = assets[normalized_asset_path(request.path)]
         
     | 
| 
      
 20 
     | 
    
         
            +
                    # If the path is for an asset, find the specified asset and use its data
         
     | 
| 
      
 21 
     | 
    
         
            +
                    # as the response body.
         
     | 
| 
      
 22 
     | 
    
         
            +
                    response["Content-Type"] = asset.content_type
         
     | 
| 
      
 23 
     | 
    
         
            +
                    response.write(asset.source)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  elsif view = @view_registry.find_template_view(normalized_request_path(request.path))
         
     | 
| 
      
 25 
     | 
    
         
            +
                    # If there's a view at the path, use its data as the response body.
         
     | 
| 
      
 26 
     | 
    
         
            +
                    data = view.render(request)
         
     | 
| 
       21 
27 
     | 
    
         
             
                    response.write(data)
         
     | 
| 
       22 
28 
     | 
    
         
             
                  else
         
     | 
| 
       23 
     | 
    
         
            -
                    # If there's no  
     | 
| 
      
 29 
     | 
    
         
            +
                    # If there's no view at the path, 404.
         
     | 
| 
       24 
30 
     | 
    
         
             
                    response.status = 404
         
     | 
| 
       25 
31 
     | 
    
         
             
                  end
         
     | 
| 
       26 
32 
     | 
    
         | 
| 
         @@ -29,17 +35,51 @@ module Hyperloop 
     | 
|
| 
       29 
35 
     | 
    
         | 
| 
       30 
36 
     | 
    
         
             
                private
         
     | 
| 
       31 
37 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
                # Internal:  
     | 
| 
      
 38 
     | 
    
         
            +
                # Internal: Is the specified path for assets?
         
     | 
| 
       33 
39 
     | 
    
         
             
                #
         
     | 
| 
       34 
     | 
    
         
            -
                #  
     | 
| 
      
 40 
     | 
    
         
            +
                # path - Path to check.
         
     | 
| 
       35 
41 
     | 
    
         
             
                #
         
     | 
| 
       36 
     | 
    
         
            -
                # Returns a  
     | 
| 
       37 
     | 
    
         
            -
                def  
     | 
| 
       38 
     | 
    
         
            -
                  path  
     | 
| 
      
 42 
     | 
    
         
            +
                # Returns a boolean.
         
     | 
| 
      
 43 
     | 
    
         
            +
                def self.asset_path?(path)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  path =~ /^\/assets\/(images|javascripts|stylesheets)\//
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                # Internal: The sprockets environment for the app.
         
     | 
| 
      
 48 
     | 
    
         
            +
                #
         
     | 
| 
      
 49 
     | 
    
         
            +
                # Returns a Sprockets::Environment.
         
     | 
| 
      
 50 
     | 
    
         
            +
                def assets
         
     | 
| 
      
 51 
     | 
    
         
            +
                  @assets ||= Sprockets::Environment.new do |env|
         
     | 
| 
      
 52 
     | 
    
         
            +
                    env.append_path(File.join(@root, "app", "assets"))
         
     | 
| 
      
 53 
     | 
    
         
            +
                    env.append_path(File.join(@root, "vendor", "assets"))
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                    # compress everything in production
         
     | 
| 
      
 56 
     | 
    
         
            +
                    if ENV["RACK_ENV"] == "production"
         
     | 
| 
      
 57 
     | 
    
         
            +
                      env.js_compressor  = YUI::JavaScriptCompressor.new(:munge => true)
         
     | 
| 
      
 58 
     | 
    
         
            +
                      env.css_compressor = YUI::CssCompressor.new
         
     | 
| 
      
 59 
     | 
    
         
            +
                    end
         
     | 
| 
      
 60 
     | 
    
         
            +
                  end
         
     | 
| 
      
 61 
     | 
    
         
            +
                end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                # Internal: Get a normalized version of the specified asset path.
         
     | 
| 
      
 64 
     | 
    
         
            +
                #
         
     | 
| 
      
 65 
     | 
    
         
            +
                # path - Asset path to normalize
         
     | 
| 
      
 66 
     | 
    
         
            +
                #
         
     | 
| 
      
 67 
     | 
    
         
            +
                # Returns a string.
         
     | 
| 
      
 68 
     | 
    
         
            +
                def normalized_asset_path(path)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  path.sub(/^\/assets\//, "")
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
       39 
71 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
      
 72 
     | 
    
         
            +
                # Internal: Get a normalized version of the specified request path.
         
     | 
| 
      
 73 
     | 
    
         
            +
                #
         
     | 
| 
      
 74 
     | 
    
         
            +
                # path - Request path to normalize
         
     | 
| 
      
 75 
     | 
    
         
            +
                #
         
     | 
| 
      
 76 
     | 
    
         
            +
                # Returns a string.
         
     | 
| 
      
 77 
     | 
    
         
            +
                def normalized_request_path(path)
         
     | 
| 
      
 78 
     | 
    
         
            +
                  if path == "/"
         
     | 
| 
      
 79 
     | 
    
         
            +
                    path
         
     | 
| 
      
 80 
     | 
    
         
            +
                  else
         
     | 
| 
      
 81 
     | 
    
         
            +
                    path.chomp("/")
         
     | 
| 
      
 82 
     | 
    
         
            +
                  end
         
     | 
| 
       43 
83 
     | 
    
         
             
                end
         
     | 
| 
       44 
84 
     | 
    
         
             
              end
         
     | 
| 
       45 
85 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,11 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "hyperloop/generators/site"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "thor"
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Hyperloop
         
     | 
| 
      
 5 
     | 
    
         
            +
              class CLI < Thor
         
     | 
| 
      
 6 
     | 
    
         
            +
                desc "new SITENAME", "Create a new Hyperloop site. \"hyperloop new my_site\" creates a new site called MySite in \"./my_site\""
         
     | 
| 
      
 7 
     | 
    
         
            +
                def new(name)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  Hyperloop::Generators::Site.start([name])
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <p>Here's a partial! You know it's a partial because the filename starts with an underscore.</p>
         
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <!DOCTYPE html>
         
     | 
| 
      
 2 
     | 
    
         
            +
            <html>
         
     | 
| 
      
 3 
     | 
    
         
            +
              <head>
         
     | 
| 
      
 4 
     | 
    
         
            +
                <title><%= name.capitalize %></title>
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                <link href="/assets/stylesheets/app.css" media="all" rel="stylesheet" type="text/css">
         
     | 
| 
      
 7 
     | 
    
         
            +
              </head>
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              <body>
         
     | 
| 
      
 10 
     | 
    
         
            +
                <h1>Welcome to <%= name.capitalize %>!</h1>
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                <nav>
         
     | 
| 
      
 13 
     | 
    
         
            +
                  <ul>
         
     | 
| 
      
 14 
     | 
    
         
            +
                    <li><a href="/">Home</a></li>
         
     | 
| 
      
 15 
     | 
    
         
            +
                    <li><a href="/about">About</a></li>
         
     | 
| 
      
 16 
     | 
    
         
            +
                  </ul>
         
     | 
| 
      
 17 
     | 
    
         
            +
                </nav>
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                <%%= yield %>
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                <script src="/assets/javascripts/app.js" type="text/javascript"></script>
         
     | 
| 
      
 22 
     | 
    
         
            +
              </body>
         
     | 
| 
      
 23 
     | 
    
         
            +
            </html>
         
     |