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.
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