validic 0.3.3 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.rspec +0 -1
  4. data/Gemfile +12 -1
  5. data/Gemfile.lock +32 -62
  6. data/README.md +442 -28
  7. data/lib/validic.rb +3 -20
  8. data/lib/validic/app.rb +11 -0
  9. data/lib/validic/biometrics.rb +9 -0
  10. data/lib/validic/client.rb +35 -77
  11. data/lib/validic/diabetes.rb +4 -60
  12. data/lib/validic/error.rb +33 -0
  13. data/lib/validic/extra.rb +10 -0
  14. data/lib/validic/fitness.rb +4 -57
  15. data/lib/validic/nutrition.rb +5 -61
  16. data/lib/validic/organization.rb +6 -13
  17. data/lib/validic/profile.rb +4 -39
  18. data/lib/validic/response.rb +15 -0
  19. data/lib/validic/rest/apps.rb +21 -0
  20. data/lib/validic/rest/biometrics.rb +39 -0
  21. data/lib/validic/rest/diabetes.rb +39 -0
  22. data/lib/validic/rest/fitness.rb +40 -0
  23. data/lib/validic/rest/nutrition.rb +40 -0
  24. data/lib/validic/rest/organizations.rb +12 -0
  25. data/lib/validic/rest/profile.rb +18 -0
  26. data/lib/validic/rest/request.rb +95 -0
  27. data/lib/validic/rest/routine.rb +40 -0
  28. data/lib/validic/rest/sleep.rb +41 -0
  29. data/lib/validic/rest/tobacco_cessation.rb +40 -0
  30. data/lib/validic/rest/users.rb +55 -0
  31. data/lib/validic/rest/utils.rb +28 -0
  32. data/lib/validic/rest/weight.rb +43 -0
  33. data/lib/validic/routine.rb +4 -55
  34. data/lib/validic/sleep.rb +4 -59
  35. data/lib/validic/summary.rb +18 -0
  36. data/lib/validic/tobacco_cessation.rb +4 -53
  37. data/lib/validic/user.rb +4 -99
  38. data/lib/validic/utils.rb +13 -0
  39. data/lib/validic/version.rb +1 -1
  40. data/lib/validic/weight.rb +4 -57
  41. data/spec/fixtures/apps.json +32 -0
  42. data/spec/fixtures/biometrics-expanded.json +56 -0
  43. data/spec/fixtures/biometrics-extras.json +35 -0
  44. data/spec/fixtures/biometrics_record.json +36 -0
  45. data/spec/fixtures/biometrics_records.json +54 -0
  46. data/spec/fixtures/bulk_biometrics_records.json +55 -0
  47. data/spec/fixtures/bulk_diabetes_records.json +37 -0
  48. data/spec/fixtures/bulk_fitnesses.json +35 -0
  49. data/spec/fixtures/bulk_nutritions.json +37 -0
  50. data/spec/fixtures/bulk_sleeps.json +35 -0
  51. data/spec/fixtures/bulk_tobacco_cessations.json +33 -0
  52. data/spec/fixtures/conflict.json +5 -0
  53. data/spec/fixtures/diabetes-expanded.json +38 -0
  54. data/spec/fixtures/diabetes-extras.json +17 -0
  55. data/spec/fixtures/diabetes_record.json +18 -0
  56. data/spec/fixtures/diabetes_records.json +36 -0
  57. data/spec/fixtures/fitness-expanded.json +1521 -0
  58. data/spec/fixtures/fitness-extras.json +15 -0
  59. data/spec/fixtures/fitness.json +16 -0
  60. data/spec/fixtures/fitnesses.json +34 -0
  61. data/spec/fixtures/forbidden.json +5 -0
  62. data/spec/fixtures/internal_server.json +4 -0
  63. data/spec/fixtures/me.json +5 -0
  64. data/spec/fixtures/not_found.json +5 -0
  65. data/spec/fixtures/nutrition-expanded.json +123 -0
  66. data/spec/fixtures/nutrition-extras.json +13 -0
  67. data/spec/fixtures/nutrition.json +18 -0
  68. data/spec/fixtures/nutritions-expanded.json +123 -0
  69. data/spec/fixtures/nutritions.json +36 -0
  70. data/spec/fixtures/organizations.json +27 -0
  71. data/spec/fixtures/profile.json +13 -0
  72. data/spec/fixtures/refresh_token.json +7 -0
  73. data/spec/fixtures/routine-expanded.json +749 -0
  74. data/spec/fixtures/routine-extras.json +14 -0
  75. data/spec/fixtures/routine.json +17 -0
  76. data/spec/fixtures/routines.json +47 -0
  77. data/spec/fixtures/sleep-expanded.json +51 -0
  78. data/spec/fixtures/sleep-extras.json +15 -0
  79. data/spec/fixtures/sleep.json +16 -0
  80. data/spec/fixtures/sleeps.json +48 -0
  81. data/spec/fixtures/synced_apps.json +43 -0
  82. data/spec/fixtures/tobacco_cessation-expanded.json +33 -0
  83. data/spec/fixtures/tobacco_cessation-extras.json +12 -0
  84. data/spec/fixtures/tobacco_cessation.json +14 -0
  85. data/spec/fixtures/tobacco_cessations.json +32 -0
  86. data/spec/fixtures/unauthorized.json +4 -0
  87. data/spec/fixtures/unprocessable_entity.json +5 -0
  88. data/spec/fixtures/updated_user.json +9 -0
  89. data/spec/fixtures/user.json +8 -0
  90. data/spec/fixtures/user_with_profile.json +14 -0
  91. data/spec/fixtures/users.json +23 -0
  92. data/spec/fixtures/weight-expanded.json +66 -0
  93. data/spec/fixtures/weight-extras.json +15 -0
  94. data/spec/fixtures/weight.json +18 -0
  95. data/spec/fixtures/weights.json +48 -0
  96. data/spec/spec_helper.rb +47 -33
  97. data/spec/validic/client_spec.rb +5 -38
  98. data/spec/validic/error_spec.rb +73 -0
  99. data/spec/validic/expanded_spec.rb +87 -0
  100. data/spec/validic/rest/apps_spec.rb +41 -0
  101. data/spec/validic/rest/biometrics_spec.rb +131 -0
  102. data/spec/validic/rest/diabetes_spec.rb +131 -0
  103. data/spec/validic/rest/fitness_spec.rb +131 -0
  104. data/spec/validic/rest/nutrition_spec.rb +144 -0
  105. data/spec/validic/rest/organizations_spec.rb +24 -0
  106. data/spec/validic/rest/profile_spec.rb +44 -0
  107. data/spec/validic/rest/routine_spec.rb +129 -0
  108. data/spec/validic/rest/sleep_spec.rb +148 -0
  109. data/spec/validic/rest/tobacco_cessation_spec.rb +131 -0
  110. data/spec/validic/rest/users_spec.rb +170 -0
  111. data/spec/validic/rest/weight_spec.rb +150 -0
  112. data/spec/validic/summary_spec.rb +3 -0
  113. data/spec/validic_spec.rb +19 -31
  114. data/validic.gemspec +0 -13
  115. metadata +174 -194
  116. data/lib/validic/biometric.rb +0 -97
  117. data/lib/validic/request.rb +0 -46
  118. data/lib/validic/third_party_app.rb +0 -32
  119. data/spec/validic/biometrics_spec.rb +0 -43
  120. data/spec/validic/diabetes_spec.rb +0 -89
  121. data/spec/validic/fitness_spec.rb +0 -85
  122. data/spec/validic/nutrition_spec.rb +0 -91
  123. data/spec/validic/organization_spec.rb +0 -26
  124. data/spec/validic/profile_spec.rb +0 -19
  125. data/spec/validic/routine_spec.rb +0 -82
  126. data/spec/validic/sleep_spec.rb +0 -86
  127. data/spec/validic/third_party_app_spec.rb +0 -32
  128. data/spec/validic/tobacco_cessation_spec.rb +0 -81
  129. data/spec/validic/user_spec.rb +0 -81
  130. data/spec/validic/weight_spec.rb +0 -88
