diff options
author | Chad Jolly <cjolly@lawgical.com> | 2013-07-14 18:36:19 -0600 |
---|---|---|
committer | Chad Jolly <cjolly@lawgical.com> | 2013-07-14 18:36:19 -0600 |
commit | 5f8cbcb7debde027e79d87733b84cb852aa47dad (patch) | |
tree | 14113289a63f7039c792b7c1a2b645f0f36efd96 | |
parent | 3f58bbd626cd84d1cb24375b4d8fe6df75ce85ba (diff) |
dashboard events - use SSE event names
-rw-r--r-- | javascripts/dashing.coffee | 9 | ||||
-rw-r--r-- | lib/dashing.rb | 17 | ||||
-rw-r--r-- | test/app_test.rb | 16 |
3 files changed, 30 insertions, 12 deletions
diff --git a/javascripts/dashing.coffee b/javascripts/dashing.coffee index f90c14b..c4178f3 100644 --- a/javascripts/dashing.coffee +++ b/javascripts/dashing.coffee @@ -106,10 +106,6 @@ source.addEventListener 'error', (e)-> source.addEventListener 'message', (e) -> data = JSON.parse(e.data) if lastEvents[data.id]?.updatedAt != data.updatedAt - # /messages are internal messages, and cannot correspond to widgets. - # We will handle them as events on the Dashing application. - return Dashing.fire(data.id.slice(1), data) if data.id[0] is '/' - if Dashing.debugMode console.log("Received data for #{data.id}", data) lastEvents[data.id] = data @@ -117,6 +113,11 @@ source.addEventListener 'message', (e) -> for widget in widgets[data.id] widget.receiveData(data) +source.addEventListener 'dashboards', (e) -> + data = JSON.parse(e.data) + if Dashing.debugMode + console.log("Received data for dashboards", data) + Dashing.fire data.event, data $(document).ready -> Dashing.run() diff --git a/lib/dashing.rb b/lib/dashing.rb index 4c1b44b..935a031 100644 --- a/lib/dashing.rb +++ b/lib/dashing.rb @@ -81,12 +81,13 @@ get '/views/:widget?.html' do end end -post '/reload' do +post '/dashboards/:id' do request.body.rewind body = JSON.parse(request.body.read) + body['dashboard'] ||= params['id'] auth_token = body.delete("auth_token") if !settings.auth_token || settings.auth_token == auth_token - send_event('/reload', body) + send_event(params['id'], body, 'dashboards') 204 # response without entity body else status 401 @@ -119,16 +120,18 @@ def production? ENV['RACK_ENV'] == 'production' end -def send_event(id, body) +def send_event(id, body, target=nil) body[:id] = id body[:updatedAt] ||= Time.now.to_i - event = format_event(body.to_json) - Sinatra::Application.settings.history[id] = event unless id =~ /^\// + event = format_event(body.to_json, target) + Sinatra::Application.settings.history[id] = event unless target == 'dashboards' Sinatra::Application.settings.connections.each { |out| out << event } end -def format_event(body) - "data: #{body}\n\n" +def format_event(body, name=nil) + str = "" + str << "event: #{name}\n" if name + str << "data: #{body}\n\n" end def latest_events diff --git a/test/app_test.rb b/test/app_test.rb index 8b1be19..69e57c9 100644 --- a/test/app_test.rb +++ b/test/app_test.rb @@ -41,6 +41,16 @@ class AppTest < Dashing::Test assert_equal 8, parse_data(@connection[0])['value'] end + def test_dashboard_events + post '/dashboards/my_super_sweet_dashboard', JSON.generate({event: 'reload'}) + assert_equal 204, last_response.status + + get '/events' + assert_equal 200, last_response.status + assert_equal 'dashboards', parse_event(@connection[0]) + assert_equal 'reload', parse_data(@connection[0])['event'] + end + def test_redirect_to_default_dashboard with_generated_project do Sinatra::Application.settings.default_dashboard = 'test1' @@ -141,4 +151,8 @@ class AppTest < Dashing::Test def parse_data(string) JSON.parse string[/data: (.+)/, 1] end -end
\ No newline at end of file + + def parse_event(string) + string[/event: (.+)/, 1] + end +end |