tempoiq 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +13 -5
- data/lib/tempoiq/client.rb +10 -11
- data/lib/tempoiq/constants.rb +1 -1
- data/lib/tempoiq/models/write_response.rb +58 -0
- data/test/client_test.rb +148 -27
- metadata +7 -7
- data/lib/tempoiq/models/multi_status.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
OGVkZjI1ZjdiM2QxOTQyMjI2ODUxOWFhM2VmNjRhNTQwZmM4ODY1YQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YjI0NzM1OWQ0NDljYzRjODkxZDcwNGM4YWY4MTNiYTdiZWZkMmM2MA==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
OGQzZDg4Mzc3ZDA0NDU5YTJjNzIxOThjOGIzZWVmZThkNDI5NTQzOTFjY2Rh
|
10
|
+
M2Y2NDI4OTlkMjM1N2YzOTI2YTFjMWU4OTdkNzFmOWFmZmI4ZTdiYTc0Njc4
|
11
|
+
YjEyZjBlMTc4ZDA4MGNhNDQxM2E1NTNiMzk5YjVlYzY3NTJkZjE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
M2Q0NmQxMDI4ZGNjMzJhYzY1NmI0ZTU1ZGE0MzNhZmRmZjY1ZDYyM2YxNzlm
|
14
|
+
NzIxZTIyNWI2NzAwM2JlY2I4MDhjZDE4ZDhiMDc0MDFhMzI4YWIyMzIwOTEy
|
15
|
+
YWZmMjMzZmJhMzU3ZGE4YjBkZTk1MzlhZDNjMjIxMmRmNzY2OWE=
|
data/lib/tempoiq/client.rb
CHANGED
@@ -8,7 +8,7 @@ require 'tempoiq/models/datapoint'
|
|
8
8
|
require 'tempoiq/models/delete_summary'
|
9
9
|
require 'tempoiq/models/device'
|
10
10
|
require 'tempoiq/models/find'
|
11
|
-
require 'tempoiq/models/
|
11
|
+
require 'tempoiq/models/write_response'
|
12
12
|
require 'tempoiq/models/pipeline'
|
13
13
|
require 'tempoiq/models/query'
|
14
14
|
require 'tempoiq/models/read'
|
@@ -148,7 +148,7 @@ module TempoIQ
|
|
148
148
|
query = Query.new(Search.new("devices", selection),
|
149
149
|
Find.new(opts[:limit]),
|
150
150
|
nil)
|
151
|
-
Cursor.new(Device, remoter, "/v2/devices", query, media_types(:accept => [media_type("
|
151
|
+
Cursor.new(Device, remoter, "/v2/devices", query, media_types(:accept => [media_type("device-collection", "v2"), media_type("error", "v1")],
|
152
152
|
:content => media_type("query", "v1")))
|
153
153
|
end
|
154
154
|
|
@@ -233,9 +233,9 @@ module TempoIQ
|
|
233
233
|
# * +bulk_write+ - The write request to send to the backend. Yielded to the block.
|
234
234
|
#
|
235
235
|
# On success:
|
236
|
-
# - Returns
|
236
|
+
# - Returns WriteResponse
|
237
237
|
# On partial success:
|
238
|
-
# - Returns
|
238
|
+
# - Returns WriteResponse
|
239
239
|
# On failure:
|
240
240
|
# - Raises HttpException
|
241
241
|
#
|
@@ -263,11 +263,10 @@ module TempoIQ
|
|
263
263
|
end
|
264
264
|
|
265
265
|
result = remoter.post("/v2/write", JSON.dump(bulk.to_hash))
|
266
|
-
if result.code == HttpResult::OK
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
MultiStatus.new(json)
|
266
|
+
if result.code == HttpResult::OK || result.code == HttpResult::MULTI
|
267
|
+
body = result.body.empty? ? "{}" : result.body
|
268
|
+
json = JSON.parse(body)
|
269
|
+
WriteResponse.new(json)
|
271
270
|
else
|
272
271
|
raise HttpException.new(result)
|
273
272
|
end
|
@@ -342,7 +341,7 @@ module TempoIQ
|
|
342
341
|
Read.new(start, stop, opts[:limit]),
|
343
342
|
pipeline)
|
344
343
|
|
345
|
-
Cursor.new(Row, remoter, "/v2/read", query, media_types(:accept => [media_type("
|
344
|
+
Cursor.new(Row, remoter, "/v2/read", query, media_types(:accept => [media_type("datapoint-collection", "v2"), media_type("error", "v1")],
|
346
345
|
:content => media_type("query", "v1")))
|
347
346
|
end
|
348
347
|
|
@@ -409,7 +408,7 @@ module TempoIQ
|
|
409
408
|
Single.new(function, timestamp),
|
410
409
|
pipeline)
|
411
410
|
|
412
|
-
Cursor.new(Row, remoter, "/v2/single", query, media_types(:accept => [media_type("
|
411
|
+
Cursor.new(Row, remoter, "/v2/single", query, media_types(:accept => [media_type("datapoint-collection", "v1"), media_type("error", "v1")],
|
413
412
|
:content => media_type("query", "v1")))
|
414
413
|
end
|
415
414
|
|
data/lib/tempoiq/constants.rb
CHANGED
@@ -0,0 +1,58 @@
|
|
1
|
+
module TempoIQ
|
2
|
+
# WriteResponse is used to track the status of a write. Because writes
|
3
|
+
# are bulk in nature (writing to multiple devices and sensors at once),
|
4
|
+
# there are instances where some writes device writes may succeed and
|
5
|
+
# some might fail in the same write call.
|
6
|
+
#
|
7
|
+
# [High level introspection]
|
8
|
+
# - #success?
|
9
|
+
# - #partial_success?
|
10
|
+
#
|
11
|
+
# [Device level introspection]
|
12
|
+
# - #failures
|
13
|
+
# - #created
|
14
|
+
# - #existing
|
15
|
+
# - #modified
|
16
|
+
class WriteResponse
|
17
|
+
attr_reader :status
|
18
|
+
|
19
|
+
def initialize(status = nil)
|
20
|
+
@status = status
|
21
|
+
end
|
22
|
+
|
23
|
+
# Was the write a total success?
|
24
|
+
def success?
|
25
|
+
status.each do |key,device_status|
|
26
|
+
if device_status['successful'] == false
|
27
|
+
return false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
true
|
31
|
+
end
|
32
|
+
|
33
|
+
# Did the write have partial failures?
|
34
|
+
def partial_success?
|
35
|
+
!success?
|
36
|
+
end
|
37
|
+
|
38
|
+
# Retrieve the failures, key => message [Hash]
|
39
|
+
def failures
|
40
|
+
status.select { |device_key, v| v["successful"] == false }
|
41
|
+
end
|
42
|
+
|
43
|
+
# Devices that already existed before the write
|
44
|
+
def existing
|
45
|
+
status.select { |device_key, v| v["device_state"] == "existing" }
|
46
|
+
end
|
47
|
+
|
48
|
+
# Devices that were created during the write
|
49
|
+
def created
|
50
|
+
status.select { |device_key, v| v["device_state"] == "created" }
|
51
|
+
end
|
52
|
+
|
53
|
+
# Devices that were modified (eg - sensors added) during the write
|
54
|
+
def modified
|
55
|
+
status.select { |device_key, v| v["device_state"] == "modified" }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/test/client_test.rb
CHANGED
@@ -140,7 +140,14 @@ module ClientTest
|
|
140
140
|
device_key = device.key
|
141
141
|
sensor_key = device.sensors.first.key
|
142
142
|
|
143
|
-
|
143
|
+
stubbed_body = {"device1" =>
|
144
|
+
{"success" => true,
|
145
|
+
"message" => nil,
|
146
|
+
"device_state" => "existing"
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
client.remoter.stub(:post, "/v2/write", 207, JSON.dump(stubbed_body))
|
144
151
|
|
145
152
|
status = client.write_bulk do |write|
|
146
153
|
write.add(device_key, sensor_key, TempoIQ::DataPoint.new(ts, 1.23))
|
@@ -158,25 +165,48 @@ module ClientTest
|
|
158
165
|
end
|
159
166
|
end
|
160
167
|
|
161
|
-
def
|
162
|
-
|
168
|
+
def test_write_with_upsert
|
169
|
+
device1 = create_device
|
170
|
+
device2 = create_device(key="device2")
|
163
171
|
client = get_client
|
164
172
|
ts = Time.utc(2012, 1, 1)
|
165
173
|
|
166
|
-
|
167
|
-
sensor_key =
|
174
|
+
device_key1 = device1.key
|
175
|
+
sensor_key = device1.sensors.first.key
|
176
|
+
device_key2 = device2.key
|
177
|
+
device_key3 = "device3"
|
168
178
|
|
169
|
-
stubbed_body = {"device1" =>
|
179
|
+
stubbed_body = {"device1" =>
|
180
|
+
{"success" => true,
|
181
|
+
"message" => nil,
|
182
|
+
"device_state" => "existing"
|
183
|
+
},
|
184
|
+
"device2" =>
|
185
|
+
{"success" => true,
|
186
|
+
"message" => nil,
|
187
|
+
"device_state" => "modified"
|
188
|
+
},
|
189
|
+
"device3" =>
|
190
|
+
{"success" => true,
|
191
|
+
"message" => nil,
|
192
|
+
"device_state" => "created"
|
193
|
+
}
|
194
|
+
}
|
170
195
|
client.remoter.stub(:post, "/v2/write", 207, JSON.dump(stubbed_body))
|
171
196
|
|
172
197
|
status = client.write_bulk do |write|
|
173
|
-
write.add(
|
174
|
-
write.add(
|
198
|
+
write.add(device_key1, sensor_key, TempoIQ::DataPoint.new(ts, 1.23))
|
199
|
+
write.add(device_key2, "not_here", TempoIQ::DataPoint.new(ts, 2.34))
|
200
|
+
write.add(device_key3, "not_here", TempoIQ::DataPoint.new(ts, 2.34))
|
175
201
|
end
|
176
202
|
|
177
|
-
assert(
|
178
|
-
|
179
|
-
assert_equal(
|
203
|
+
assert(status.success?)
|
204
|
+
assert_equal(1, status.existing.size)
|
205
|
+
assert_equal("device1", status.existing.keys.first)
|
206
|
+
assert_equal(1, status.modified.size)
|
207
|
+
assert_equal("device2", status.modified.keys.first)
|
208
|
+
assert_equal(1, status.created.size)
|
209
|
+
assert_equal("device3", status.created.keys.first)
|
180
210
|
end
|
181
211
|
|
182
212
|
def test_write_device
|
@@ -187,7 +217,14 @@ module ClientTest
|
|
187
217
|
device_key = device.key
|
188
218
|
sensor_key = device.sensors.first.key
|
189
219
|
|
190
|
-
|
220
|
+
stubbed_body = {"device1" =>
|
221
|
+
{"success" => true,
|
222
|
+
"message" => nil,
|
223
|
+
"device_state" => "existing"
|
224
|
+
}
|
225
|
+
}
|
226
|
+
|
227
|
+
client.remoter.stub(:post, "/v2/write", 207, JSON.dump(stubbed_body))
|
191
228
|
|
192
229
|
written = client.write_device(device_key, ts, sensor_key => 1.23)
|
193
230
|
|
@@ -204,9 +241,16 @@ module ClientTest
|
|
204
241
|
device_key = device.key
|
205
242
|
sensor_key1 = device.sensors[0].key
|
206
243
|
sensor_key2 = device.sensors[1].key
|
207
|
-
|
208
|
-
client.remoter.stub(:post, "/v2/write", 200)
|
209
244
|
|
245
|
+
stubbed_body = {"device1" =>
|
246
|
+
{"success" => true,
|
247
|
+
"message" => nil,
|
248
|
+
"device_state" => "existing"
|
249
|
+
}
|
250
|
+
}
|
251
|
+
|
252
|
+
client.remoter.stub(:post, "/v2/write", 207, JSON.dump(stubbed_body))
|
253
|
+
|
210
254
|
write_result = client.write_device(device_key, Time.utc(2012, 1, 1, 1), sensor_key1 => 4.0, sensor_key2 => 2.0)
|
211
255
|
assert_equal(true, write_result)
|
212
256
|
write_result = client.write_device(device_key, Time.utc(2012, 1, 1, 2), sensor_key1 => 4.0, sensor_key2 => 2.0)
|
@@ -248,7 +292,14 @@ module ClientTest
|
|
248
292
|
device_key = device.key
|
249
293
|
sensor_key = device.sensors[0].key
|
250
294
|
|
251
|
-
|
295
|
+
stubbed_body = {"device1" =>
|
296
|
+
{"success" => true,
|
297
|
+
"message" => nil,
|
298
|
+
"device_state" => "existing"
|
299
|
+
}
|
300
|
+
}
|
301
|
+
|
302
|
+
client.remoter.stub(:post, "/v2/write", 207, JSON.dump(stubbed_body))
|
252
303
|
|
253
304
|
write_result = client.write_device(device_key, Time.utc(2012, 1, 1, 1, 0, 5, 0), sensor_key => 4.0)
|
254
305
|
assert_equal(true, write_result)
|
@@ -330,8 +381,14 @@ module ClientTest
|
|
330
381
|
|
331
382
|
device_key = device.key
|
332
383
|
sensor_key = device.sensors[0].key
|
384
|
+
stubbed_body = {"device1" =>
|
385
|
+
{"success" => true,
|
386
|
+
"message" => nil,
|
387
|
+
"device_state" => "existing"
|
388
|
+
}
|
389
|
+
}
|
333
390
|
|
334
|
-
client.remoter.stub(:post, "/v2/write",
|
391
|
+
client.remoter.stub(:post, "/v2/write", 207, JSON.dump(stubbed_body))
|
335
392
|
|
336
393
|
write_result = client.write_device(device_key, ts, sensor_key => 4.0)
|
337
394
|
assert_equal(true, write_result)
|
@@ -372,7 +429,14 @@ module ClientTest
|
|
372
429
|
sensor_key1 = device.sensors[0].key
|
373
430
|
sensor_key2 = device.sensors[1].key
|
374
431
|
|
375
|
-
|
432
|
+
stubbed_body = {"device1" =>
|
433
|
+
{"success" => true,
|
434
|
+
"message" => nil,
|
435
|
+
"device_state" => "existing"
|
436
|
+
}
|
437
|
+
}
|
438
|
+
|
439
|
+
client.remoter.stub(:post, "/v2/write", 207, JSON.dump(stubbed_body))
|
376
440
|
|
377
441
|
write_result = client.write_device(device_key, ts, sensor_key1 => 4.0, sensor_key2 => 2.0)
|
378
442
|
assert_equal(true, write_result)
|
@@ -416,8 +480,15 @@ module ClientTest
|
|
416
480
|
sensor_key1 = device.sensors[0].key
|
417
481
|
sensor_key2 = device.sensors[1].key
|
418
482
|
|
419
|
-
|
420
|
-
|
483
|
+
stubbed_body = {"device1" =>
|
484
|
+
{"success" => true,
|
485
|
+
"message" => nil,
|
486
|
+
"device_state" => "existing"
|
487
|
+
}
|
488
|
+
}
|
489
|
+
|
490
|
+
client.remoter.stub(:post, "/v2/write", 207, JSON.dump(stubbed_body))
|
491
|
+
client.remoter.stub(:post, "/v2/write", 207, JSON.dump(stubbed_body))
|
421
492
|
|
422
493
|
assert_equal(true, client.write_device(device_key, ts, sensor_key1 => 4.0, sensor_key2 => 2.0))
|
423
494
|
assert_equal(true, client.write_device(device_key, ts2, sensor_key1 => 4.0, sensor_key2 => 2.0))
|
@@ -510,7 +581,14 @@ module ClientTest
|
|
510
581
|
}
|
511
582
|
|
512
583
|
client.remoter.stub(:get, "/v2/single", 200, JSON.dump(stubbed_single))
|
513
|
-
|
584
|
+
stubbed_body = {"device1" =>
|
585
|
+
{"success" => true,
|
586
|
+
"message" => nil,
|
587
|
+
"device_state" => "existing"
|
588
|
+
}
|
589
|
+
}
|
590
|
+
|
591
|
+
client.remoter.stub(:post, "/v2/write", 207, JSON.dump(stubbed_body))
|
514
592
|
|
515
593
|
client.write_bulk do |write|
|
516
594
|
write.add(device_key, sensor_key1, TempoIQ::DataPoint.new(ts, 4.0))
|
@@ -553,7 +631,14 @@ module ClientTest
|
|
553
631
|
}
|
554
632
|
|
555
633
|
client.remoter.stub(:get, "/v2/single", 200, JSON.dump(stubbed_single))
|
556
|
-
|
634
|
+
stubbed_body = {"device1" =>
|
635
|
+
{"success" => true,
|
636
|
+
"message" => nil,
|
637
|
+
"device_state" => "existing"
|
638
|
+
}
|
639
|
+
}
|
640
|
+
|
641
|
+
client.remoter.stub(:post, "/v2/write", 207, JSON.dump(stubbed_body))
|
557
642
|
|
558
643
|
client.write_bulk do |write|
|
559
644
|
write.add(device_key, sensor_key1, TempoIQ::DataPoint.new(ts, 4.0))
|
@@ -598,7 +683,14 @@ module ClientTest
|
|
598
683
|
}
|
599
684
|
|
600
685
|
client.remoter.stub(:get, "/v2/single", 200, JSON.dump(stubbed_single))
|
601
|
-
|
686
|
+
stubbed_body = {"device1" =>
|
687
|
+
{"success" => true,
|
688
|
+
"message" => nil,
|
689
|
+
"device_state" => "existing"
|
690
|
+
}
|
691
|
+
}
|
692
|
+
|
693
|
+
client.remoter.stub(:post, "/v2/write", 207, JSON.dump(stubbed_body))
|
602
694
|
|
603
695
|
client.write_bulk do |write|
|
604
696
|
write.add(device_key, sensor_key1, TempoIQ::DataPoint.new(ts_before, 4.0))
|
@@ -643,7 +735,14 @@ module ClientTest
|
|
643
735
|
}
|
644
736
|
|
645
737
|
client.remoter.stub(:get, "/v2/single", 200, JSON.dump(stubbed_single))
|
646
|
-
|
738
|
+
stubbed_body = {"device1" =>
|
739
|
+
{"success" => true,
|
740
|
+
"message" => nil,
|
741
|
+
"device_state" => "existing"
|
742
|
+
}
|
743
|
+
}
|
744
|
+
|
745
|
+
client.remoter.stub(:post, "/v2/write", 207, JSON.dump(stubbed_body))
|
647
746
|
|
648
747
|
client.write_bulk do |write|
|
649
748
|
write.add(device_key, sensor_key1, TempoIQ::DataPoint.new(ts, 4.0))
|
@@ -686,7 +785,14 @@ module ClientTest
|
|
686
785
|
}
|
687
786
|
|
688
787
|
client.remoter.stub(:get, "/v2/single", 200, JSON.dump(stubbed_single))
|
689
|
-
|
788
|
+
stubbed_body = {"device1" =>
|
789
|
+
{"success" => true,
|
790
|
+
"message" => nil,
|
791
|
+
"device_state" => "existing"
|
792
|
+
}
|
793
|
+
}
|
794
|
+
|
795
|
+
client.remoter.stub(:post, "/v2/write", 207, JSON.dump(stubbed_body))
|
690
796
|
|
691
797
|
client.write_bulk do |write|
|
692
798
|
write.add(device_key, sensor_key1, TempoIQ::DataPoint.new(ts, 4.0))
|
@@ -729,7 +835,14 @@ module ClientTest
|
|
729
835
|
}
|
730
836
|
|
731
837
|
client.remoter.stub(:get, "/v2/single", 200, JSON.dump(stubbed_single))
|
732
|
-
|
838
|
+
stubbed_body = {"device1" =>
|
839
|
+
{"success" => true,
|
840
|
+
"message" => nil,
|
841
|
+
"device_state" => "existing"
|
842
|
+
}
|
843
|
+
}
|
844
|
+
|
845
|
+
client.remoter.stub(:post, "/v2/write", 207, JSON.dump(stubbed_body))
|
733
846
|
|
734
847
|
client.write_bulk do |write|
|
735
848
|
write.add(device_key, sensor_key1, TempoIQ::DataPoint.new(ts, 4.0))
|
@@ -757,7 +870,14 @@ module ClientTest
|
|
757
870
|
|
758
871
|
ts = Time.utc(2012, 1, 1)
|
759
872
|
|
760
|
-
|
873
|
+
stubbed_body = {"device1" =>
|
874
|
+
{"success" => true,
|
875
|
+
"message" => nil,
|
876
|
+
"device_state" => "existing"
|
877
|
+
}
|
878
|
+
}
|
879
|
+
|
880
|
+
client.remoter.stub(:post, "/v2/write", 207, JSON.dump(stubbed_body))
|
761
881
|
|
762
882
|
client.write_bulk do |write|
|
763
883
|
write.add(device_key, sensor_key1, TempoIQ::DataPoint.new(ts, 4.0))
|
@@ -847,6 +967,7 @@ module ClientTest
|
|
847
967
|
}
|
848
968
|
|
849
969
|
client.remoter.stub(:delete, "/v2/devices", 200, JSON.dump(stubbed_body))
|
850
|
-
|
970
|
+
summary1 = client.delete_devices(:devices => {:attribute_key => TEMPO_TEST_ATTR})
|
971
|
+
summary2 = client.delete_devices(:devices => {:key => "device3"})
|
851
972
|
end
|
852
973
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tempoiq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TempoIQ Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test-unit
|
@@ -59,7 +59,7 @@ dependencies:
|
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '2.4'
|
62
|
-
- - '>='
|
62
|
+
- - ! '>='
|
63
63
|
- !ruby/object:Gem::Version
|
64
64
|
version: 2.4.0
|
65
65
|
type: :runtime
|
@@ -69,7 +69,7 @@ dependencies:
|
|
69
69
|
- - ~>
|
70
70
|
- !ruby/object:Gem::Version
|
71
71
|
version: '2.4'
|
72
|
-
- - '>='
|
72
|
+
- - ! '>='
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: 2.4.0
|
75
75
|
- !ruby/object:Gem::Dependency
|
@@ -105,7 +105,6 @@ files:
|
|
105
105
|
- lib/tempoiq/models/delete_summary.rb
|
106
106
|
- lib/tempoiq/models/device.rb
|
107
107
|
- lib/tempoiq/models/find.rb
|
108
|
-
- lib/tempoiq/models/multi_status.rb
|
109
108
|
- lib/tempoiq/models/pipeline.rb
|
110
109
|
- lib/tempoiq/models/query.rb
|
111
110
|
- lib/tempoiq/models/read.rb
|
@@ -114,6 +113,7 @@ files:
|
|
114
113
|
- lib/tempoiq/models/selection.rb
|
115
114
|
- lib/tempoiq/models/sensor.rb
|
116
115
|
- lib/tempoiq/models/single.rb
|
116
|
+
- lib/tempoiq/models/write_response.rb
|
117
117
|
- lib/tempoiq/remoter/http_result.rb
|
118
118
|
- lib/tempoiq/remoter/live_remoter.rb
|
119
119
|
- lib/tempoiq/remoter/stubbed_remoter.rb
|
@@ -134,12 +134,12 @@ require_paths:
|
|
134
134
|
- lib
|
135
135
|
required_ruby_version: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
|
-
- - '>='
|
137
|
+
- - ! '>='
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '0'
|
140
140
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
141
|
requirements:
|
142
|
-
- - '>='
|
142
|
+
- - ! '>='
|
143
143
|
- !ruby/object:Gem::Version
|
144
144
|
version: '0'
|
145
145
|
requirements: []
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module TempoIQ
|
2
|
-
# MultiStatus is used in cases where an operation might partially succeed
|
3
|
-
# and partially fail. It provides several helper functions to introspect the
|
4
|
-
# failure and take appropriate action. (Log failure, resend DataPoints, etc.)
|
5
|
-
class MultiStatus
|
6
|
-
attr_reader :status
|
7
|
-
|
8
|
-
def initialize(status = nil)
|
9
|
-
@status = status
|
10
|
-
end
|
11
|
-
|
12
|
-
# Was the request a total success?
|
13
|
-
def success?
|
14
|
-
status.nil?
|
15
|
-
end
|
16
|
-
|
17
|
-
# Did the request have partial failures?
|
18
|
-
def partial_success?
|
19
|
-
!success?
|
20
|
-
end
|
21
|
-
|
22
|
-
# Retrieve the failures, key => message [Hash]
|
23
|
-
def failures
|
24
|
-
Hash[status.map { |device_key, v| [device_key, v["message"]] } ]
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|