hyperloop 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -0
  3. data/Gemfile +1 -1
  4. data/README.md +89 -11
  5. data/Rakefile +5 -0
  6. data/bin/hyperloop +7 -0
  7. data/hyperloop.gemspec +12 -3
  8. data/lib/hyperloop/application.rb +56 -16
  9. data/lib/hyperloop/cli.rb +11 -0
  10. data/lib/hyperloop/generators/site/Gemfile +3 -0
  11. data/lib/hyperloop/generators/site/_partial.html.erb +1 -0
  12. data/lib/hyperloop/generators/site/about.html.erb +3 -0
  13. data/lib/hyperloop/generators/site/app.css +2 -0
  14. data/lib/hyperloop/generators/site/app.js +2 -0
  15. data/lib/hyperloop/generators/site/application.html.erb +23 -0
  16. data/lib/hyperloop/generators/site/bootstrap.css +6805 -0
  17. data/lib/hyperloop/generators/site/config.ru +4 -0
  18. data/lib/hyperloop/generators/site/current-time.coffee +3 -0
  19. data/lib/hyperloop/generators/site/index.html.erb +11 -0
  20. data/lib/hyperloop/generators/site/jquery.js +8829 -0
  21. data/lib/hyperloop/generators/site/main.scss +7 -0
  22. data/lib/hyperloop/generators/site/socool.jpg +0 -0
  23. data/lib/hyperloop/generators/site.rb +47 -0
  24. data/lib/hyperloop/response.rb +2 -2
  25. data/lib/hyperloop/version.rb +1 -1
  26. data/lib/hyperloop/view/registry.rb +90 -0
  27. data/lib/hyperloop/view/scope.rb +23 -0
  28. data/lib/hyperloop/view.rb +73 -0
  29. data/lib/hyperloop.rb +3 -1
  30. data/spec/application_spec.rb +155 -19
  31. data/spec/fixtures/assets/app/assets/images/my-gif.gif +0 -0
  32. data/spec/fixtures/assets/app/assets/images/my-jpg.jpg +0 -0
  33. data/spec/fixtures/assets/app/assets/images/my-png.png +0 -0
  34. data/spec/fixtures/assets/app/assets/javascripts/app.js +1 -0
  35. data/spec/fixtures/assets/app/assets/javascripts/my-scripts.coffee +1 -0
  36. data/spec/fixtures/assets/app/assets/shouldfail/shouldfail.css +3 -0
  37. data/spec/fixtures/assets/app/assets/stylesheets/app.css +1 -0
  38. data/spec/fixtures/assets/app/assets/stylesheets/my-styles.scss +3 -0
  39. data/spec/fixtures/assets/app/views/index.html.erb +7 -0
  40. data/spec/fixtures/assets/app/views/layouts/application.html.erb +15 -0
  41. data/spec/fixtures/assets/vendor/assets/javascripts/vendored.js +1 -0
  42. data/spec/fixtures/assets/vendor/assets/stylesheets/vendored.css +3 -0
  43. data/spec/fixtures/erb/app/views/about.html.erb +10 -0
  44. data/spec/fixtures/erb/app/views/index.html.erb +10 -0
  45. data/spec/fixtures/layouts/app/views/index.html.erb +3 -0
  46. data/spec/fixtures/layouts/app/views/layouts/application.html.erb +12 -0
  47. data/spec/fixtures/layouts/app/views/subdir/index.html.erb +3 -0
  48. data/spec/fixtures/partials/app/views/index.html.erb +3 -0
  49. data/spec/fixtures/partials/app/views/layouts/application.html.erb +12 -0
  50. data/spec/fixtures/partials/app/views/subdir/_partial.html.erb +1 -0
  51. data/spec/fixtures/partials/app/views/subdir/index.html.erb +3 -0
  52. data/spec/fixtures/partials/app/views/subdir/nonroot.html.erb +3 -0
  53. data/spec/response_spec.rb +3 -3
  54. data/spec/spec_helper.rb +34 -0
  55. data/spec/view/registry_spec.rb +56 -0
  56. data/spec/view/scope_spec.rb +21 -0
  57. data/spec/view_spec.rb +93 -0
  58. metadata +202 -3
