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

Commit 4353196

Browse files
committed
update multiple widgets in one request
1 parent 6c6d71c commit 4353196

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

lib/dashing/app.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,22 @@ def protected!
9999
end
100100
end
101101

102+
post '/widgets' do
103+
request.body.rewind
104+
body = JSON.parse(request.body.read)
105+
auth_token = body.delete("auth_token")
106+
if !settings.auth_token || settings.auth_token == auth_token
107+
body["widgets"].each do |widget|
108+
widget_id = widget.delete("id")
109+
send_event(widget_id, widget)
110+
end
111+
204 # response without entity body
112+
else
113+
status 401
114+
"Invalid API key\n"
115+
end
116+
end
117+
102118
post '/widgets/:id' do
103119
request.body.rewind
104120
body = JSON.parse(request.body.read)

test/app_test.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,22 @@ def test_post_widgets_without_auth_token
5656
assert data['updatedAt']
5757
end
5858

59+
def test_post_multiple_widgets_without_auth_token
60+
post '/widgets', JSON.generate({widgets: [{id: 'some_widget', value: 9}, {id: 'another_widget', value: 8}]})
61+
assert_equal 204, last_response.status
62+
63+
assert_equal 2, @connection.length
64+
data = parse_data @connection[0]
65+
assert_equal (9), data['value']
66+
assert_equal 'some_widget', data['id']
67+
assert data['updatedAt']
68+
69+
data = parse_data @connection[1]
70+
assert_equal (8), data['value']
71+
assert_equal 'another_widget', data['id']
72+
assert data['updatedAt']
73+
end
74+
5975
def test_post_widgets_with_invalid_auth_token
6076
app.settings.auth_token = 'sekrit'
6177
post '/widgets/some_widget', JSON.generate({value: 9})
@@ -68,6 +84,12 @@ def test_post_widgets_with_valid_auth_token
6884
assert_equal 204, last_response.status
6985
end
7086

87+
def test_post_multiple_widgets_with_valid_auth_token
88+
app.settings.auth_token = 'sekrit'
89+
post '/widgets', JSON.generate({auth_token: 'sekrit', widgets: [{id: 'some_widget', value: 9}, {id: 'another_widget', value: 8}]})
90+
assert_equal 204, last_response.status
91+
end
92+
7193
def test_get_events
7294
post '/widgets/some_widget', JSON.generate({value: 8})
7395
assert_equal 204, last_response.status

0 commit comments

Comments
 (0)