flatrack 1.3.3 → 1.4.1

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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +3 -6
  5. data/flatrack.gemspec +4 -3
  6. data/lib/custom-extensions/sprockets-sass.rb +32 -0
  7. data/lib/flatrack.rb +123 -11
  8. data/lib/flatrack/asset_extensions.rb +7 -1
  9. data/lib/flatrack/cli.rb +9 -1
  10. data/lib/flatrack/domain_parser.rb +13 -0
  11. data/lib/flatrack/middleware.rb +32 -0
  12. data/lib/flatrack/redirector.rb +63 -0
  13. data/lib/flatrack/request.rb +16 -2
  14. data/lib/flatrack/response.rb +7 -8
  15. data/lib/flatrack/rewriter.rb +32 -0
  16. data/lib/flatrack/sass/functions.rb +6 -6
  17. data/lib/flatrack/sass/importer.rb +7 -7
  18. data/lib/flatrack/sass/sass_template.rb +6 -6
  19. data/lib/flatrack/site.rb +2 -27
  20. data/lib/flatrack/template.rb +27 -8
  21. data/lib/flatrack/template/erubis.rb +2 -2
  22. data/lib/flatrack/template/html.rb +2 -2
  23. data/lib/flatrack/template/rb.rb +2 -2
  24. data/lib/flatrack/version.rb +1 -1
  25. data/lib/flatrack/view.rb +1 -1
  26. data/lib/flatrack/view/capture_helper.rb +1 -2
  27. data/lib/flatrack/view/link_helper.rb +8 -1
  28. data/lib/flatrack/view/render_helper.rb +1 -1
  29. data/lib/flatrack/view/request_helper.rb +23 -2
  30. data/lib/flatrack/view/tag_helper.rb +19 -11
  31. data/spec/lib/flatrack/cli_spec.rb +28 -2
  32. data/spec/lib/flatrack/middleware_spec.rb +55 -0
  33. data/spec/lib/flatrack/site_spec.rb +3 -5
  34. data/spec/lib/flatrack/view/render_helper_spec.rb +4 -0
  35. data/spec/lib/flatrack/view/set_layout_spec.rb +1 -1
  36. data/spec/lib/flatrack/view/tag_helper_spec.rb +9 -0
  37. data/spec/lib/flatrack/view_spec.rb +1 -1
  38. data/spec/lib/flatrack_spec.rb +73 -0
  39. data/spec/lib/rake/asset_tasks_spec.rb +2 -2
  40. data/spec/spec_helper.rb +1 -0
  41. data/spec/support/fixture_helper.rb +1 -1
  42. data/spec/support/site_helper.rb +3 -1
  43. metadata +32 -9
@@ -25,12 +25,13 @@ describe Flatrack::CLI do
25
25
  retries = 0
26
26
  begin
27
27
  Net::HTTP.get URI.parse 'http://localhost:5959'
28
- thread.kill
29
28
  rescue Errno::ECONNREFUSED => error
30
29
  retries += 1
31
30
  sleep 0.1
32
31
  retry unless retries > 100
33
32
  raise error
33
+ ensure
34
+ thread.kill
34
35
  end
35
36
  end
36
37
  end.to_not raise_error
@@ -45,16 +46,41 @@ describe Flatrack::CLI do
45
46
  retries = 0
46
47
  begin
47
48
  Net::HTTP.get URI.parse 'http://localhost:8282'
48
- thread.kill
49
49
  rescue Errno::ECONNREFUSED => error
50
50
  retries += 1
51
51
  sleep 0.1
52
52
  retry unless retries > 100
53
53
  raise error
54
+ ensure
55
+ thread.kill
54
56
  end
55
57
  end
56
58
  end.to_not raise_error
57
59
  end
60
+
61
+ context 'without a boot.rb' do
62
+ it 'should start the rack server' do
63
+ expect do
64
+ site do
65
+ FileUtils.rm 'boot.rb'
66
+ thread = Thread.new do
67
+ Flatrack::CLI.start(%w(start --port 8283 --verbose false))
68
+ end
69
+ retries = 0
70
+ begin
71
+ Net::HTTP.get URI.parse 'http://localhost:8283'
72
+ rescue Errno::ECONNREFUSED => error
73
+ retries += 1
74
+ sleep 0.1
75
+ retry unless retries > 100
76
+ raise error
77
+ ensure
78
+ thread.kill
79
+ end
80
+ end
81
+ end.to_not raise_error
82
+ end
83
+ end
58
84
  end
59
85
 
