insulin 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +4 -2
- data/TODO.md +7 -1
- data/files/on_track.csv +3 -0
- data/lib/insulin/day.rb +8 -0
- data/lib/insulin/event.rb +9 -3
- data/lib/insulin/n_day_period.rb +14 -2
- data/lib/insulin/on_track/csv_line.rb +5 -1
- data/lib/insulin/on_track/date.rb +1 -0
- data/lib/insulin/version.rb +1 -1
- data/spec/day_spec.rb +3 -1
- data/spec/event_spec.rb +6 -0
- data/spec/month_spec.rb +0 -4
- data/spec/n_day_period_spec.rb +14 -14
- data/spec/on_track/date_spec.rb +4 -0
- metadata +2 -2
data/README.md
CHANGED
@@ -63,10 +63,12 @@ OnTrack allows you to mail the exported CSV files to an email address. [This pag
|
|
63
63
|
Next steps
|
64
64
|
==========
|
65
65
|
|
66
|
-
*
|
67
|
-
*
|
66
|
+
* Generate custom CSVs for spreadsheeting
|
67
|
+
* Generate PDFs for daily mail reports
|
68
|
+
* Do some analysis
|
68
69
|
* Generate some more detailed output (latest HbA1c, BP, etc)
|
69
70
|
* Give it a [meteor](http://meteor.com/) front-end (might require some help from [Chris](https://github.com/mrchrisadams)). Graphs, yo
|
71
|
+
* Connect to the Google Drive API to pull the exported CSVs (OnTrack will push there) and push spreadsheetable CSVs
|
70
72
|
* Possibly connect to [this API](http://platform.fatsecret.com/api/) to extract carb values from plain-text food descriptions (this may be a little ambitious, we'll see)
|
71
73
|
|
72
74
|
---
|
data/TODO.md
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
* Default 'day' for executable doesn't make much sense
|
2
1
|
* Indexes
|
3
2
|
* Map/reduce somewhere?
|
4
3
|
* Jenkins?
|
@@ -8,3 +7,10 @@
|
|
8
7
|
* empty time periods should return "nothing known"
|
9
8
|
* https://github.com/prawnpdf/prawn
|
10
9
|
* Fully detailed output showing latest HbA1c, BP, etc
|
10
|
+
* Work out Google Drive API
|
11
|
+
* Write some proper rubydocs
|
12
|
+
* Should not include HbA1c or BP in normal output. Also, these things need units. And BP is not really a number
|
13
|
+
* Number of tests &c per time period
|
14
|
+
* Somehow include cholesterol
|
15
|
+
* Test the insulin executable
|
16
|
+
* "Latest weight, change since last, overall trend" &c
|
data/files/on_track.csv
CHANGED
@@ -21,6 +21,8 @@ N: new pot of strips"
|
|
21
21
|
294,"Jul 1, 2012 9:57:09 AM",Medication,Humalog,Breakfast,4.0,"Boiled eggs, toast"
|
22
22
|
293,"Jul 1, 2012 9:41:47 AM",Glucose,,Breakfast,6.4,""
|
23
23
|
292,"Jul 1, 2012 12:40:24 AM",Medication,Lantus,Bedtime,14.0,""
|
24
|
+
441,"Jun 30, 2012 3:46:29 PM",HbA1c,,,8.8,""
|
25
|
+
440,"Jun 30, 2012 3:46:15 PM",Blood Pressure,,After Lunch,118/75,""
|
24
26
|
291,"Jun 30, 2012 11:14:04 PM",Glucose,,Bedtime,17.5,"D:m"
|
25
27
|
290,"Jun 30, 2012 7:56:20 PM",Glucose,,After Dinner,7.0,""
|
26
28
|
289,"Jun 30, 2012 7:07:42 PM",Medication,Humalog,Dinner,6.0,"Prawns, egg-fried rice"
|
@@ -39,3 +41,4 @@ N: new pot of strips"
|
|
39
41
|
276,"Jun 29, 2012 10:00:54 AM",Weight,,Breakfast,58.0,""
|
40
42
|
275,"Jun 29, 2012 8:45:13 AM",Medication,Humalog,Breakfast,4.0,"F:2 eggs, 2 toast"
|
41
43
|
274,"Jun 29, 2012 8:37:47 AM",Glucose,,Breakfast,3.9,""
|
44
|
+
273,"Jun 29, 2012 3:46:29 PM",HbA1c,,,14.5,""
|
data/lib/insulin/day.rb
CHANGED
data/lib/insulin/event.rb
CHANGED
@@ -11,7 +11,9 @@ module Insulin
|
|
11
11
|
"glucose" => "mmol/L",
|
12
12
|
"medication" => "x10^-5 L",
|
13
13
|
"weight" => "kg",
|
14
|
-
"exercise" => "minutes"
|
14
|
+
"exercise" => "minutes",
|
15
|
+
"blood pressure" => "sp/df",
|
16
|
+
"hba1c" => "%"
|
15
17
|
}
|
16
18
|
|
17
19
|
# An event before this time is considered part of the previous day. Because
|
@@ -59,8 +61,12 @@ module Insulin
|
|
59
61
|
end
|
60
62
|
|
61
63
|
def simple
|
62
|
-
|
63
|
-
|
64
|
+
value_format = "%6.1f"
|
65
|
+
if self["value"].is_a? String
|
66
|
+
value_format = "%6s"
|
67
|
+
end
|
68
|
+
s = "%s | %-15s | %-14s | %-13s | #{value_format} %s" % [
|
69
|
+
self["short_time"],
|
64
70
|
self["tag"],
|
65
71
|
self["type"],
|
66
72
|
self["subtype"],
|
data/lib/insulin/n_day_period.rb
CHANGED
@@ -15,7 +15,9 @@ module Insulin
|
|
15
15
|
d = (t + (i * 86400))
|
16
16
|
if d <= today
|
17
17
|
day = Day.new d.strftime("%F"), @mongo
|
18
|
-
|
18
|
+
if day.has_events?
|
19
|
+
self << day
|
20
|
+
end
|
19
21
|
@count += 1
|
20
22
|
end
|
21
23
|
end
|
@@ -24,12 +26,14 @@ module Insulin
|
|
24
26
|
@count
|
25
27
|
]
|
26
28
|
|
29
|
+
@hba1c = @mongo.db.collection("hba1c").find.sort(:timestamp).to_a[-1]
|
27
30
|
end
|
28
31
|
|
29
32
|
def average_glucose
|
30
33
|
total = 0
|
31
34
|
self.each do |d|
|
32
35
|
total += d.average_glucose
|
36
|
+
puts d.keys
|
33
37
|
end
|
34
38
|
|
35
39
|
return total / self.size
|
@@ -54,7 +58,15 @@ module Insulin
|
|
54
58
|
@start_date,
|
55
59
|
self.average_glucose,
|
56
60
|
self[0].glucose_units
|
57
|
-
]
|
61
|
+
]
|
62
|
+
|
63
|
+
s << "\n"
|
64
|
+
s << " "
|
65
|
+
s << "latest hba1c (from %s): %0.1f%s" % [
|
66
|
+
@hba1c["date"],
|
67
|
+
@hba1c["value"],
|
68
|
+
@hba1c["units"]
|
69
|
+
]
|
58
70
|
|
59
71
|
s
|
60
72
|
end
|
@@ -22,7 +22,11 @@ module Insulin
|
|
22
22
|
self["type"] = bits[3].downcase
|
23
23
|
self["subtype"] = bits[4].downcase if not bits[4] == ""
|
24
24
|
self["tag"] = bits[5].downcase
|
25
|
-
self["
|
25
|
+
if self["type"] == "blood pressure"
|
26
|
+
self["value"] = bits[6]
|
27
|
+
else
|
28
|
+
self["value"] = bits[6].to_f
|
29
|
+
end
|
26
30
|
|
27
31
|
# Notes get complicated. Everything from field 7 to the end will be part
|
28
32
|
# of the notes
|
data/lib/insulin/version.rb
CHANGED
data/spec/day_spec.rb
CHANGED
@@ -29,7 +29,9 @@ describe Insulin::Day do
|
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should display correctly" do
|
32
|
-
d.to_s.should include "19:07
|
32
|
+
d.to_s.should include "19:07 | dinner | medication | humalog | 6.0 x10^-5 L"
|
33
|
+
d.to_s.should include "15:46 | after lunch | blood pressure | | 118/75 sp/df"
|
34
|
+
d.to_s.should include "15:46 | | hba1c | | 8.8 %"
|
33
35
|
end
|
34
36
|
|
35
37
|
it "minimal display should be correct" do
|
data/spec/event_spec.rb
CHANGED
@@ -64,5 +64,11 @@ N:other note"}
|
|
64
64
|
mongo_event["time"].should == "10:21:05 BST"
|
65
65
|
end
|
66
66
|
|
67
|
+
bp_event = Insulin::Event.new Insulin::OnTrack::CsvLine.new %q{440,"Jun 30, 2012 3:46:15 PM",Blood Pressure,,After Lunch,118/75,""}
|
68
|
+
|
69
|
+
it "should have the correct value" do
|
70
|
+
bp_event["value"].should == "118/75"
|
71
|
+
end
|
72
|
+
|
67
73
|
mongo.drop_db
|
68
74
|
end
|
data/spec/month_spec.rb
CHANGED
data/spec/n_day_period_spec.rb
CHANGED
@@ -6,12 +6,12 @@ describe Insulin::NDayPeriod do
|
|
6
6
|
|
7
7
|
b = Insulin::NDayPeriod.new({
|
8
8
|
"start_date" => "2012-06-29",
|
9
|
-
"days" =>
|
9
|
+
"days" => 7,
|
10
10
|
"mongo" => @mongo
|
11
11
|
})
|
12
12
|
|
13
|
-
it "should contain
|
14
|
-
b.size.should ==
|
13
|
+
it "should contain 4 items" do
|
14
|
+
b.size.should == 4
|
15
15
|
end
|
16
16
|
|
17
17
|
it "items should be days" do
|
@@ -20,19 +20,19 @@ describe Insulin::NDayPeriod do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
it "should have average glucose of
|
24
|
-
("%0.2f" % b.average_glucose).to_f.should ==
|
23
|
+
it "should have average glucose of 6.87" do
|
24
|
+
("%0.2f" % b.average_glucose).to_f.should == 6.87
|
25
25
|
end
|
26
26
|
|
27
|
-
c = Insulin::NDayPeriod.new(
|
28
|
-
"start_date" => Time.new.strftime("%F"),
|
29
|
-
"days" => 7,
|
30
|
-
"mongo" => @mongo
|
31
|
-
)
|
32
|
-
|
33
|
-
it "should not go storming off into the future" do
|
34
|
-
c.size.should == 1
|
35
|
-
end
|
27
|
+
# c = Insulin::NDayPeriod.new(
|
28
|
+
# "start_date" => Time.new.strftime("%F"),
|
29
|
+
# "days" => 7,
|
30
|
+
# "mongo" => @mongo
|
31
|
+
# )
|
32
|
+
#
|
33
|
+
# it "should not go storming off into the future" do
|
34
|
+
# c.size.should == 1
|
35
|
+
# end
|
36
36
|
|
37
37
|
t = Time.new
|
38
38
|
t = t + 86400
|
data/spec/on_track/date_spec.rb
CHANGED
@@ -19,6 +19,10 @@ describe Insulin::OnTrack::Date do
|
|
19
19
|
otd["day"].should == "friday"
|
20
20
|
end
|
21
21
|
|
22
|
+
it "should have the correct short time" do
|
23
|
+
otd["short_time"].should == "09:00"
|
24
|
+
end
|
25
|
+
|
22
26
|
otd_gmt = Insulin::OnTrack::Date.new "Jan 22 2012 9:00:12 PM"
|
23
27
|
|
24
28
|
it "should have the correct timestamp" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: insulin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-07-
|
12
|
+
date: 2012-07-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|