@@ -0,0 +1,34 @@
1
+ require "nokogiri"
2
+ require "pry"
3
+
4
+ require "hyperloop"
5
+
6
+ module Helpers
7
+ def html(str)
8
+ Nokogiri::HTML(str)
9
+ end
10
+
11
+ def mock_view_registry
12
+ @mock_view_registry ||= double("Hyperloop::View::Registry",
13
+ :find_partial_view => nil,
14
+ :find_template_view => nil
15
+ )
16
+ end
17
+
18
+ def text_in(html_str, selector)
19
+ node = html(html_str).at_css(selector)
20
+ node && node.text
21
+ end
22
+
23
+ def mock_app
24
+ @mock_app ||= double("rack app", :call => Hyperloop::Response.new.finish )
25
+ end
26
+
27
+ def mock_request
28
+ Rack::MockRequest.new(mock_app)
29
+ end
30
+ end
31
+
32
+ RSpec.configure do |c|
33
+ c.include(Helpers)
34
+ end
@@ -0,0 +1,56 @@
1
+ describe Hyperloop::View::Registry do
2
+ before :each do
3
+ @registry = Hyperloop::View::Registry.new("spec/fixtures/partials/")
4
+ end
5
+
6
+ describe "#find_template_view" do
7
+ it "finds the root view" do
8
+ expect(@registry.find_template_view("/").name).to eql("index")
9
+ end
10
+
11
+ it "finds a root view in a subdirectory" do
12
+ expect(@registry.find_template_view("/subdir").name).to eql("index")
13
+ end
14
+
15
+ it "finds a non-root view in a subdirectory" do
16
+ expect(@registry.find_template_view("/subdir/nonroot").name).to eql("nonroot")
17
+ end
18
+
19
+ it "doesn't find partials" do
20
+ expect(@registry.find_template_view("/subdir/partial")).to be_nil
21
+ expect(@registry.find_template_view("/subdir/_partial")).to be_nil
22
+ expect(@registry.find_template_view("subdir/partial")).to be_nil
23
+ expect(@registry.find_template_view("subdir/_partial")).to be_nil
24
+ end
25
+
26
+ it "doesn't find layouts" do
27
+ expect(@registry.find_template_view("/layouts/application")).to be_nil
28
+ end
29
+ end
30
+
31
+ describe "#find_partial_view" do
32
+ it "finds partials" do
33
+ expect(@registry.find_partial_view("subdir/partial").name).to eql("partial")
34
+ end
35
+
36
+ it "doesn't find partials if the filename in the path is prefixed with an underscore" do
37
+ expect(@registry.find_partial_view("subdir/_partial")).to be_nil
38
+ end
39
+
40
+ it "doesn't find partials if the path is prefixed with a forward slash" do
41
+ expect(@registry.find_partial_view("/subdir/partial")).to be_nil
42
+ end
43
+
44
+ it "doesn't find template views" do
45
+ expect(@registry.find_partial_view("/")).to be_nil
46
+ expect(@registry.find_partial_view("/subdir")).to be_nil
47
+ expect(@registry.find_partial_view("/subdir/nonroot")).to be_nil
48
+ expect(@registry.find_partial_view("subdir/nonroot")).to be_nil
49
+ end
50
+
51
+ it "doesn't find layouts" do
52
+ expect(@registry.find_partial_view("/subdir/layouts/application")).to be_nil
53
+ expect(@registry.find_partial_view("subdir/layouts/application")).to be_nil
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,21 @@
1
+ describe Hyperloop::View::Scope do
2
+ before :each do
3
+ view_registry = Hyperloop::View::Registry.new("spec/fixtures/partials/")
4
+ @request = Rack::MockRequest.new(mock_app)
5
+ @scope = Hyperloop::View::Scope.new(@request, view_registry)
6
+ end
7
+
8
+ describe "#request" do
9
+ it "is the request that the scope will be used in response to" do
10
+ expect(@scope.request).to eql(@request)
11
+ end
12
+ end
13
+
14
+ describe "#render" do
15
+ it "renders the specified partial" do
16
+ html = @scope.render("subdir/partial")
17
+
18
+ expect(text_in(html, "p")).to eql("This is coming from a partial.")
19
+ end
20
+ end
21
+ end
data/spec/view_spec.rb ADDED
@@ -0,0 +1,93 @@
1
+ require File.expand_path("../spec_helper", __FILE__)
2
+
3
+ describe Hyperloop::View do
4
+ before :each do
5
+ @html_view = Hyperloop::View.new(mock_view_registry,
6
+ "spec/fixtures/simple/app/views/about.html"
7
+ )
8
+
9
+ @erb_view = Hyperloop::View.new(mock_view_registry,
10
+ "spec/fixtures/erb/app/views/about.html.erb"
11
+ )
12
+
13
+ @layout_view = Hyperloop::View.new(mock_view_registry,
14
+ "spec/fixtures/layouts/app/views/index.html.erb",
15
+ "spec/fixtures/layouts/app/views/layouts/application.html.erb"
16
+ )
17
+
18
+ partials_view_registry = Hyperloop::View::Registry.new("spec/fixtures/partials/")
19
+ @partial_container = partials_view_registry.find_template_view("/")
20
+ @partial_view = partials_view_registry.find_partial_view("subdir/partial")
21
+ end
22
+
23
+ describe "#format" do
24
+ it "is :html for HTML files" do
25
+ expect(@html_view.format).to eql(:html)
26
+ end
27
+
28
+ it "is :erb for ERB files" do
29
+ expect(@erb_view.format).to eql(:erb)
30
+ end
31
+ end
32
+
33
+ describe "#name" do
34
+ it "strips the extension from plain HTML files" do
35
+ expect(@html_view.name).to eql("about")
36
+ end
37
+
38
+ it "strips the extension from ERB files" do
39
+ expect(@erb_view.name).to eql("about")
40
+ end
41
+
42
+ it "strips the leading underscore for partials" do
43
+ expect(@partial_view.name).to eql("partial")
44
+ end
45
+ end
46
+
47
+ describe "#partial?" do
48
+ it "is false for a template view" do
49
+ expect(@partial_container).not_to be_partial
50
+ end
51
+
52
+ it "is true for a partial view" do
53
+ expect(@partial_view).to be_partial
54
+ end
55
+ end
56
+
57
+ describe "#render" do
58
+ it "renders plain HTML files" do
59
+ html = @html_view.render(mock_request)
60
+
61
+ expect(text_in(html, "h1")).to eql("About")
62
+ end
63
+
64
+ it "renders ERB files" do
65
+ html = @erb_view.render(mock_request)
66
+
67
+ expect(text_in(html, "h1")).to eql("I was born on December 21")
68
+ end
69
+
70
+ it "renders ERB files in layouts" do
71
+ html = @layout_view.render(mock_request)
72
+
73
+ expect(text_in(html, "h1")).to eql("Layout Header")
74
+ expect(text_in(html, "h2")).to eql("This is the root page!")
75
+ end
76
+
77
+ it "renders ERB files containing partials" do
78
+ html = @partial_container.render(mock_request)
79
+
80
+ expect(text_in(html, "h1")).to eql("Partials work in this app")
81
+ expect(text_in(html, "h2")).to eql("This part of the root page is not in a partial!")
82
+ expect(text_in(html, "p")).to eql("This is coming from a partial.")
83
+ end
84
+
85
+ it "renders ERB partials" do
86
+ html = @partial_view.render(mock_request)
87
+
88
+ expect(text_in(html, "h1")).not_to eql("Partials work in this app")
89
+ expect(text_in(html, "h2")).not_to eql("This part of the root page is not in a partial!")
90
+ expect(text_in(html, "p")).to eql("This is coming from a partial.")
91
+ end
92
+ end
93
+ end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyperloop
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jake Boxer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-21 00:00:00.000000000 Z
11
+ date: 2013-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: coffee-script
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 2.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 2.2.0
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rack
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +38,76 @@ dependencies:
24
38
  - - ~>
