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

Commit a6eea61

Browse files
committed
allow widget views to be written in any Tilt-supported template language
1 parent 8795505 commit a6eea61

File tree

2 files changed

+30
-17
lines changed

2 files changed

+30
-17
lines changed

lib/dashing.rb

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

5151
get '/:dashboard' do
5252
protected!
53-
view_engine = Tilt.mappings.keys.find do |ext|
54-
File.exist? File.join(settings.views, "#{params[:dashboard]}.#{ext}")
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
5556
end
5657

57-
if view_engine
58-
render view_engine.to_sym, params[:dashboard].to_sym
59-
else
60-
halt 404
61-
end
58+
halt 404
6259
end
6360

6461
get '/views/:widget?.html' do
6562
protected!
66-
widget = params[:widget]
67-
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
6867
end
6968

7069
post '/widgets/:id' do
@@ -116,6 +115,13 @@ def first_dashboard
116115
files.first
117116
end
118117

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+
119125
Dir[File.join(settings.root, 'lib', '**', '*.rb')].each {|file| require file }
120126
{}.to_json # Forces your json codec to initialize (in the event that it is lazily loaded). Does this before job threads start.
121127

test/app_test.rb

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,26 +72,33 @@ def test_get_dashboard
7272
get '/sampletv'
7373
assert_equal 200, last_response.status
7474
assert_include last_response.body, 'class="gridster"'
75+
assert_include last_response.body, "DOCTYPE"
7576
end
7677
end
7778

7879
begin
7980
require 'haml'
80-
def test_get_haml
81+
82+
def test_get_haml_dashboard
8183
with_generated_project do |dir|
82-
File.write(File.join(dir, "dashboards/hamltest.haml"), <<-HAML)
83-
.gridster
84-
%ul
85-
%li{data: {col: 1, row: 1, sizex: 1, sizey: 1}}
86-
%div{data: {view: "Clock"}}
87-
%i.icon-time.icon-background
88-
HAML
84+
File.write(File.join(dir, 'dashboards/hamltest.haml'), '.gridster')
8985
get '/hamltest'
9086
assert_equal 200, last_response.status
9187
assert_include last_response.body, "class='gridster'"
9288
end
9389
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
94100
rescue LoadError
101+
puts "[skipping haml tests because haml isn't installed]"
95102
end
96103

97104
def test_get_nonexistent_dashboard

0 commit comments

Comments
 (0)