diff options
Diffstat (limited to 'lib/dashing/app.rb')
-rw-r--r-- | lib/dashing/app.rb | 110 |
1 files changed, 55 insertions, 55 deletions
diff --git a/lib/dashing/app.rb b/lib/dashing/app.rb index 7c4f25a..5780b92 100644 --- a/lib/dashing/app.rb +++ b/lib/dashing/app.rb @@ -9,40 +9,59 @@ require 'yaml' SCHEDULER = Rufus::Scheduler.new -set :root, Dir.pwd - -set :sprockets, Sprockets::Environment.new(settings.root) -set :assets_prefix, '/assets' -set :digest_assets, false -['assets/javascripts', 'assets/stylesheets', 'assets/fonts', 'assets/images', 'widgets', File.expand_path('../../javascripts', __FILE__)]. each do |path| - settings.sprockets.append_path path +def development? + ENV['RACK_ENV'] == 'development' end -set server: 'thin', connections: [], history_file: 'history.yml' +def production? + ENV['RACK_ENV'] == 'production' +end -# Persist history in tmp file at exit -at_exit do - File.open(settings.history_file, 'w') do |f| - f.puts settings.history.to_yaml +helpers Sinatra::ContentFor +helpers do + def protected! + # override with auth logic end end +set :root, Dir.pwd +set :sprockets, Sprockets::Environment.new(settings.root) +set :assets_prefix, '/assets' +set :digest_assets, false +set server: 'thin', connections: [], history_file: 'history.yml' +set :public_folder, File.join(settings.root, 'public') +set :views, File.join(settings.root, 'dashboards') +set :default_dashboard, nil +set :auth_token, nil + if File.exists?(settings.history_file) set history: YAML.load_file(settings.history_file) else set history: {} end -set :public_folder, File.join(settings.root, 'public') -set :views, File.join(settings.root, 'dashboards') -set :default_dashboard, nil -set :auth_token, nil +%w(javascripts stylesheets fonts images).each do |path| + settings.sprockets.append_path("assets/#{path}") +end -helpers Sinatra::ContentFor -helpers do - def protected! - # override with auth logic - end +['widgets', File.expand_path('../../javascripts', __FILE__)]. each do |path| + settings.sprockets.append_path(path) +end + +not_found do + send_file File.join(settings.public_folder, '404.html') +end + +at_exit do + File.write(settings.history_file, settings.history.to_yaml) +end + +get '/' do + protected! + dashboard = settings.default_dashboard || first_dashboard + raise Exception.new('There are no dashboards available') if not dashboard + + redirect "/" + dashboard end get '/events', provides: 'text/event-stream' do @@ -55,15 +74,6 @@ get '/events', provides: 'text/event-stream' do end end -get '/' do - protected! - begin - redirect "/" + (settings.default_dashboard || first_dashboard).to_s - rescue NoMethodError => e - raise Exception.new("There are no dashboards in your dashboard directory.") - end -end - get '/:dashboard' do protected! tilt_html_engines.each do |suffix, _| @@ -74,14 +84,6 @@ get '/:dashboard' do halt 404 end -get '/views/:widget?.html' do - protected! - tilt_html_engines.each do |suffix, engines| - file = File.join(settings.root, "widgets", params[:widget], "#{params[:widget]}.#{suffix}") - return engines.first.new(file).render if File.exist? file - end -end - post '/dashboards/:id' do request.body.rewind body = JSON.parse(request.body.read) @@ -109,16 +111,12 @@ post '/widgets/:id' do end end -not_found do - send_file File.join(settings.public_folder, '404.html') -end - -def development? - ENV['RACK_ENV'] == 'development' -end - -def production? - ENV['RACK_ENV'] == 'production' +get '/views/:widget?.html' do + protected! + tilt_html_engines.each do |suffix, engines| + file = File.join(settings.root, "widgets", params[:widget], "#{params[:widget]}.#{suffix}") + return engines.first.new(file).render if File.exist? file + end end def send_event(id, body, target=nil) @@ -154,14 +152,16 @@ def tilt_html_engines end end -settings_file = File.join(settings.root, 'config/settings.rb') -if (File.exists?(settings_file)) - require settings_file +def require_glob(relative_glob) + Dir[File.join(settings.root, relative_glob)].each do |file| + require file + end end -Dir[File.join(settings.root, 'lib', '**', '*.rb')].each {|file| require file } -{}.to_json # Forces your json codec to initialize (in the event that it is lazily loaded). Does this before job threads start. +settings_file = File.join(settings.root, 'config/settings.rb') +require settings_file if File.exists?(settings_file) +{}.to_json # Forces your json codec to initialize (in the event that it is lazily loaded). Does this before job threads start. job_path = ENV["JOB_PATH"] || 'jobs' -files = Dir[File.join(settings.root, job_path, '**', '/*.rb')] -files.each { |job| require(job) } +require_glob(File.join('lib', '**', '*.rb')) +require_glob(File.join(job_path, '**', '*.rb')) |