25
39
  - !ruby/object:Gem::Version
26
40
  version: '1.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sass
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 3.2.12
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 3.2.12
55
+ - !ruby/object:Gem::Dependency
56
+ name: sprockets
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.10.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 2.10.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: thor
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 0.18.1
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 0.18.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: tilt
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 1.4.1
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 1.4.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: yui-compressor
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 0.12.0
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 0.12.0
27
111
  - !ruby/object:Gem::Dependency
28
112
  name: bundler
29
113
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +122,48 @@ dependencies:
38
122
  - - ~>
39
123
  - !ruby/object:Gem::Version
40
124
  version: '1.3'
125
+ - !ruby/object:Gem::Dependency
126
+ name: nokogiri
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: 1.6.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ~>
137
+ - !ruby/object:Gem::Version
138
+ version: 1.6.0
139
+ - !ruby/object:Gem::Dependency
140
+ name: pry
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: pry-debugger
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
41
167
  - !ruby/object:Gem::Dependency
42
168
  name: rake
43
169
  requirement: !ruby/object:Gem::Requirement
@@ -70,22 +196,65 @@ description: Hyperloop lets you make simple websites with a technology stack fam
70
196
  to Rails programmers.
71
197
  email:
72
198
  - jake@github.com
73
- executables: []
199
+ executables:
200
+ - hyperloop
74
201
  extensions: []
