summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChad Jolly <cjolly@lawgical.com>2013-07-14 18:36:19 -0600
committerChad Jolly <cjolly@lawgical.com>2013-07-14 18:36:19 -0600
commit5f8cbcb7debde027e79d87733b84cb852aa47dad (patch)
tree14113289a63f7039c792b7c1a2b645f0f36efd96
parent3f58bbd626cd84d1cb24375b4d8fe6df75ce85ba (diff)
dashboard events - use SSE event names
-rw-r--r--javascripts/dashing.coffee9
-rw-r--r--lib/dashing.rb17
-rw-r--r--test/app_test.rb16
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