60
86
  describe '--version' do
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe Flatrack::Middleware do
4
+ include Flatrack::SiteHelper
5
+
6
+ def request(path)
7
+ url = URI.parse 'http://example.com'
8
+ url.path = File.join '/', path
9
+ env = Rack::MockRequest.env_for url.to_s
10
+ middleware.call env
11
+ end
12
+
13
+ let(:flatrack_app) { Flatrack::Site }
14
+ let(:app) { ->(_) { [200, {}, ['OK']] } }
15
+ let(:middleware) { described_class.new app, flatrack_app: flatrack_app }
16
+
17
+ context 'given a status of 404' do
18
+ it 'should call the original app' do
19
+ site do
20
+ expect(app).to receive(:call)
21
+ request '/nothing_here'
22
+ end
23
+ end
24
+ end
25
+
26
+ context 'when a NotFound error is raised' do
27
+ it 'should call the original app' do
28
+ site do
29
+ Flatrack.config { |site| site.raise_errors = true }
30
+ expect(app).to receive(:call)
31
+ request '/nothing_here'
32
+ end
33
+ end
34
+ end
35
+
36
+ context 'when the response is 200' do
37
+ it 'should not call the original app' do
38
+ site do
39
+ expect(app).to_not receive(:call)
40
+ request '/'
41
+ end
42
+ end
43
+ end
44
+
45
+ context 'when the response is 500' do
46
+ it 'should not call the original app' do
47
+ site do
48
+ write :page, 'bad_render.html.ggr', ''
49
+ expect(app).to_not receive(:call)
50
+ request '/bad_render'
51
+ end
52
+ end
53
+ end
54
+
55
+ end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Flatrack::Site do
4
4
  let(:mock_app) { ->(env) { [200, {}, ['ok']] } }
5
- let(:mock_env) { Rack::MockRequest.env_for('example.org', {}) }
5
+ let(:mock_env) { Flatrack.mock_env_for('example.org', {}) }
6
6
 
7
7
  it 'should be a rack app' do
8
8
  expect(described_class).to respond_to :call
@@ -26,9 +26,7 @@ describe Flatrack::Site do
26
26
  Flatrack.config do |site|
27
27
  middlewares.each do |middleware|
28
28
  expect_any_instance_of(middleware)
29
- .to receive(:call)
30
- .with(mock_env)
31
- .and_call_original
29
+ .to receive(:call).with(mock_env).and_call_original
32
30
  site.use middleware
33
31
  end
34
32
  end
@@ -38,7 +36,7 @@ describe Flatrack::Site do
38
36
 
39
37
  it 'should formulate a proper response' do
40
38
  expect(Flatrack::Request).to receive(:new).and_call_original
41
- expect_any_instance_of(Flatrack::Request).to receive(:response)
39
+ expect_any_instance_of(Flatrack::Request).to receive(:response).and_call_original
42
40
  Flatrack::Site.call(mock_env)
43
41
  end
44
42
  end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe Flatrack::View::RenderHelper do
4
+ end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Flatrack::View do
4
4
  def render_template(fixture)
5
5
  path = File.join Flatrack.gem_root, '../spec/fixtures/templates', fixture
6
- env = Rack::MockRequest.env_for 'http://example.com'
6
+ env = Flatrack.mock_env_for 'http://example.com'
7
7
  req = Flatrack::Request.new env
8
8
  _, _, body = Flatrack::Response.new(req).render(file: path)
9
9
  body.first.lines.map(&:strip).join
@@ -20,6 +20,15 @@ describe Flatrack::View::TagHelper do
20
20
  end
21
21
  end
22
22
 
23
+ context 'with in invalid number of arguments' do
24
+ it 'should raise an error' do
25
+ mock = double
26
+ mock.extend Flatrack::View::TagHelper
27
+ expect { mock.html_tag :foo, 'bar', { baz: :raz }, false, true }
28
+ .to raise_error ArgumentError
29
+ end
30
+ end
31
+
23
32
  end
24
33
 
25
34
  describe '#image_tag' do
@@ -4,7 +4,7 @@ describe Flatrack::View do
4
4
  include Flatrack::SiteHelper
5
5
 
6
6
  let(:uri) { URI.parse 'http://example.org/index.html' }
7
- let(:env) { Rack::MockRequest.env_for uri.to_s }
7
+ let(:env) { Flatrack.mock_env_for uri.to_s }
8
8
  let(:request) { Flatrack::Request.new env }
9
9
  let(:response) { Flatrack::Response.new request }
10
10
  subject(:view) { described_class.new response }
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Flatrack do
4
+ include Flatrack::SiteHelper
4
5
 
5
6
  describe '.gem_root' do
6
7
  it 'should be the root of the gem' do
@@ -25,4 +26,76 @@ describe Flatrack do
25
26
  end
26
27
  end
27
28
 