75
202
  extra_rdoc_files: []
76
203
  files:
77
204
  - .gitignore
78
205
  - .ruby-version
206
+ - .travis.yml
79
207
  - Gemfile
80
208
  - LICENSE.txt
81
209
  - README.md
82
210
  - Rakefile
211
+ - bin/hyperloop
83
212
  - hyperloop.gemspec
84
213
  - lib/hyperloop.rb
85
214
  - lib/hyperloop/application.rb
215
+ - lib/hyperloop/cli.rb
216
+ - lib/hyperloop/generators/site.rb
217
+ - lib/hyperloop/generators/site/Gemfile
218
+ - lib/hyperloop/generators/site/_partial.html.erb
219
+ - lib/hyperloop/generators/site/about.html.erb
220
+ - lib/hyperloop/generators/site/app.css
221
+ - lib/hyperloop/generators/site/app.js
222
+ - lib/hyperloop/generators/site/application.html.erb
223
+ - lib/hyperloop/generators/site/bootstrap.css
224
+ - lib/hyperloop/generators/site/config.ru
225
+ - lib/hyperloop/generators/site/current-time.coffee
226
+ - lib/hyperloop/generators/site/index.html.erb
227
+ - lib/hyperloop/generators/site/jquery.js
228
+ - lib/hyperloop/generators/site/main.scss
229
+ - lib/hyperloop/generators/site/socool.jpg
86
230
  - lib/hyperloop/response.rb
87
231
  - lib/hyperloop/version.rb
232
+ - lib/hyperloop/view.rb
233
+ - lib/hyperloop/view/registry.rb
234
+ - lib/hyperloop/view/scope.rb
88
235
  - spec/application_spec.rb
236
+ - spec/fixtures/assets/app/assets/images/my-gif.gif
237
+ - spec/fixtures/assets/app/assets/images/my-jpg.jpg
238
+ - spec/fixtures/assets/app/assets/images/my-png.png
239
+ - spec/fixtures/assets/app/assets/javascripts/app.js
240
+ - spec/fixtures/assets/app/assets/javascripts/my-scripts.coffee
241
+ - spec/fixtures/assets/app/assets/shouldfail/shouldfail.css
242
+ - spec/fixtures/assets/app/assets/stylesheets/app.css
243
+ - spec/fixtures/assets/app/assets/stylesheets/my-styles.scss
244
+ - spec/fixtures/assets/app/views/index.html.erb
245
+ - spec/fixtures/assets/app/views/layouts/application.html.erb
246
+ - spec/fixtures/assets/vendor/assets/javascripts/vendored.js
247
+ - spec/fixtures/assets/vendor/assets/stylesheets/vendored.css
248
+ - spec/fixtures/erb/app/views/about.html.erb
249
+ - spec/fixtures/erb/app/views/index.html.erb
250
+ - spec/fixtures/layouts/app/views/index.html.erb
251
+ - spec/fixtures/layouts/app/views/layouts/application.html.erb
252
+ - spec/fixtures/layouts/app/views/subdir/index.html.erb
253
+ - spec/fixtures/partials/app/views/index.html.erb
254
+ - spec/fixtures/partials/app/views/layouts/application.html.erb
255
+ - spec/fixtures/partials/app/views/subdir/_partial.html.erb
256
+ - spec/fixtures/partials/app/views/subdir/index.html.erb
257
+ - spec/fixtures/partials/app/views/subdir/nonroot.html.erb
89
258
  - spec/fixtures/simple/app/views/about.html
