Skip to content
This repository was archived by the owner on Mar 7, 2018. It is now read-only.

Commit a0f4d31

Browse files
committed
Merge pull request #123 from apeckham/haml
Use any Tilt-supported view language: Haml, Slim, ERB, Liquid, etc.
2 parents 2e1c714 + a6eea61 commit a0f4d31

File tree

2 files changed

+54
-9
lines changed

2 files changed

+54
-9
lines changed

lib/dashing.rb

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,20 @@ def protected!
5050

5151
get '/:dashboard' do
5252
protected!
53-
if File.exist? File.join(settings.views, "#{params[:dashboard]}.erb")
54-
erb params[:dashboard].to_sym
55-
else
56-
halt 404
53+
tilt_html_engines.each do |suffix, _|
54+
file = File.join(settings.views, "#{params[:dashboard]}.#{suffix}")
55+
return render(suffix.to_sym, params[:dashboard].to_sym) if File.exist? file
5756
end
57+
58+
halt 404
5859
end
5960

6061
get '/views/:widget?.html' do
6162
protected!
62-
widget = params[:widget]
63-
send_file File.join(settings.root, 'widgets', widget, "#{widget}.html")
63+
tilt_html_engines.each do |suffix, engines|
64+
file = File.join(settings.root, "widgets", params[:widget], "#{params[:widget]}.#{suffix}")
65+
return engines.first.new(file).render if File.exist? file
66+
end
6467
end
6568

6669
post '/widgets/:id' do
@@ -107,11 +110,18 @@ def latest_events
107110
end
108111

109112
def first_dashboard
110-
files = Dir[File.join(settings.views, '*.erb')].collect { |f| f.match(/(\w*).erb/)[1] }
113+
files = Dir[File.join(settings.views, '*')].collect { |f| File.basename(f, '.*') }
111114
files -= ['layout']
112115
files.first
113116
end
114117

118+
def tilt_html_engines
119+
Tilt.mappings.select do |_, engines|
120+
default_mime_type = engines.first.default_mime_type
121+
default_mime_type.nil? || default_mime_type == 'text/html'
122+
end
123+
end
124+
115125
Dir[File.join(settings.root, 'lib', '**', '*.rb')].each {|file| require file }
116126
{}.to_json # Forces your json codec to initialize (in the event that it is lazily loaded). Does this before job threads start.
117127

test/app_test.rb

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,49 @@ def test_redirect_to_first_dashboard
5858
end
5959
end
6060

61+
def test_redirect_to_first_dashboard_without_erb
62+
with_generated_project do |dir|
63+
FileUtils.touch(File.join(dir, "dashboards/htmltest.html"))
64+
get '/'
65+
assert_equal 302, last_response.status
66+
assert_equal 'http://example.org/htmltest', last_response.location
67+
end
68+
end
69+
6170
def test_get_dashboard
6271
with_generated_project do
6372
get '/sampletv'
6473
assert_equal 200, last_response.status
6574
assert_include last_response.body, 'class="gridster"'
75+
assert_include last_response.body, "DOCTYPE"
6676
end
6777
end
68-
78+
79+
begin
80+
require 'haml'
81+
82+
def test_get_haml_dashboard
83+
with_generated_project do |dir|
84+
File.write(File.join(dir, 'dashboards/hamltest.haml'), '.gridster')
85+
get '/hamltest'
86+
assert_equal 200, last_response.status
87+
assert_include last_response.body, "class='gridster'"
88+
end
89+
end
90+
91+
def test_get_haml_widget
92+
with_generated_project do |dir|
93+
File.write(File.join(dir, 'widgets/clock/clock.haml'), '%h1 haml')
94+
File.unlink(File.join(dir, 'widgets/clock/clock.html'))
95+
get '/views/clock.html'
96+
assert_equal 200, last_response.status
97+
assert_include last_response.body, '<h1>haml</h1>'
98+
end
99+
end
100+
rescue LoadError
101+
puts "[skipping haml tests because haml isn't installed]"
102+
end
103+
69104
def test_get_nonexistent_dashboard
70105
with_generated_project do
71106
get '/nodashboard'
@@ -88,7 +123,7 @@ def with_generated_project
88123

89124
Sinatra::Application.settings.views = File.join(dir, 'new_project/dashboards')
90125
Sinatra::Application.settings.root = File.join(dir, 'new_project')
91-
yield
126+
yield Sinatra::Application.settings.root
92127
end
93128
end
94129

0 commit comments

Comments
 (0)