framingham 0.1.20130712221655 → 0.1.20130719170918
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.
- data/Rakefile +11 -1
- data/framingham.gemspec +1 -1
- data/framingham.rb +11 -2
- data/framingham/diabetes.rb +76 -0
- data/framingham/heartdisease.rb +4 -9
- data/framingham/tests/diabetes_tests.rb +16 -0
- data/framingham/{heartdisease_tests.rb → tests/heartdisease_tests.rb} +0 -0
- metadata +6 -3
data/Rakefile
CHANGED
@@ -9,7 +9,17 @@ task :deploy do
|
|
9
9
|
sh "gem push framingham.gem"
|
10
10
|
end
|
11
11
|
|
12
|
+
task :upgrade do
|
13
|
+
Rake::Task[:build].execute
|
14
|
+
Rake::Task[:test].execute
|
15
|
+
begin
|
16
|
+
sh "gem uninstall framingham && gem install ./framingham.gem"
|
17
|
+
rescue => exception
|
18
|
+
abort "\033[31merror: did you not sudo? \033[0m"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
12
22
|
Rake::TestTask.new { |_|
|
13
|
-
_.test_files = FileList['framingham
|
23
|
+
_.test_files = FileList['framingham/tests/*.rb']
|
14
24
|
_.verbose = true
|
15
25
|
}
|
data/framingham.gemspec
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new{ |_|
|
|
22
22
|
_.homepage = "https://github.com/3poundhealth/framingham#framingham"
|
23
23
|
_.summary = "Gem to implement Framingham Heart Study calculators"
|
24
24
|
_.license = "MIT"
|
25
|
-
_.files = `git ls-files`.split($/)
|
25
|
+
_.files = `git ls-files`.split($/).push("framingham/version.rb")
|
26
26
|
_.executables = _.files.grep(%r{^/}) { |f| File.basename(f) }
|
27
27
|
_.test_files = _.files.grep(%r{^(test|spec|features)/})
|
28
28
|
_.require_path = "."
|
data/framingham.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
|
-
|
3
|
-
load 'framingham/heartdisease.rb'
|
2
|
+
require './framingham/version'
|
4
3
|
|
5
4
|
module Framingham extend self
|
6
5
|
|
@@ -10,11 +9,21 @@ end
|
|
10
9
|
|
11
10
|
protected
|
12
11
|
|
12
|
+
$, = ", " #default join
|
13
|
+
|
14
|
+
GENDERS = [
|
15
|
+
:male,
|
16
|
+
:female
|
17
|
+
] unless defined? GENDERS
|
18
|
+
|
13
19
|
def to_i value
|
14
20
|
(value.eql? true or value.to_s == "true" or (
|
15
21
|
value.to_f != 0 if value.respond_to? 'to_f'
|
16
22
|
)) ? 1 : 0
|
17
23
|
end
|
18
24
|
|
25
|
+
load './framingham/heartdisease.rb'
|
26
|
+
load './framingham/diabetes.rb'
|
27
|
+
|
19
28
|
end
|
20
29
|
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module Framingham::Diabetes extend Framingham, self
|
2
|
+
include Framingham
|
3
|
+
|
4
|
+
def eval options = {}
|
5
|
+
begin
|
6
|
+
#initialize
|
7
|
+
options = NORMAL.merge options
|
8
|
+
@age = options[:age].to_f
|
9
|
+
@blood_pressure = options[:blood_pressure].to_f
|
10
|
+
@body_mass_index = options[:body_mass_index].to_f
|
11
|
+
@diabetes_relative = options[:diabetes_relative].to_s.to_sym
|
12
|
+
@fasting_glucose = options[:fasting_glucose].to_f
|
13
|
+
@gender = options[:gender].to_sym
|
14
|
+
@hdl = options[:hdl].to_f
|
15
|
+
@triglyceride = options[:triglyceride].to_f
|
16
|
+
#validate
|
17
|
+
raise ERRORS[:gender] unless GENDERS.include? @gender
|
18
|
+
rescue => exception
|
19
|
+
abort "\033[31merror: " + exception.message + "\033[0m"
|
20
|
+
else
|
21
|
+
#calculate
|
22
|
+
=begin debug stuff
|
23
|
+
puts options.to_s
|
24
|
+
puts "50-65: " + (50...65).include?(@age).to_s
|
25
|
+
puts "65+: " + (@age >= 65).to_s
|
26
|
+
puts "blood_pressure >130: " + (@blood_pressure > 130).to_s
|
27
|
+
puts "bmi 25-30: " + (25...30).include?(@body_mass_index).to_s
|
28
|
+
puts "bmi >=30: " + (@body_mass_index >= 30).to_s
|
29
|
+
puts "diabetes_relative: " + @diabetes_relative.eql?(:true).to_s
|
30
|
+
puts "fasting_glucose: " + (100..126).include?(@fasting_glucose).to_s
|
31
|
+
puts "gender: " + @gender.to_s
|
32
|
+
puts "hdl: " + (@gender.eql?(:female) and @hdl < 50 or @hdl < 40).to_s
|
33
|
+
puts "triglyceride >= 150: " + (@triglyceride >= 150).to_s
|
34
|
+
=end
|
35
|
+
risk_factor = BETA_ZERO[@gender]
|
36
|
+
risk_factor += 0.018 if (50...65).include? @age
|
37
|
+
risk_factor += 0.081 if @age >= 65
|
38
|
+
risk_factor -= 0.565 if @diabetes_relative.eql? :true
|
39
|
+
risk_factor -= 0.301 if (25...30).include? @body_mass_index
|
40
|
+
risk_factor -= 0.920 if @body_mass_index >= 30
|
41
|
+
risk_factor -= 0.498 if @blood_pressure > 130
|
42
|
+
risk_factor -= 0.944 if @gender.eql? :female and @hdl < 50 or @hdl < 40
|
43
|
+
risk_factor -= 0.575 if @triglyceride >= 150
|
44
|
+
risk_factor -= 1.980 if (100..126).include? @fasting_glucose
|
45
|
+
1 / (1 + Math.exp(risk_factor))
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def help
|
50
|
+
"Evaluate 8 year diabetes risk"
|
51
|
+
end
|
52
|
+
|
53
|
+
protected
|
54
|
+
|
55
|
+
NORMAL = { #default options
|
56
|
+
age: 30,
|
57
|
+
blood_pressure: 125,
|
58
|
+
body_mass_index: 22.5,
|
59
|
+
diabetes_relative: false,
|
60
|
+
fasting_glucose: 85,
|
61
|
+
gender: :female,
|
62
|
+
hdl: 60,
|
63
|
+
triglyceride: 130
|
64
|
+
} unless defined? NORMAL
|
65
|
+
|
66
|
+
ERRORS = {
|
67
|
+
gender: "invalid gender, options: " + GENDERS.join
|
68
|
+
} unless defined? ERRORS
|
69
|
+
|
70
|
+
BETA_ZERO = {
|
71
|
+
male: 5.517 + 0.010,
|
72
|
+
female: 5.517
|
73
|
+
}
|
74
|
+
|
75
|
+
end
|
76
|
+
|
data/framingham/heartdisease.rb
CHANGED
@@ -9,9 +9,11 @@ def eval options = {}
|
|
9
9
|
@blood_pressure = options[:blood_pressure].to_f
|
10
10
|
@blood_pressure_treatment = options[:blood_pressure_treatment] ? :treated : :untreated
|
11
11
|
@body_mass_index = options[:body_mass_index].to_f
|
12
|
-
@gender = options[:gender]
|
12
|
+
@gender = options[:gender].to_sym
|
13
13
|
@diabetes = to_i options[:diabetes]
|
14
14
|
@smoker = to_i options[:smoker]
|
15
|
+
#validate
|
16
|
+
raise ERRORS[:gender] unless GENDERS.include? @gender
|
15
17
|
rescue => exception
|
16
18
|
abort "\033[31merror: " + exception.message + "\033[0m"
|
17
19
|
else
|
@@ -79,8 +81,6 @@ def internal_debug _ = {}
|
|
79
81
|
'%5.1f' % ((1000 * _[:optimal]).round / 10.0)
|
80
82
|
end
|
81
83
|
|
82
|
-
$, = ", " #default join
|
83
|
-
|
84
84
|
NORMAL = { #default options
|
85
85
|
age: 30,
|
86
86
|
blood_pressure: 125,
|
@@ -102,16 +102,11 @@ BLOOD_PRESSURE_RANGE = (90..200) unless defined? BLOOD_PRESSURE_RANGE
|
|
102
102
|
|
103
103
|
BMI_RANGE = (15..50) unless defined? BMI_RANGE
|
104
104
|
|
105
|
-
GENDERS = [
|
106
|
-
:male,
|
107
|
-
:female
|
108
|
-
] unless defined? GENDERS
|
109
|
-
|
110
105
|
ERRORS = {
|
111
106
|
age: "age must be in range: " + AGE_RANGE.to_s,
|
112
107
|
blood_pressure: "blood pressure must be in range: " + BLOOD_PRESSURE_RANGE.to_s,
|
113
108
|
bmi: "bmi must be in range: " + BMI_RANGE.to_s,
|
114
|
-
gender: "invalid gender, options: " + GENDERS.join
|
109
|
+
gender: "invalid gender, options: " + GENDERS.join
|
115
110
|
} unless defined? ERRORS
|
116
111
|
|
117
112
|
BETA_ZERO = {
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require './framingham'
|
3
|
+
|
4
|
+
class DiabetesTests < Test::Unit::TestCase
|
5
|
+
include Framingham::Diabetes
|
6
|
+
|
7
|
+
def yellow _
|
8
|
+
"\e[1;7;41;33mFailed:\e[1;3;40m " + _ + " \e[0m"
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_normal
|
12
|
+
assert_equal 0.004001804744896386, eval, (yellow "Normal test")
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
File without changes
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: framingham
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.20130719170918
|
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: 2013-07-
|
12
|
+
date: 2013-07-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -57,8 +57,11 @@ files:
|
|
57
57
|
- bin/rake
|
58
58
|
- framingham.gemspec
|
59
59
|
- framingham.rb
|
60
|
+
- framingham/diabetes.rb
|
60
61
|
- framingham/heartdisease.rb
|
61
|
-
- framingham/
|
62
|
+
- framingham/tests/diabetes_tests.rb
|
63
|
+
- framingham/tests/heartdisease_tests.rb
|
64
|
+
- framingham/version.rb
|
62
65
|
homepage: https://github.com/3poundhealth/framingham#framingham
|
63
66
|
licenses:
|
64
67
|
- MIT
|