high_voltage 3.1.1 → 4.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +64 -42
- data/CONTRIBUTING.md +43 -18
- data/README.md +22 -12
- data/lib/high_voltage/engine.rb +0 -7
- data/lib/high_voltage/version.rb +1 -1
- metadata +13 -109
- data/.gitignore +0 -7
- data/.travis.yml +0 -25
- data/Appraisals +0 -15
- data/Gemfile +0 -3
- data/Gemfile.lock +0 -114
- data/Rakefile +0 -24
- data/bin/setup +0 -12
- data/gemfiles/rails_4.2.gemfile +0 -7
- data/gemfiles/rails_5.0.gemfile +0 -8
- data/gemfiles/rails_5.1.gemfile +0 -8
- data/gemfiles/rails_5.2.gemfile +0 -8
- data/high_voltage.gemspec +0 -24
- data/spec/constraints/root_route_spec.rb +0 -29
- data/spec/controllers/alternative_finder_controller_spec.rb +0 -12
- data/spec/controllers/pages_controller_spec.rb +0 -113
- data/spec/controllers/subclassed_pages_controller_spec.rb +0 -34
- data/spec/fake_app.rb +0 -16
- data/spec/features/current_page_helper_spec.rb +0 -9
- data/spec/features/view_page_spec.rb +0 -9
- data/spec/fixtures/app/views/layouts/alternate.html.erb +0 -14
- data/spec/fixtures/app/views/layouts/application.html.erb +0 -14
- data/spec/fixtures/app/views/other/wrong.html.erb +0 -1
- data/spec/fixtures/app/views/other_pages/also_dir/also_nested.html.erb +0 -1
- data/spec/fixtures/app/views/other_pages/also_exists.html.erb +0 -1
- data/spec/fixtures/app/views/other_pages/also_exists_but_references_nonexistent_partial.html.erb +0 -2
- data/spec/fixtures/app/views/pages/_partial.html.erb +0 -1
- data/spec/fixtures/app/views/pages/about.html.erb +0 -1
- data/spec/fixtures/app/views/pages/also_dir/also_nested.html.erb +0 -1
- data/spec/fixtures/app/views/pages/also_exists.html.erb +0 -1
- data/spec/fixtures/app/views/pages/also_exists_but_references_nonexistent_partial.html.erb +0 -2
- data/spec/fixtures/app/views/pages/current_page_helper.html.erb +0 -1
- data/spec/fixtures/app/views/pages/dir/nested.html.erb +0 -1
- data/spec/fixtures/app/views/pages/exists.html.erb +0 -1
- data/spec/fixtures/app/views/pages/exists_but_references_nonexistent_partial.html.erb +0 -2
- data/spec/fixtures/app/views/pages/exists_without_html_extension.erb +0 -1
- data/spec/fixtures/app/views/pages/rot13.html.erb +0 -1
- data/spec/fixtures/app/views/pages/text.txt.erb +0 -1
- data/spec/fixtures/config/database.yml +0 -3
- data/spec/fixtures/config/routes.rb +0 -4
- data/spec/fixtures/public/pages/exists.html +0 -0
- data/spec/high_voltage/configuration_spec.rb +0 -31
- data/spec/high_voltage/page_collector_spec.rb +0 -40
- data/spec/high_voltage/page_finder_spec.rb +0 -98
- data/spec/high_voltage/page_spec.rb +0 -65
- data/spec/high_voltage_spec.rb +0 -11
- data/spec/integration/navigation_spec.rb +0 -7
- data/spec/minimal_spec_helper.rb +0 -5
- data/spec/requests/home_page_spec.rb +0 -13
- data/spec/routing/routes_spec.rb +0 -140
- data/spec/spec_helper.rb +0 -39
- data/spec/support/app/controllers/alternative_finder_controller.rb +0 -14
- data/spec/support/app/controllers/subclassed_pages_controller.rb +0 -3
- data/spec/support/http_method_shim.rb +0 -19
@@ -1,98 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require "spec_helper"
|
4
|
-
|
5
|
-
describe HighVoltage::PageFinder do
|
6
|
-
it "produces the name of an existing template" do
|
7
|
-
expect(find("existing")).to eq "pages/existing"
|
8
|
-
end
|
9
|
-
|
10
|
-
it "produces the name of a nested template" do
|
11
|
-
expect(find("dir/nested")).to eq "pages/dir/nested"
|
12
|
-
end
|
13
|
-
|
14
|
-
it "produces the name of a dotfile" do
|
15
|
-
expect(find(".file")).to eq "pages/.file"
|
16
|
-
end
|
17
|
-
|
18
|
-
it "supports non-ASCII characters" do
|
19
|
-
expect(find("résumé")).to eq "pages/résumé"
|
20
|
-
end
|
21
|
-
|
22
|
-
it "uses a custom content path" do
|
23
|
-
with_content_path("other_pages/") do
|
24
|
-
expect(find("also_exists")).to eq "other_pages/also_exists"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
it "allows the trailing slash to be omitted from the content path" do
|
29
|
-
with_content_path("forgot_slash") do
|
30
|
-
expect(find("thing")).to eq "forgot_slash/thing"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
it "exposes the content path" do
|
35
|
-
with_content_path("another_thing/") do
|
36
|
-
expect(page_finder.content_path).to eq "another_thing/"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
it "provides the page_id" do
|
41
|
-
subclass = Class.new(HighVoltage::PageFinder) do
|
42
|
-
def page_name
|
43
|
-
"the page is #{page_id}"
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
expect(subclass.new("sweet page").page_name).to eq "the page is sweet page"
|
48
|
-
end
|
49
|
-
|
50
|
-
context "bad page_id" do
|
51
|
-
it "throws an exception if page_id resolves to empty" do
|
52
|
-
expect { find("") }.to raise_error HighVoltage::InvalidPageIdError
|
53
|
-
expect { find("/") }.to raise_error HighVoltage::InvalidPageIdError
|
54
|
-
expect { find(".") }.to raise_error HighVoltage::InvalidPageIdError
|
55
|
-
expect { find("\\.") }.to raise_error HighVoltage::InvalidPageIdError
|
56
|
-
expect { find("/\\.") }.to raise_error HighVoltage::InvalidPageIdError
|
57
|
-
expect { find("dummy/..") }.to raise_error HighVoltage::InvalidPageIdError
|
58
|
-
end
|
59
|
-
|
60
|
-
it "throws an exception if page_id resolves to outside the content path" do
|
61
|
-
expect { find("..") }.to raise_error HighVoltage::InvalidPageIdError
|
62
|
-
expect { find("\\..") }.to raise_error HighVoltage::InvalidPageIdError
|
63
|
-
expect { find("/\\..") }.to raise_error HighVoltage::InvalidPageIdError
|
64
|
-
expect { find("../secret") }.
|
65
|
-
to raise_error HighVoltage::InvalidPageIdError
|
66
|
-
expect { find("\\../secret") }.
|
67
|
-
to raise_error HighVoltage::InvalidPageIdError
|
68
|
-
expect { find("/\\../secret") }.
|
69
|
-
to raise_error HighVoltage::InvalidPageIdError
|
70
|
-
expect { find("dummy/../../secret") }.
|
71
|
-
to raise_error HighVoltage::InvalidPageIdError
|
72
|
-
end
|
73
|
-
|
74
|
-
it "throws an exception if invalid byte sequence in page_id" do
|
75
|
-
expect { find("\xD0½\xA8\xCEļ\xFE\xBC\xD0.zip") }.
|
76
|
-
to raise_error HighVoltage::InvalidPageIdError
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
private
|
81
|
-
|
82
|
-
def find(page_id)
|
83
|
-
page_finder(page_id).find
|
84
|
-
end
|
85
|
-
|
86
|
-
def page_finder(page_id = "whatever")
|
87
|
-
HighVoltage::PageFinder.new(page_id)
|
88
|
-
end
|
89
|
-
|
90
|
-
def with_content_path(path)
|
91
|
-
original_content_path = HighVoltage.content_path
|
92
|
-
HighVoltage.content_path = path
|
93
|
-
|
94
|
-
yield
|
95
|
-
|
96
|
-
HighVoltage.content_path = original_content_path
|
97
|
-
end
|
98
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe HighVoltage::Page do
|
4
|
-
it "produces the id for a page" do
|
5
|
-
page = page(full_file_path("exists.html.erb"))
|
6
|
-
|
7
|
-
expect(page.id).to eq "exists"
|
8
|
-
end
|
9
|
-
|
10
|
-
it "produces the id for a page in a subdirectory" do
|
11
|
-
page = page(full_file_path("dir/nested.html.erb"))
|
12
|
-
|
13
|
-
expect(page.id).to eq "dir/nested"
|
14
|
-
end
|
15
|
-
|
16
|
-
it "is valid for a page" do
|
17
|
-
page = page(full_file_path("exists.html.erb"))
|
18
|
-
|
19
|
-
expect(page).to be_valid
|
20
|
-
end
|
21
|
-
|
22
|
-
it "is valid for a page in a subdirectory" do
|
23
|
-
page = page(full_file_path("dir/nested.html.erb"))
|
24
|
-
|
25
|
-
expect(page).to be_valid
|
26
|
-
end
|
27
|
-
|
28
|
-
it "is invalid for a directory" do
|
29
|
-
page = page(full_file_path("dir"))
|
30
|
-
|
31
|
-
expect(page).to_not be_valid
|
32
|
-
end
|
33
|
-
|
34
|
-
it "is invalid for a partial" do
|
35
|
-
page = page(full_file_path("_partial.html.erb"))
|
36
|
-
|
37
|
-
expect(page).to_not be_valid
|
38
|
-
end
|
39
|
-
|
40
|
-
it "is invalid for a non-existent page" do
|
41
|
-
page = page(full_file_path("nonexistent.html.erb"))
|
42
|
-
|
43
|
-
expect(page).to_not be_valid
|
44
|
-
end
|
45
|
-
|
46
|
-
it "is valid for files without a format present" do
|
47
|
-
page = page(full_file_path("exists_without_html_extension.erb"))
|
48
|
-
|
49
|
-
expect(page).to be_valid
|
50
|
-
end
|
51
|
-
|
52
|
-
private
|
53
|
-
|
54
|
-
def full_content_path
|
55
|
-
HighVoltage.full_path.to_s
|
56
|
-
end
|
57
|
-
|
58
|
-
def page(file_path)
|
59
|
-
HighVoltage::Page.new(full_content_path, file_path)
|
60
|
-
end
|
61
|
-
|
62
|
-
def full_file_path(file_path)
|
63
|
-
"#{full_content_path}#{file_path}"
|
64
|
-
end
|
65
|
-
end
|
data/spec/high_voltage_spec.rb
DELETED
data/spec/minimal_spec_helper.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'Home page route' do
|
4
|
-
before(:each) do
|
5
|
-
HighVoltage.home_page = 'home'
|
6
|
-
Rails.application.reload_routes!
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'redirects the duplicate content to root' do
|
10
|
-
get '/home'
|
11
|
-
expect(response.headers['Location']).to eq 'http://www.example.com/'
|
12
|
-
end
|
13
|
-
end
|
data/spec/routing/routes_spec.rb
DELETED
@@ -1,140 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'routes' do
|
4
|
-
context 'default configuration' do
|
5
|
-
it 'generates a route' do
|
6
|
-
expect(page_path('one')).to eq '/pages/one'
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'generates a nested route' do
|
10
|
-
expect(page_path('one/two')).to eq '/pages/one/two'
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'recognizes a route' do
|
14
|
-
assert_recognizes(
|
15
|
-
{
|
16
|
-
:controller => 'high_voltage/pages',
|
17
|
-
:action => 'show',
|
18
|
-
:id => 'one'
|
19
|
-
},
|
20
|
-
'/pages/one'
|
21
|
-
)
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'recognizes a nested route' do
|
25
|
-
assert_recognizes(
|
26
|
-
{
|
27
|
-
:controller => 'high_voltage/pages',
|
28
|
-
:action => 'show',
|
29
|
-
:id => 'one/two'
|
30
|
-
},
|
31
|
-
'/pages/one/two'
|
32
|
-
)
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'recognizes a route with dots' do
|
36
|
-
assert_recognizes(
|
37
|
-
{
|
38
|
-
:controller => 'high_voltage/pages',
|
39
|
-
:action => 'show',
|
40
|
-
:id => 'one.two.three'
|
41
|
-
},
|
42
|
-
'/pages/one.two.three'
|
43
|
-
)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
context 'using top-level routing configuration' do
|
48
|
-
before(:each) do
|
49
|
-
HighVoltage.route_drawer = HighVoltage::RouteDrawers::Root
|
50
|
-
Rails.application.reload_routes!
|
51
|
-
end
|
52
|
-
|
53
|
-
it 'generates a route' do
|
54
|
-
expect(page_path('one')).to eq '/one'
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'generates a nested route' do
|
58
|
-
expect(page_path('one/two')).to eq '/one/two'
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
context 'custom content path' do
|
63
|
-
before(:each) do
|
64
|
-
HighVoltage.content_path = 'other_pages/'
|
65
|
-
Rails.application.reload_routes!
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'generates a route' do
|
69
|
-
expect(page_path('one')).to eq '/other_pages/one'
|
70
|
-
end
|
71
|
-
|
72
|
-
it 'generates a nested route' do
|
73
|
-
expect(page_path('one/two')).to eq '/other_pages/one/two'
|
74
|
-
end
|
75
|
-
|
76
|
-
it 'recognizes a route' do
|
77
|
-
assert_recognizes(
|
78
|
-
{
|
79
|
-
:controller => 'high_voltage/pages',
|
80
|
-
:action => 'show',
|
81
|
-
:id => 'one'
|
82
|
-
},
|
83
|
-
'/other_pages/one'
|
84
|
-
)
|
85
|
-
end
|
86
|
-
|
87
|
-
it 'recognizes a nested route' do
|
88
|
-
assert_recognizes(
|
89
|
-
{
|
90
|
-
:controller => 'high_voltage/pages',
|
91
|
-
:action => 'show',
|
92
|
-
:id => 'one/two'
|
93
|
-
},
|
94
|
-
'/other_pages/one/two'
|
95
|
-
)
|
96
|
-
end
|
97
|
-
|
98
|
-
it 'recognizes a route with dots' do
|
99
|
-
assert_recognizes(
|
100
|
-
{
|
101
|
-
:controller => 'high_voltage/pages',
|
102
|
-
:action => 'show',
|
103
|
-
:id => 'one.two.three'
|
104
|
-
},
|
105
|
-
'/other_pages/one.two.three'
|
106
|
-
)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
context 'home page route' do
|
111
|
-
it 'recognizes the root route' do
|
112
|
-
HighVoltage.home_page = 'home'
|
113
|
-
Rails.application.reload_routes!
|
114
|
-
|
115
|
-
assert_recognizes(
|
116
|
-
{
|
117
|
-
:controller => 'high_voltage/pages',
|
118
|
-
:action => 'show',
|
119
|
-
:id => 'home'
|
120
|
-
},
|
121
|
-
'/'
|
122
|
-
)
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
context 'no home page route' do
|
127
|
-
it 'does generate a home page route' do
|
128
|
-
expect(get: '/').not_to be_routable
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
context 'disabled routes' do
|
133
|
-
it 'does not recognize routes' do
|
134
|
-
HighVoltage.routes = false
|
135
|
-
Rails.application.reload_routes!
|
136
|
-
|
137
|
-
expect(get: '/pages/one/two').not_to be_routable
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
ENV["RAILS_ENV"] = "test"
|
2
|
-
|
3
|
-
require "pry"
|
4
|
-
require "active_model/railtie"
|
5
|
-
require "action_controller/railtie"
|
6
|
-
require "action_view/railtie"
|
7
|
-
require "high_voltage"
|
8
|
-
require "fake_app"
|
9
|
-
require "rspec/rails"
|
10
|
-
|
11
|
-
Rails.backtrace_cleaner.remove_silencers!
|
12
|
-
|
13
|
-
Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each { |file| require file }
|
14
|
-
|
15
|
-
RSpec.configure do |config|
|
16
|
-
config.infer_spec_type_from_file_location!
|
17
|
-
|
18
|
-
config.after(:each) do
|
19
|
-
HighVoltage.set_default_configuration
|
20
|
-
Rails.application.reload_routes!
|
21
|
-
end
|
22
|
-
|
23
|
-
config.expect_with :rspec do |c|
|
24
|
-
c.syntax = :expect
|
25
|
-
end
|
26
|
-
|
27
|
-
config.include RSpec::Matchers
|
28
|
-
config.mock_with :rspec
|
29
|
-
config.order = "random"
|
30
|
-
|
31
|
-
if Rails::VERSION::MAJOR >= 5
|
32
|
-
require "rails-controller-testing"
|
33
|
-
|
34
|
-
config.include(
|
35
|
-
Rails::Controller::Testing::TemplateAssertions,
|
36
|
-
type: :controller,
|
37
|
-
)
|
38
|
-
end
|
39
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
class AlternativeFinderController < HighVoltage::PagesController
|
2
|
-
private
|
3
|
-
|
4
|
-
def page_finder_factory
|
5
|
-
Rot13PageFinder
|
6
|
-
end
|
7
|
-
|
8
|
-
class Rot13PageFinder < HighVoltage::PageFinder
|
9
|
-
def find
|
10
|
-
paths = super.split('/')
|
11
|
-
"#{paths[0..-2].join('/')}/#{paths[-1].tr('a-z','n-za-m')}"
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# Rails 5 deprecates calling HTTP action methods with positional arguments
|
2
|
-
# in favor of keyword arguments. However, the keyword argument form is only
|
3
|
-
# supported in Rails 5+. Since we support back to 4, we need some sort of shim
|
4
|
-
# to avoid super noisy deprecations when running tests.
|
5
|
-
module HTTPMethodShim
|
6
|
-
def get(path, params = nil, *args)
|
7
|
-
if args.any?
|
8
|
-
raise ArgumentError, "Unexpected arguments passed to shim: #{args.inspect}"
|
9
|
-
else
|
10
|
-
super(path, params: params)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
if Rails::VERSION::MAJOR >= 5
|
16
|
-
RSpec.configure do |config|
|
17
|
-
config.include HTTPMethodShim, type: :controller
|
18
|
-
end
|
19
|
-
end
|