90
259
  - spec/fixtures/simple/app/views/index.html
91
260
  - spec/fixtures/subdirectories/app/views/about.html
@@ -93,6 +262,10 @@ files:
93
262
  - spec/fixtures/subdirectories/app/views/subdir1/index.html
94
263
  - spec/fixtures/subdirectories/app/views/subdir1/kanye.html
95
264
  - spec/response_spec.rb
265
+ - spec/spec_helper.rb
266
+ - spec/view/registry_spec.rb
267
+ - spec/view/scope_spec.rb
268
+ - spec/view_spec.rb
96
269
  homepage: ''
97
270
  licenses:
98
271
  - MIT
@@ -119,6 +292,28 @@ specification_version: 4
119
292
  summary: Make simple websites with Rails conventions and conveniences.
120
293
  test_files:
121
294
  - spec/application_spec.rb
295
+ - spec/fixtures/assets/app/assets/images/my-gif.gif
296
+ - spec/fixtures/assets/app/assets/images/my-jpg.jpg
297
+ - spec/fixtures/assets/app/assets/images/my-png.png
298
+ - spec/fixtures/assets/app/assets/javascripts/app.js
299
+ - spec/fixtures/assets/app/assets/javascripts/my-scripts.coffee
300
+ - spec/fixtures/assets/app/assets/shouldfail/shouldfail.css
301
+ - spec/fixtures/assets/app/assets/stylesheets/app.css
302
+ - spec/fixtures/assets/app/assets/stylesheets/my-styles.scss
303
+ - spec/fixtures/assets/app/views/index.html.erb
304
+ - spec/fixtures/assets/app/views/layouts/application.html.erb
305
+ - spec/fixtures/assets/vendor/assets/javascripts/vendored.js
306
+ - spec/fixtures/assets/vendor/assets/stylesheets/vendored.css
307
+ - spec/fixtures/erb/app/views/about.html.erb
308
+ - spec/fixtures/erb/app/views/index.html.erb
309
+ - spec/fixtures/layouts/app/views/index.html.erb
310
+ - spec/fixtures/layouts/app/views/layouts/application.html.erb
311
+ - spec/fixtures/layouts/app/views/subdir/index.html.erb
312
+ - spec/fixtures/partials/app/views/index.html.erb
313
+ - spec/fixtures/partials/app/views/layouts/application.html.erb
314
+ - spec/fixtures/partials/app/views/subdir/_partial.html.erb
315
+ - spec/fixtures/partials/app/views/subdir/index.html.erb
316
+ - spec/fixtures/partials/app/views/subdir/nonroot.html.erb
122
317
  - spec/fixtures/simple/app/views/about.html
123
318
  - spec/fixtures/simple/app/views/index.html
124
319
  - spec/fixtures/subdirectories/app/views/about.html
@@ -126,3 +321,7 @@ test_files:
126
321
  - spec/fixtures/subdirectories/app/views/subdir1/index.html
127
322
  - spec/fixtures/subdirectories/app/views/subdir1/kanye.html
128
323
  - spec/response_spec.rb
324
+ - spec/spec_helper.rb
325
+ - spec/view/registry_spec.rb
326
+ - spec/view/scope_spec.rb
327
+ - spec/view_spec.rb