29
+ describe '.redirect' do
30
+ it 'should redirect requests with a 301' do
31
+ site do
32
+ Flatrack.config do |site|
33
+ site.redirect '/foo', to: '/bar'
34
+ end
35
+ status, headers, _ = get_page_response '/foo'
36
+ expect(status).to eq 301
37
+ expect(headers['location']).to eq '/bar'
38
+ end
39
+ end
40
+
41
+ context 'when an argument is not a string' do
42
+ it 'should raise an error' do
43
+ Flatrack.config do |site|
44
+ expect { site.redirect :bar, to: '/' }
45
+ .to raise_error ArgumentError
46
+ end
47
+ end
48
+ end
49
+
50
+ context 'with type :permanent' do
51
+ it 'should redirect requests with a 301' do
52
+ site do
53
+ Flatrack.config do |site|
54
+ site.redirect '/foo', to: '/bar', type: :permanent
55
+ end
56
+ status, headers, _ = get_page_response '/foo'
57
+ expect(status).to eq 301
58
+ expect(headers['location']).to eq '/bar'
59
+ end
60
+ end
61
+ end
62
+
63
+ context 'with type :temporary' do
64
+ it 'should redirect requests with a 302' do
65
+ site do
66
+ Flatrack.config do |site|
67
+ site.redirect '/foo', to: '/bar', type: :temporary
68
+ end
69
+ status, headers, _ = get_page_response '/foo'
70
+ expect(status).to eq 302
71
+ expect(headers['location']).to eq '/bar'
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ describe '.rewrite' do
78
+ it 'should rewrite a path' do
79
+ site do
80
+ write :page, 'bar.html.rb', '"page is #{current_page}"'
81
+ Flatrack.config do |site|
82
+ site.raise_errors = true
83
+ site.rewrite '/foo', to: '/bar.html'
84
+ end
85
+ status, _, body = get_page_response '/foo'
86
+ expect(status).to eq 200
87
+ expect(body.body.first).to include 'page is /bar.html'
88
+ end
89
+ end
90
+
91
+ context 'when an argument is not a string' do
92
+ it 'should raise an error' do
93
+ Flatrack.config do |site|
94
+ expect { site.rewrite :bar, to: '/' }
95
+ .to raise_error ArgumentError
96
+ end
97
+ end
98
+ end
99
+ end
100
+
28
101
  end
@@ -6,7 +6,7 @@ describe Rake::AssetTasks do
6
6
  include FileUtils
7
7
  include Flatrack::SiteHelper
8
8
 
9
- before(:all) do
9
+ before(:each) do
10
10
  @sha = site(clean: false) do
11
11
  @rake = Rake::Application.new
12
12
  Rake.application = @rake
@@ -21,7 +21,7 @@ describe Rake::AssetTasks do
21
21
  end
22
22
  end
23
23
 
24
- after(:all) do
24
+ after(:each) do
25
25
  Rake.application = nil
26
26
  cleanup(@sha)
27
27
  rm_rf(@dir)
@@ -21,4 +21,5 @@ RSpec.configure do |config|
21
21
  config.run_all_when_everything_filtered = true
22
22
  config.filter_run focus: true
23
23
  config.before(:each) { Flatrack.reset! }
24
+ config.after(:suite){ FileUtils.rm_rf 'tmp' }
24
25
  end
@@ -24,7 +24,7 @@ class Flatrack
24
24
  end
25
25
 
26
26
  def env
27
- Rack::MockRequest.env_for 'http://example.org/index.html'
27
+ Flatrack.mock_env_for 'http://example.org/index.html'
28
28
  end
29
29
  end
30
30
  end
@@ -33,7 +33,9 @@ class Flatrack
33
33
  end
34
34
 
35
35
  def get_page_response(page)
36
- env = Rack::MockRequest.env_for "http://example.org/#{page}.html"
36
+ url = URI.parse 'http://example.org'
37
+ url.path = File.join '', page
38
+ env = Rack::MockRequest.env_for url.to_s
37
39
  Flatrack::Site.call(env)
38
40
  end
39
41
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flatrack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Waldrip
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-28 00:00:00.000000000 Z
11
+ date: 2015-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rack-contrib
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.2'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: erubis
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -61,7 +75,7 @@ dependencies:
61
75
  version: '3.2'
62
76
  - - "<"
63
77
  - !ruby/object:Gem::Version
64
- version: '4.2'
78
+ version: '5.0'
65
79
  type: :runtime
66
80
  prerelease: false
67
81
  version_requirements: !ruby/object:Gem::Requirement
@@ -71,21 +85,21 @@ dependencies:
71
85
  version: '3.2'
72
86
  - - "<"
73
87
  - !ruby/object:Gem::Version