@@ -0,0 +1,14 @@
1
+ {
2
+ "routine": {
3
+ "timestamp": "2013-03-10T07:12:16+00:00",
4
+ "utc_offset": "+00:00",
5
+ "steps": 9355,
6
+ "distance": 7290.33,
7
+ "floors": 23,
8
+ "elevation": 3.4,
9
+ "calories_burned": 2874,
10
+ "activity_id": "12345",
11
+ "extras": {"stars": 3}
12
+ },
13
+ "access_token": "e7ba1f04e88f25d399a91c8cbcd72300e01309e96b7725e40b49cd1effaa5deb"
14
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "code": 201,
3
+ "message": "Ok",
4
+ "routine": {
5
+ "_id": "51552cdbfded0807c400006d",
6
+ "timestamp": "2013-03-10T07:12:16+00:00",
7
+ "utc_offset": "+00:00",
8
+ "steps": 9355,
9
+ "distance": 7290.33,
10
+ "floors": 23.0,
11
+ "elevation": 3.4,
12
+ "calories_burned": 2874,
13
+ "source": "sample_app",
14
+ "source_name": "Sample App",
15
+ "last_updated": "2013-03-10T07:12:16+00:00"
16
+ }
17
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "summary": {
3
+ "status": 200,
4
+ "message": "OK",
5
+ "results": 3,
6
+ "start_date": "2013-03-27T00:00:00+00:00",
7
+ "end_date": "2013-03-27T23:59:59+00:00",
8
+ "offset": 0,
9
+ "limit": 100,
10
+ "previous": null,
11
+ "next": null,
12
+ "params": {
13
+ "start_date": null,
14
+ "end_date": null,
15
+ "offset": null,
16
+ "limit": null
17
+ }
18
+ },"routine": [
19
+ {
20
+ "_id": "51552cdbfded0807c4000062",
21
+ "timestamp": "2013-03-10T07:12:16+00:00",
22
+ "utc_offset": "+00:00",
23
+ "steps": 9355,
24
+ "distance": 7290.33,
25
+ "floors": 23,
26
+ "elevation": 3.4,
27
+ "calories_burned": 2874,
28
+ "source": "sample_app",
29
+ "source_name": "Sample App",
30
+ "last_updated": "2013-03-10T07:12:16+00:00"
31
+ },
32
+ {
33
+ "_id": "51552cdbfded0807c4000062",
34
+ "timestamp": "2013-03-10T07:12:16+00:00",
35
+ "utc_offset": "+00:00",
36
+ "steps": 9355,
37
+ "distance": 7290.33,
38
+ "floors": 23,
39
+ "elevation": 3.4,
40
+ "calories_burned": 2874,
41
+ "source": "sample_app",
42
+ "source_name": "Sample App",
43
+ "last_updated": "2013-03-10T07:12:16+00:00"
44
+ }
45
+ ]
46
+ }
47
+
@@ -0,0 +1,51 @@
1
+ {
2
+ "summary": {
3
+ "status": 200,
4
+ "message": "Ok",
5
+ "results": 2,
6
+ "start_date": "2015-01-14T00:00:00+00:00",
7
+ "end_date": "2015-01-16T23:59:59+00:00",
8
+ "offset": 0,
9
+ "limit": 100,
10
+ "previous": null,
11
+ "next": null,
12
+ "params": {
13
+ "start_date": null,
14
+ "end_date": null,
15
+ "offset": 0,
16
+ "limit": 0
17
+ }
18
+ },
19
+ "sleep": [
20
+ {
21
+ "_id": "54b7512363f4821b49002a5a",
22
+ "timestamp": "2015-01-15T08:29:20+00:00",
23
+ "utc_offset": "+08:00",
24
+ "awake": 2289,
25
+ "deep": 7955,
26
+ "light": 7502,
27
+ "rem": null,
28
+ "times_woken": 1,
29
+ "total_sleep": 17746,
30
+ "source": "jawbone_up",
31
+ "source_name": "Jawbone Up",
32
+ "last_updated": "2015-01-15T05:33:23+00:00",
33
+ "user_id": "52ffcb4bf1f70eefba000004"
34
+ },
35
+ {
36
+ "_id": "54b65a51e22c4dbe05000aa4",
37
+ "timestamp": "2015-01-14T02:42:36+00:00",
38
+ "utc_offset": "-06:00",
39
+ "awake": 2361,
40
+ "deep": 17581,
41
+ "light": 10739,
42
+ "rem": null,
43
+ "times_woken": 0,
44
+ "total_sleep": 30681,
45
+ "source": "jawbone_up",
46
+ "source_name": "Jawbone Up",
47
+ "last_updated": "2015-01-14T12:00:17+00:00",
48
+ "user_id": "535573c8f1f70e2bb6000012"
49
+ }
50
+ ]
51
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "sleep": {
3
+ "timestamp": "2013-03-10T07:12:16+00:00",
4
+ "utc_offset": "+00:00",
5
+ "total_sleep": 477,
6
+ "awake": 34,
7
+ "deep": 234,
8
+ "light": 94,
9
+ "rem": 115,
10
+ "times_woken": 4,
11
+ "activity_id": "12345",
12
+ "extras": {"stars": 3}
13
+ },
14
+ "access_token": "e7ba1f04e88f25d399a91c8cbcd72300e01309e96b7725e40b49cd1effaa5deb"
15
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "sleep": {
3
+ "_id": "51552cddfded0807c4000096",
4
+ "timestamp": "2013-03-10T07:12:16+00:00",
5
+ "utc_offset": "+00:00",
6
+ "awake": 34,
7
+ "deep": 234,
8
+ "light": 94,
9
+ "rem": 115,
10
+ "times_woken": 4,
11
+ "total_sleep": 477,
12
+ "source": "sample_app",
13
+ "source_name": "Sample App",
14
+ "last_updated": "2013-03-10T07:12:16+00:00"
15
+ }
16
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "summary": {
3
+ "status": 200,
4
+ "message": "OK",
5
+ "results": 3,
6
+ "start_date": "2013-03-27T00:00:00+00:00",
7
+ "end_date": "2013-03-27T23:59:59+00:00",
8
+ "offset": 0,
9
+ "limit": 100,
10
+ "previous": null,
11
+ "next": null,
12
+ "params": {
13
+ "start_date": null,
14
+ "end_date": null,
15
+ "offset": null,
16
+ "limit": null
17
+ }
18
+ }, "sleep": [
19
+ {
20
+ "_id": "51552cddfded0807c400008b",
21
+ "timestamp": "2013-03-10T07:12:16+00:00",
22
+ "utc_offset": "+00:00",
23
+ "awake": 34,
24
+ "deep": 234,
25
+ "light": 94,
26
+ "rem": 115,
27
+ "times_woken": 4,
28
+ "total_sleep": 477,
29
+ "source": "sample_app",
30
+ "source_name": "Sample App",
31
+ "last_updated": "2013-03-10T07:12:16+00:00"
32
+ },
33
+ {
34
+ "_id": "51552cddfded0807c400008c",
35
+ "timestamp": "2013-03-10T07:12:16+00:00",
36
+ "utc_offset": "+00:00",
37
+ "awake": 34,
38
+ "deep": 445,
39
+ "light": 94,
40
+ "rem": 115,
41
+ "times_woken": 4,
42
+ "total_sleep": 477,
43
+ "source": "sample_app",
44
+ "source_name": "Sample App",
45
+ "last_updated": "2013-03-10T07:12:16+00:00"
46
+ }
47
+ ]
48
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "summary": {
3
+ "status": 200,
4
+ "message": "Ok",
5
+ "results": 11,
6
+ "start_date": "2015-01-13T00:00:00+00:00",
7
+ "end_date": "2015-01-15T23:59:59+00:00",
8
+ "offset": 0,
9
+ "limit": null,
10
+ "previous": null,
11
+ "next": null,
12
+ "params": {
13
+ "start_date": null,
14
+ "end_date": null,
15
+ "offset": 0,
16
+ "limit": 0
17
+ }
18
+ },
19
+ "apps": [
20
+ {
21
+ "name": "Fleetly",
22
+ "sync_url": "https://app.validic.com/organizations/1/auth/fleetly?user_token=T6ac2gyEoDcasyqj6EWf&format_redirect=json",
23
+ "unsync_url": "https://app.validic.com/organizations/1/unsync/fleetly?user_token=T6ac2gyEoDcasyqj6EWf&format_redirect=json",
24
+ "refresh_url": "https://app.validic.com/organizations/1/refresh/fleetly?user_token=T6ac2gyEoDcasyqj6EWf&format_redirect=json",
25
+ "download_link": "",
26
+ "excerpt": "Fleetly is the best app to reach your fitness goals.",
27
+ "extra_excerpt": "Earn points for logging your workouts, connect with friends and join challenges at all levels, from beginner to pro. Featured in LifeHacker, Mashable, Fitness Magazine, Ubergizmo, VentureBeat, CNET, UrbanDaddy, and Huffington Post's \"Best strength training app\".",
28
+ "subname": "fleetly",
29
+ "kind": [
30
+ "fitness"
31
+ ],
32
+ "logo_url": "/assets/appicons/fleetly-icon.png",
33
+ "platform_types": [
34
+ "Web",
35
+ "iOS",
36
+ "Android"
37
+ ],
38
+ "synced": true,
39
+ "last_sync": "2015-01-14T19:21:08+00:00"
40
+ }
41
+ ]
42
+ }
43
+
@@ -0,0 +1,33 @@
1
+ {
2
+ "summary": {
3
+ "status": 200,
4
+ "message": "Ok",
5
+ "results": 0,
6
+ "start_date": "2015-01-14T00:00:00+00:00",
7
+ "end_date": "2015-01-16T23:59:59+00:00",
8
+ "offset": 0,
9
+ "limit": 100,
10
+ "previous": null,
11
+ "next": null,
12
+ "params": {
13
+ "start_date": null,
14
+ "end_date": null,
15
+ "offset": 0,
16
+ "limit": 0
17
+ }
18
+ },
19
+ "tobacco_cessation": [
20
+ {
21
+ "_id": "51552cd8fded0807c4000031",
22
+ "timestamp": "2013-03-10T07:12:16+00:00",
23
+ "utc_offset": "+00:00",
24
+ "cigarettes_allowed": 9,
25
+ "cigarettes_smoked": 2,
26
+ "cravings": 12,
27
+ "last_smoked": "2013-03-10T05:55:36+00:00",
28
+ "source": "sample_app",
29
+ "source_name": "Sample App",
30
+ "last_updated": "2013-03-10T07:12:16+00:00"
31
+ }
32
+ ]
33
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "tobacco_cessation": {
3
+ "timestamp": "2013-03-10T07:12:16+00:00",
4
+ "utc_offset": "+00:00",
5
+ "cigarettes_allowed": 9,
6
+ "cigarettes_smoked": 2,
7
+ "cravings": 12,
8
+ "last_smoked": "2013-03-10T05:55:36+00:00",
9
+ "extras": {"stars": 3}
10
+ },
11
+ "access_token": "e7ba1f04e88f25d399a91c8cbcd72300e01309e96b7725e40b49cd1effaa5deb"
12
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "tobacco_cessation": {
3
+ "_id": "51552cd8fded0807c400003c",
4
+ "timestamp": "2013-03-10T07:12:16+00:00",
5
+ "utc_offset": "+00:00",
6
+ "cigarettes_allowed": 9,
7
+ "cigarettes_smoked": 2,
8
+ "cravings": 12,
9
+ "last_smoked": "2013-03-10T05:55:36+00:00",
10
+ "source": "sample_app",
11
+ "source_name": "Sample App",
12
+ "last_updated": "2013-03-10T07:12:16+00:00"
13
+ }
14
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "summary": {
3
+ "status": 200,
4
+ "message": "OK",
5
+ "results": 3,
6
+ "start_date": "2013-03-27T00:00:00+00:00",
7
+ "end_date": "2013-03-27T23:59:59+00:00",
8
+ "offset": 0,
9
+ "limit": 100,
10
+ "previous": null,
11
+ "next": null,
12
+ "params": {
13
+ "start_date": null,
14
+ "end_date": null,
15
+ "offset": null,
16
+ "limit": null
17
+ }
18
+ }, "tobacco_cessation": [
19
+ {
20
+ "_id": "51552cd8fded0807c4000031",
21
+ "timestamp": "2013-03-10T07:12:16+00:00",
22
+ "utc_offset": "+00:00",
23
+ "cigarettes_allowed": 9,
24
+ "cigarettes_smoked": 2,
25
+ "cravings": 12,
26
+ "last_smoked": "2013-03-10T05:55:36+00:00",
27
+ "source": "sample_app",
28
+ "source_name": "Sample App",
29
+ "last_updated": "2013-03-10T07:12:16+00:00"
30
+ }
31
+ ]
32
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "code": 401,
3
+ "message": "Unauthorized"
4
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "code": 422,
3
+ "message": "Unprocessable Entity",
4
+ "errors": "Calories can't be blank, Timestamp can't be blank"
5
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "user": {
3
+ "_id": "1",
4
+ "uid": "abcde",
5
+ "access_token": "1",
6
+ "profile": null
7
+ }
8
+ }
9
+
@@ -0,0 +1,8 @@
1
+ {
2
+ "user": {
3
+ "_id": "1",
4
+ "uid": "123467890",
5
+ "access_token": "1",
6
+ "profile": null
7
+ }
8
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "user": {
3
+ "_id": "1",
4
+ "uid": "123467890",
5
+ "access_token": "1",
6
+ "profile": {
7
+ "gender": "M",
8
+ "location": null,
9
+ "birth_year": null,
10
+ "height": null,
11
+ "weight": null
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "summary": {
3
+ "status": 200,
4
+ "message": "OK",
5
+ "results": 3,
6
+ "start_date": "2013-03-27T00:00:00+00:00",
7
+ "end_date": "2013-03-27T23:59:59+00:00",
8
+ "offset": 0,
9
+ "limit": 100,
10
+ "previous": null,
11
+ "next": null,
12
+ "params": {
13
+ "start_date": null,
14
+ "end_date": null,
15
+ "offset": null,
16
+ "limit": null
17
+ }
18
+ }, "users": [
19
+ {"_id": "54a1c63884626b41c1000516"},
20
+ {"_id": "54a2c29d84626b8d6c000012"},
21
+ {"_id": "54a2c5bf84626b198f00000b"}
22
+ ]
23
+ }
@@ -0,0 +1,66 @@
1
+ {
2
+ "summary": {
3
+ "status": 200,
4
+ "message": "Ok",
5
+ "results": 3,
6
+ "start_date": "2015-01-14T00:00:00+00:00",
7
+ "end_date": "2015-01-16T23:59:59+00:00",
8
+ "offset": 0,
9
+ "limit": 100,
10
+ "previous": null,
11
+ "next": null,
12
+ "params": {
13
+ "start_date": null,
14
+ "end_date": null,
15
+ "offset": 0,
16
+ "limit": 0
17
+ }
18
+ },
19
+ "weight": [
20
+ {
21
+ "_id": "54b80f0e881661dac000d7e4",
22
+ "timestamp": "2015-01-15T18:30:00+00:00",
23
+ "utc_offset": "+05:30",
24
+ "weight": 44,
25
+ "height": null,
26
+ "free_mass": null,
27
+ "fat_percent": 14,
28
+ "mass_weight": null,
29
+ "bmi": 15.19,
30
+ "source": "fitbit",
31
+ "source_name": "Fitbit",
32
+ "last_updated": "2015-01-15T19:03:42+00:00",
33
+ "user_id": "52fa869cf1f70e078700001f"
34
+ },
35
+ {
36
+ "_id": "54b6a4ee9cefa4e4ab000bd4",
37
+ "timestamp": "2015-01-14T17:59:29+00:00",
38
+ "utc_offset": "+00:00",
39
+ "weight": 53,
40
+ "height": null,
41
+ "free_mass": 40,
42
+ "fat_percent": 24.528301886792,
43
+ "mass_weight": null,
44
+ "bmi": null,
45
+ "source": "healthgraph",
46
+ "source_name": "RunKeeper",
47
+ "last_updated": "2015-01-14T17:18:38+00:00",
48
+ "user_id": "52f36ec6f1f70e2719000001"
49
+ },
50
+ {
51
+ "_id": "54b670d3f9d1395895035a1c",
52
+ "timestamp": "2015-01-14T13:23:29+00:00",
53
+ "utc_offset": "+00:00",
54
+ "weight": 56,
55
+ "height": null,
56
+ "free_mass": null,
57
+ "fat_percent": 0,
58
+ "mass_weight": null,
59
+ "bmi": 21.875,
60
+ "source": "vitadock",
61
+ "source_name": "Vitadock",
62
+ "last_updated": "2015-01-14T13:36:19+00:00",
63
+ "user_id": "52ffcb4bf1f70eefba000004"
64
+ }
65
+ ]
66
+ }