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
Binary file
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require "thor/group"
|
2
|
+
require "hyperloop/version"
|
3
|
+
|
4
|
+
module Hyperloop
|
5
|
+
module Generators
|
6
|
+
class Site < Thor::Group
|
7
|
+
include Thor::Actions
|
8
|
+
|
9
|
+
argument :name, :type => :string
|
10
|
+
|
11
|
+
def self.source_root
|
12
|
+
File.join(File.dirname(__FILE__), "site")
|
13
|
+
end
|
14
|
+
|
15
|
+
def create_directories
|
16
|
+
empty_directory(name)
|
17
|
+
empty_directory(File.join(name, "app"))
|
18
|
+
empty_directory(File.join(name, "app", "assets"))
|
19
|
+
empty_directory(File.join(name, "app", "assets", "images"))
|
20
|
+
empty_directory(File.join(name, "app", "assets", "javascripts"))
|
21
|
+
empty_directory(File.join(name, "app", "assets", "stylesheets"))
|
22
|
+
empty_directory(File.join(name, "app", "views"))
|
23
|
+
empty_directory(File.join(name, "app", "views", "layouts"))
|
24
|
+
empty_directory(File.join(name, "vendor"))
|
25
|
+
empty_directory(File.join(name, "vendor", "assets"))
|
26
|
+
empty_directory(File.join(name, "vendor", "assets", "javascripts"))
|
27
|
+
empty_directory(File.join(name, "vendor", "assets", "stylesheets"))
|
28
|
+
end
|
29
|
+
|
30
|
+
def copy_files
|
31
|
+
template("config.ru", File.join(name, "config.ru"))
|
32
|
+
template("Gemfile", File.join(name, "Gemfile"))
|
33
|
+
copy_file("socool.jpg", File.join(name, "app", "assets", "images", "socool.jpg"))
|
34
|
+
template("app.js", File.join(name, "app", "assets", "javascripts", "app.js"))
|
35
|
+
template("current-time.coffee", File.join(name, "app", "assets", "javascripts", "current-time.coffee"))
|
36
|
+
template("app.css", File.join(name, "app", "assets", "stylesheets", "app.css"))
|
37
|
+
template("main.scss", File.join(name, "app", "assets", "stylesheets", "main.scss"))
|
38
|
+
template("application.html.erb", File.join(name, "app", "views", "layouts", "application.html.erb"))
|
39
|
+
template("index.html.erb", File.join(name, "app", "views", "index.html.erb"))
|
40
|
+
template("about.html.erb", File.join(name, "app", "views", "about.html.erb"))
|
41
|
+
template("_partial.html.erb", File.join(name, "app", "views", "_partial.html.erb"))
|
42
|
+
template("jquery.js", File.join(name, "vendor", "assets", "javascripts", "jquery.js"))
|
43
|
+
template("bootstrap.css", File.join(name, "vendor", "assets", "stylesheets", "bootstrap.css"))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/hyperloop/response.rb
CHANGED
data/lib/hyperloop/version.rb
CHANGED
@@ -0,0 +1,90 @@
|
|
1
|
+
module Hyperloop
|
2
|
+
class View
|
3
|
+
class Registry
|
4
|
+
def initialize(root)
|
5
|
+
views_root = File.join([root, "app/views"].compact)
|
6
|
+
layout_path = views_root + "/layouts/application.html.erb"
|
7
|
+
|
8
|
+
# Get all the view paths. These look like:
|
9
|
+
#
|
10
|
+
# some/path/app/views/whatever.html.erb
|
11
|
+
# some/path/app/views/subdir/whatever.html.erb
|
12
|
+
# some/path/app/views/subdir/_partial.html.erb
|
13
|
+
view_paths = Dir.glob(views_root + "/**/*").reject {|fn| File.directory?(fn)}
|
14
|
+
view_paths -= [layout_path]
|
15
|
+
|
16
|
+
@template_views = {}
|
17
|
+
@partial_views = {}
|
18
|
+
|
19
|
+
view_paths.each do |path|
|
20
|
+
view = View.new(self, path, layout_path)
|
21
|
+
|
22
|
+
# The path under app/views. This will be something like:
|
23
|
+
#
|
24
|
+
# /whatever.html.erb
|
25
|
+
# /subdir/whatever.html.erb
|
26
|
+
# /subdir/_partial.html.erb
|
27
|
+
relative_path = path.sub(views_root, "")
|
28
|
+
|
29
|
+
# The path under app/views without a file extension (and without the
|
30
|
+
# starting _ for partials). This will be something like:
|
31
|
+
#
|
32
|
+
# /whatever
|
33
|
+
# /subdir/whatever
|
34
|
+
# /subdir/partial
|
35
|
+
request_dir = File.dirname(relative_path)
|
36
|
+
request_path = File.join(request_dir, view.name)
|
37
|
+
|
38
|
+
if view.partial?
|
39
|
+
# Chop off the leading forward slash for partials.
|
40
|
+
@partial_views[request_path.sub(/^\//, "")] = view
|
41
|
+
else
|
42
|
+
@template_views[request_path] = view
|
43
|
+
@template_views[request_dir] = view if view.name == "index"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Public: Get the template view for the specified path.
|
49
|
+
#
|
50
|
+
# path - Relative path for the view. Should start under the app/views
|
51
|
+
# directory and not include file extensions. Should start with a forward
|
52
|
+
# slash.
|
53
|
+
#
|
54
|
+
# Example:
|
55
|
+
#
|
56
|
+
# Assuming there's a file at path/to/yoursite/app/views/subdir/whatever.html.erb
|
57
|
+
#
|
58
|
+
# bad: registry.find_template_view("/app/views/subdir/whatever.html.erb")
|
59
|
+
# bad: registry.find_template_view("/subdir/whatever.html.erb")
|
60
|
+
# bad: registry.find_template_view("subdir/whatever")
|
61
|
+
# good: registry.find_template_view("/subdir/whatever")
|
62
|
+
#
|
63
|
+
# Returns a Hyperloop::View or nil if no view was found.
|
64
|
+
def find_template_view(path)
|
65
|
+
@template_views[path]
|
66
|
+
end
|
67
|
+
|
68
|
+
# Public: Get the partial view for the specified path.
|
69
|
+
#
|
70
|
+
# path - Relative path for the view. Should start under the app/views
|
71
|
+
# directory and not include file extensions, leading underscores, or
|
72
|
+
# leading forward slashes.
|
73
|
+
#
|
74
|
+
# Example:
|
75
|
+
#
|
76
|
+
# Assuming there's a file at path/to/yoursite/app/views/subdir/_partial.html.erb
|
77
|
+
#
|
78
|
+
# bad: registry.find_partial_view("app/views/subdir/_partial.html.erb")
|
79
|
+
# bad: registry.find_partial_view("subdir/_partial.html.erb")
|
80
|
+
# bad: registry.find_partial_view("subdir/_partial")
|
81
|
+
# bad: registry.find_partial_view("/subdir/partial")
|
82
|
+
# good: registry.find_partial_view("subdir/partial")
|
83
|
+
#
|
84
|
+
# Returns a Hyperloop::View or nil if no view was found.
|
85
|
+
def find_partial_view(path)
|
86
|
+
@partial_views[path]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "tilt"
|
2
|
+
|
3
|
+
module Hyperloop
|
4
|
+
class View
|
5
|
+
class Scope
|
6
|
+
attr_reader :request
|
7
|
+
|
8
|
+
def initialize(request, view_registry)
|
9
|
+
@request = request
|
10
|
+
@view_registry = view_registry
|
11
|
+
end
|
12
|
+
|
13
|
+
# Public: Render the specified partial.
|
14
|
+
#
|
15
|
+
# path - Path to look for the partial at.
|
16
|
+
#
|
17
|
+
# Returns a string.
|
18
|
+
def render(path)
|
19
|
+
@view_registry.find_partial_view(path).render(request)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require "erb"
|
2
|
+
require "tilt"
|
3
|
+
|
4
|
+
module Hyperloop
|
5
|
+
class View
|
6
|
+
def initialize(view_registry, full_path, layout_path=nil)
|
7
|
+
@view_registry = view_registry
|
8
|
+
@full_path = full_path
|
9
|
+
@data = File.read(@full_path)
|
10
|
+
|
11
|
+
# Only load layout data if all of these things are true:
|
12
|
+
#
|
13
|
+
# 1. We're not in a partial
|
14
|
+
# 2. A layout path was provided
|
15
|
+
# 3. There's a file at the provided layout path
|
16
|
+
if !partial? && layout_path && File.file?(layout_path)
|
17
|
+
@layout_data = File.read(layout_path)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Public: The format of the view. Derived from the view's extension.
|
22
|
+
#
|
23
|
+
# Returns a string.
|
24
|
+
def format
|
25
|
+
@format ||= File.extname(@full_path)[1..-1].intern
|
26
|
+
end
|
27
|
+
|
28
|
+
# Public: The name of the view. Derived from the view's filename without
|
29
|
+
# any extensions or leading underscores. Not guaranteed to be unique amongst
|
30
|
+
# other views in an app.
|
31
|
+
#
|
32
|
+
# Returns a string.
|
33
|
+
def name
|
34
|
+
@name ||= filename.split(".").first.sub(/^_/, "")
|
35
|
+
end
|
36
|
+
|
37
|
+
# Public: Is this view a partial?
|
38
|
+
#
|
39
|
+
# Returns a boolean.
|
40
|
+
def partial?
|
41
|
+
@partial ||= filename.start_with?("_")
|
42
|
+
end
|
43
|
+
|
44
|
+
# Public: Render the view.
|
45
|
+
#
|
46
|
+
# request - Rack request object that the view is being rendered in response
|
47
|
+
# to.
|
48
|
+
#
|
49
|
+
# Returns a string.
|
50
|
+
def render(request)
|
51
|
+
case format
|
52
|
+
when :html
|
53
|
+
@data
|
54
|
+
when :erb
|
55
|
+
scope = Scope.new(request, @view_registry)
|
56
|
+
view_html = Tilt["erb"].new { @data }.render(scope)
|
57
|
+
|
58
|
+
if @layout_data
|
59
|
+
layout_template = Tilt["erb"].new { @layout_data }
|
60
|
+
layout_template.render(scope) { view_html }
|
61
|
+
else
|
62
|
+
view_html
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def filename
|
70
|
+
@filename ||= File.basename(@full_path)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
data/lib/hyperloop.rb
CHANGED
data/spec/application_spec.rb
CHANGED
@@ -1,51 +1,187 @@
|
|
1
|
-
require
|
1
|
+
require File.expand_path("../spec_helper", __FILE__)
|
2
2
|
|
3
3
|
describe Hyperloop::Application do
|
4
|
-
describe
|
4
|
+
describe "with a flat views directory" do
|
5
5
|
before :each do
|
6
|
-
@app = Hyperloop::Application.new(
|
6
|
+
@app = Hyperloop::Application.new("spec/fixtures/simple/")
|
7
7
|
@request = Rack::MockRequest.new(@app)
|
8
8
|
end
|
9
9
|
|
10
|
-
it
|
11
|
-
response = @request.get(
|
10
|
+
it "responds successfully to a request for root" do
|
11
|
+
response = @request.get("/")
|
12
12
|
|
13
13
|
expect(response).to be_ok
|
14
|
-
expect(response.
|
14
|
+
expect(response.content_type).to eql("text/html")
|
15
|
+
expect(text_in(response.body, "h1")).to eql("Simple")
|
15
16
|
end
|
16
17
|
|
17
|
-
it
|
18
|
-
response = @request.get(
|
18
|
+
it "responds successfully to a request for a different page" do
|
19
|
+
response = @request.get("/about")
|
19
20
|
|
20
21
|
expect(response).to be_ok
|
21
|
-
expect(response.body).to
|
22
|
+
expect(text_in(response.body, "h1")).to eql("About")
|
22
23
|
end
|
23
24
|
|
24
|
-
it
|
25
|
-
response = @request.get(
|
25
|
+
it "responds successfully to a request with a trailing slash" do
|
26
|
+
response = @request.get("/about/")
|
27
|
+
|
28
|
+
expect(response).to be_ok
|
29
|
+
expect(text_in(response.body, "h1")).to eql("About")
|
30
|
+
end
|
31
|
+
|
32
|
+
it "404s on a request for a nonexistent page" do
|
33
|
+
response = @request.get("/nonexistent")
|
26
34
|
|
27
35
|
expect(response).to be_not_found
|
28
36
|
end
|
29
37
|
end
|
30
38
|
|
31
|
-
describe
|
39
|
+
describe "with subdirectories" do
|
40
|
+
before :each do
|
41
|
+
@app = Hyperloop::Application.new("spec/fixtures/subdirectories/")
|
42
|
+
@request = Rack::MockRequest.new(@app)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "responds successfully to a request for the subdirectory root" do
|
46
|
+
response = @request.get("/subdir1")
|
47
|
+
|
48
|
+
expect(response).to be_ok
|
49
|
+
expect(text_in(response.body, "h1")).to eql("Subdirectory Index")
|
50
|
+
end
|
51
|
+
|
52
|
+
it "responds successfully to a request for a different page in the subdirectory" do
|
53
|
+
response = @request.get("/subdir1/kanye")
|
54
|
+
|
55
|
+
expect(response).to be_ok
|
56
|
+
expect(text_in(response.body, "h1")).to eql("Hurry up with my damn croissant")
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "with ERB" do
|
61
|
+
before :each do
|
62
|
+
@app = Hyperloop::Application.new("spec/fixtures/erb/")
|
63
|
+
@request = Rack::MockRequest.new(@app)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "renders embedded Ruby in the root page" do
|
67
|
+
response = @request.get("/")
|
68
|
+
|
69
|
+
expect(response).to be_ok
|
70
|
+
expect(text_in(response.body, "h1")).to eql("WE ARE USING ERB")
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "with a layout" do
|
75
|
+
before :each do
|
76
|
+
@app = Hyperloop::Application.new("spec/fixtures/layouts/")
|
77
|
+
@request = Rack::MockRequest.new(@app)
|
78
|
+
end
|
79
|
+
|
80
|
+
it "renders the root view within the layout" do
|
81
|
+
response = @request.get("/")
|
82
|
+
|
83
|
+
expect(response).to be_ok
|
84
|
+
expect(text_in(response.body, "h1")).to eql("Layout Header")
|
85
|
+
expect(text_in(response.body, "h2")).to eql("This is the root page!")
|
86
|
+
end
|
87
|
+
|
88
|
+
it "renders subdirectory views within the layout" do
|
89
|
+
response = @request.get("/subdir")
|
90
|
+
|
91
|
+
expect(response).to be_ok
|
92
|
+
expect(text_in(response.body, "h1")).to eql("Layout Header")
|
93
|
+
expect(text_in(response.body, "h2")).to eql("This is a page in a subdirectory!")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe "with assets" do
|
32
98
|
before :each do
|
33
|
-
@app = Hyperloop::Application.new(
|
99
|
+
@app = Hyperloop::Application.new("spec/fixtures/assets/")
|
34
100
|
@request = Rack::MockRequest.new(@app)
|
35
101
|
end
|
36
102
|
|
37
|
-
it
|
38
|
-
response = @request.get(
|
103
|
+
it "responds successfully to a request for root" do
|
104
|
+
response = @request.get("/")
|
105
|
+
|
106
|
+
expect(response).to be_ok
|
107
|
+
expect(text_in(response.body, "h1")).to eql("This app has so many assets")
|
108
|
+
end
|
109
|
+
|
110
|
+
it "responds successfully to a request for the css app bundle" do
|
111
|
+
response = @request.get("/assets/stylesheets/app.css")
|
112
|
+
|
113
|
+
expect(response).to be_ok
|
114
|
+
expect(response.content_type).to eql("text/css")
|
115
|
+
expect(response.body).to match(/display: ?block/)
|
116
|
+
end
|
117
|
+
|
118
|
+
it "responds successfully to a request for the javascript app bundle" do
|
119
|
+
response = @request.get("/assets/javascripts/app.js")
|
120
|
+
|
121
|
+
expect(response).to be_ok
|
122
|
+
expect(response.content_type).to eql("application/javascript")
|
123
|
+
expect(response.body).to match(/alert\("such javascript wow"\)/)
|
124
|
+
end
|
125
|
+
|
126
|
+
it "responds successfully to a request for a vendored css file" do
|
127
|
+
response = @request.get("/assets/stylesheets/vendored.css")
|
128
|
+
|
129
|
+
expect(response).to be_ok
|
130
|
+
expect(response.content_type).to eql("text/css")
|
131
|
+
expect(response.body).to match(/margin: ?0/)
|
132
|
+
end
|
133
|
+
|
134
|
+
it "responds successfully to a request for a vendored javascript bundle" do
|
135
|
+
response = @request.get("/assets/javascripts/vendored.js")
|
136
|
+
|
137
|
+
expect(response).to be_ok
|
138
|
+
expect(response.content_type).to eql("application/javascript")
|
139
|
+
expect(response.body).to match(/alert\("i am vendored"\)/)
|
140
|
+
end
|
141
|
+
|
142
|
+
it "responds successfully to a request for a gif" do
|
143
|
+
response = @request.get("/assets/images/my-gif.gif")
|
144
|
+
|
145
|
+
expect(response).to be_ok
|
146
|
+
expect(response.content_type).to eql("image/gif")
|
147
|
+
expect(Digest::SHA1.hexdigest(response.body)).to eql("bcbc6e6fc1eb77b2ca676e17425df93a56495bb2")
|
148
|
+
end
|
149
|
+
|
150
|
+
it "responds successfully to a request for a jpg" do
|
151
|
+
response = @request.get("/assets/images/my-jpg.jpg")
|
39
152
|
|
40
153
|
expect(response).to be_ok
|
41
|
-
expect(response.
|
154
|
+
expect(response.content_type).to eql("image/jpeg")
|
155
|
+
expect(Digest::SHA1.hexdigest(response.body)).to eql("ae6a26b513d6648446da1395ee73e9cf32c8c668")
|
42
156
|
end
|
43
157
|
|
44
|
-
it
|
45
|
-
response = @request.get(
|
158
|
+
it "responds successfully to a request for a png" do
|
159
|
+
response = @request.get("/assets/images/my-png.png")
|
46
160
|
|
47
161
|
expect(response).to be_ok
|
48
|
-
expect(response.
|
162
|
+
expect(response.content_type).to eql("image/png")
|
163
|
+
expect(Digest::SHA1.hexdigest(response.body)).to eql("adf65c25a8e3e39c49ecf581433278d7eac4d1a2")
|
164
|
+
end
|
165
|
+
|
166
|
+
it "404s on a request for an asset without namespacing by type" do
|
167
|
+
response = @request.get("/assets/app.js")
|
168
|
+
expect(response).to be_not_found
|
169
|
+
end
|
170
|
+
|
171
|
+
it "404s on a request for an asset namespaced by the wrong type" do
|
172
|
+
response = @request.get("/assets/stylesheets/app.js")
|
173
|
+
expect(response).to be_not_found
|
174
|
+
end
|
175
|
+
|
176
|
+
it "404s on a request for an asset namespaced by an unknown type" do
|
177
|
+
response = @request.get("/assets/shouldfail/shouldfail.css")
|
178
|
+
expect(response).to be_not_found
|
179
|
+
end
|
180
|
+
|
181
|
+
it "404s on a request for a nonexistent asset" do
|
182
|
+
response = @request.get("/assets/javascripts/nonexistent.js")
|
183
|
+
|
184
|
+
expect(response).to be_not_found
|
49
185
|
end
|
50
186
|
end
|
51
187
|
end
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require_tree
|
@@ -0,0 +1 @@
|
|
1
|
+
alert "such javascript wow"
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require_tree
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>App With Assets</title>
|
5
|
+
|
6
|
+
<link href="/assets/app.css" media="all" rel="stylesheet" type="text/css">
|
7
|
+
<script src="/assets/app.js" type="text/javascript"></script>
|
8
|
+
</head>
|
9
|
+
|
10
|
+
<body>
|
11
|
+
<h1>This app has so many assets</h1>
|
12
|
+
|
13
|
+
<%= yield %>
|
14
|
+
</body>
|
15
|
+
</html>
|
@@ -0,0 +1 @@
|
|
1
|
+
alert("i am vendored");
|
@@ -0,0 +1 @@
|
|
1
|
+
<p>This is coming from a partial.</p>
|
data/spec/response_spec.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
require
|
1
|
+
require File.expand_path("../spec_helper", __FILE__)
|
2
2
|
|
3
3
|
describe Hyperloop::Response do
|
4
|
-
it
|
5
|
-
response = Hyperloop::Response.new(
|
4
|
+
it "has a body" do
|
5
|
+
response = Hyperloop::Response.new("irrelevant")
|
6
6
|
expect(response.body).not_to be_empty
|
7
7
|
end
|
8
8
|
end
|