74
- version: '4.2'
88
+ version: '5.0'
75
89
  - !ruby/object:Gem::Dependency
76
90
  name: sass
77
91
  requirement: !ruby/object:Gem::Requirement
78
92
  requirements:
79
93
  - - "~>"
80
94
  - !ruby/object:Gem::Version
81
- version: 3.2.0
95
+ version: '3.2'
82
96
  type: :runtime
83
97
  prerelease: false
84
98
  version_requirements: !ruby/object:Gem::Requirement
85
99
  requirements:
86
100
  - - "~>"
87
101
  - !ruby/object:Gem::Version
88
- version: 3.2.0
102
+ version: '3.2'
89
103
  - !ruby/object:Gem::Dependency
90
104
  name: sprockets-sass
91
105
  requirement: !ruby/object:Gem::Requirement
@@ -137,7 +151,7 @@ dependencies:
137
151
  version: 0.8.7
138
152
  - - "<"
139
153
  - !ruby/object:Gem::Version
140
- version: '10.2'
154
+ version: '10.4'
141
155
  type: :runtime
142
156
  prerelease: false
143
157
  version_requirements: !ruby/object:Gem::Requirement
@@ -147,7 +161,7 @@ dependencies:
147
161
  version: 0.8.7
148
162
  - - "<"
149
163
  - !ruby/object:Gem::Version
150
- version: '10.2'
164
+ version: '10.4'
151
165
  - !ruby/object:Gem::Dependency
152
166
  name: bundler
153
167
  requirement: !ruby/object:Gem::Requirement
@@ -328,6 +342,7 @@ files:
328
342
  - error_pages/404.html
329
343
  - error_pages/500.html
330
344
  - flatrack.gemspec
345
+ - lib/custom-extensions/sprockets-sass.rb
331
346
  - lib/flatrack.rb
332
347
  - lib/flatrack/asset_extensions.rb
333
348
  - lib/flatrack/cli.rb
@@ -342,8 +357,12 @@ files:
342
357
  - lib/flatrack/cli/templates/logo.png
343
358
  - lib/flatrack/cli/templates/page.html.erb
344
359
  - lib/flatrack/cli/templates/stylesheet.css.scss
360
+ - lib/flatrack/domain_parser.rb
361
+ - lib/flatrack/middleware.rb
362
+ - lib/flatrack/redirector.rb
345
363
  - lib/flatrack/request.rb
346
364
  - lib/flatrack/response.rb
365
+ - lib/flatrack/rewriter.rb
347
366
  - lib/flatrack/sass.rb
348
367
  - lib/flatrack/sass/functions.rb
349
368
  - lib/flatrack/sass/importer.rb
@@ -390,10 +409,12 @@ files:
390
409
  - spec/fixtures/templates/stylesheet_tag.html.rb
391
410
  - spec/lib/flatrack/asset_extensions_spec.rb
392
411
  - spec/lib/flatrack/cli_spec.rb
412
+ - spec/lib/flatrack/middleware_spec.rb
393
413
  - spec/lib/flatrack/request_spec.rb
394
414
  - spec/lib/flatrack/response_spec.rb
395
415
  - spec/lib/flatrack/site_spec.rb
396
416
  - spec/lib/flatrack/view/link_helper_spec.rb
417
+ - spec/lib/flatrack/view/render_helper_spec.rb
397
418
  - spec/lib/flatrack/view/set_layout_spec.rb
398
419
  - spec/lib/flatrack/view/tag_helper_spec.rb
399
420
  - spec/lib/flatrack/view_spec.rb
@@ -422,7 +443,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
422
443
  version: '0'
423
444
  requirements: []
424
445
  rubyforge_project:
425
- rubygems_version: 2.2.2
446
+ rubygems_version: 2.4.5
426
447
  signing_key:
427
448
  specification_version: 4
428
449
  summary: Deliver static files with style.
@@ -450,10 +471,12 @@ test_files:
450
471
  - spec/fixtures/templates/stylesheet_tag.html.rb
451
472
  - spec/lib/flatrack/asset_extensions_spec.rb
452
473
  - spec/lib/flatrack/cli_spec.rb
474
+ - spec/lib/flatrack/middleware_spec.rb
453
475
  - spec/lib/flatrack/request_spec.rb
454
476
  - spec/lib/flatrack/response_spec.rb
455
477
  - spec/lib/flatrack/site_spec.rb
456
478
  - spec/lib/flatrack/view/link_helper_spec.rb
479
+ - spec/lib/flatrack/view/render_helper_spec.rb
457
480
  - spec/lib/flatrack/view/set_layout_spec.rb
458
481
  - spec/lib/flatrack/view/tag_helper_spec.rb
459
482
  - spec/lib/flatrack/view_spec.rb