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 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/*_tests.rb']
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
- load 'framingham/version.rb'
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
+
@@ -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
+
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.20130712221655
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 00:00:00.000000000 Z
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/heartdisease_tests.rb
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