bmi 0.1.2

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/.gemtest ADDED
File without changes
data/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ === 0.0.1 2011-11-10
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
data/Manifest.txt ADDED
@@ -0,0 +1,14 @@
1
+ History.txt
2
+ Manifest.txt
3
+ PostInstall.txt
4
+ README.rdoc
5
+ Rakefile
6
+ bin/bmi
7
+ lib/bmi.rb
8
+ lib/bmi/cli.rb
9
+ script/console
10
+ script/destroy
11
+ script/generate
12
+ test/test_bmi.rb
13
+ test/test_bmi_cli.rb
14
+ test/test_helper.rb
data/PostInstall.txt ADDED
@@ -0,0 +1,7 @@
1
+
2
+ For more information on bmi, see http://bmi.rubyforge.org
3
+
4
+ NOTE: Change this information in PostInstall.txt
5
+ You can also delete it if you don't want it.
6
+
7
+
data/README.rdoc ADDED
@@ -0,0 +1,106 @@
1
+ = BMI
2
+
3
+ * http://github.com/#{githug.com/narcisoguillen}/#{BMI}
4
+
5
+ == DESCRIPTION:
6
+
7
+ The Body Mass Index (BMI) Gem is usefull to calculate your BMI from console, and add this gem to your ruby project and use it. See 'bmi -h' to read the instructions of usage.
8
+
9
+ == FEATURES/PROBLEMS:
10
+
11
+ Write in your comand line 'bmi -w (YourWeight) -b (Your height)' to calculate your BMI, see 'bmi -h' for more features.
12
+
13
+ == SYNOPSIS:
14
+
15
+ Body Mass Index
16
+
17
+ Imperial BMI Formula
18
+
19
+ Bash
20
+
21
+ $bmi -W 189.597 -B 69.6850
22
+
23
+ Your body mass index is: 27
24
+ You are 9% over your ideal weight
25
+ Overweight
26
+
27
+ Rails
28
+
29
+ require 'bmi'
30
+ bmi = BMI.new
31
+ data = []
32
+ data[0]='-W 189.597'
33
+ data[1]='-B 69.6850'
34
+ bmi.calc(data)
35
+
36
+ Your body mass index is: 27
37
+ You are 9% over your ideal weight
38
+ Overweight
39
+
40
+
41
+ Metric Imperial BMI Formula
42
+
43
+ Bash
44
+
45
+ $bmi -w 86 -b 1.77
46
+
47
+ Your body mass index is: 27
48
+ You are 9% over your ideal weight
49
+ Overweight
50
+
51
+ Rails
52
+
53
+ require 'bmi'
54
+ bmi = BMI.new
55
+ data = []
56
+ data[0]='-w 86'
57
+ data[1]='-b 1.77'
58
+ bmi.calc(data)
59
+
60
+ Your body mass index is: 27
61
+ You are 9% over your ideal weight
62
+ Overweight
63
+
64
+ == REQUIREMENTS:
65
+
66
+ Requires ~> ruby-1.9.2-p290
67
+
68
+ To build this Gem were installed the following gems:
69
+
70
+ gem install newgem
71
+ gem install hoe
72
+ gem install rake
73
+ gem install rubyforge
74
+
75
+ == INSTALL:
76
+
77
+ To install this Gem you only need to run:
78
+
79
+ Gem install bmi
80
+
81
+ The Gem is uploaded to http://rubygems.org/
82
+
83
+ == LICENSE:
84
+
85
+ (The MIT License)
86
+
87
+ Copyright (c) 2011 Body Mass Index (BMI)
88
+
89
+ Permission is hereby granted, free of charge, to any person obtaining
90
+ a copy of this software and associated documentation files (the
91
+ 'Software'), to deal in the Software without restriction, including
92
+ without limitation the rights to use, copy, modify, merge, publish,
93
+ distribute, sublicense, and/or sell copies of the Software, and to
94
+ permit persons to whom the Software is furnished to do so, subject to
95
+ the following conditions:
96
+
97
+ The above copyright notice and this permission notice shall be
98
+ included in all copies or substantial portions of the Software.
99
+
100
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
101
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
102
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
103
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
104
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
105
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
106
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,29 @@
1
+ require 'rubygems'
2
+ gem 'hoe', '>= 2.1.0'
3
+ #gem 'rake'
4
+ #gem 'rdoc'
5
+ #gem 'rubyforge'
6
+ require 'hoe'
7
+ require 'fileutils'
8
+ require './lib/bmi'
9
+
10
+ Hoe.plugin :newgem
11
+ # Hoe.plugin :website
12
+ # Hoe.plugin :cucumberfeatures
13
+
14
+ # Generate all the Rake tasks
15
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
16
+ $hoe = Hoe.spec 'bmi' do
17
+ self.developer 'Narciso Guillen de la Mora', 'narciso.guillen@tangosorce.com'
18
+ self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
19
+ self.rubyforge_name = self.name # TODO this is default value
20
+ # self.extra_deps = [['activesupport','>= 2.0.2']]
21
+
22
+ end
23
+
24
+ require 'newgem/tasks'
25
+ Dir['tasks/**/*.rake'].each { |t| load t }
26
+
27
+ # TODO - want other tests/tasks run by default? Add them to the list
28
+ # remove_task :default
29
+ # task :default => [:spec, :features]
data/bin/bmi ADDED
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # = Created on 2011-11-10.
4
+ # Copyright (c) 2011. All rights reserved.
5
+
6
+ require 'rubygems'
7
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/bmi")
8
+ require "bmi/cli"
9
+
10
+ data = Bmi::CLI.calc(ARGV)
11
+
12
+ data.select!{ |k, v| v.to_f > 0 }
13
+
14
+ imperial = false
15
+ imperial = true if data[:weight_p] && data[:height_i]
16
+
17
+ metric = false
18
+ metric = true if data[:weight_k] && data[:height_m]
19
+
20
+ weight = data[:weight_k] || data[:weight_p]
21
+ height = data[:height_m] || data[:height_i]
22
+
23
+ weight = weight.to_f
24
+ height = height.to_f
25
+
26
+ if imperial
27
+ bmi =( ( weight ) / ( height * height ) ) * 703
28
+ end
29
+
30
+ if metric
31
+ bmi =( weight ) / ( height * height )
32
+ end
33
+
34
+ if bmi
35
+ prime = ( bmi / 25 )
36
+ puts "Your body mass index is: #{bmi.round}"
37
+ prti = prime.to_s.match(/\d+/)
38
+ ceros = prime.to_s.match(/\.(0+)/)
39
+
40
+
41
+ if !ceros
42
+ ceros = []
43
+ ceros[1] = "0"
44
+ end
45
+
46
+
47
+ prcnt = prime.to_s.match(/\.(\d{1,2})/)
48
+ if prti[0].to_i <= 0
49
+ puts "You are #{(100)*(ceros[1].length) - (prcnt[1].to_i)}% under your ideal weight"
50
+ else
51
+ puts "You are #{prcnt[1].to_i + (100*(prti[0].to_i-1)) }% over your ideal weight"
52
+ end
53
+
54
+ case
55
+ when bmi < 18.5
56
+ puts "Underweight"
57
+ when bmi.between?(18.5,25)
58
+ puts "Normal"
59
+ when bmi.between?(25,30)
60
+ puts "Overweight"
61
+ when bmi.between?(30,35)
62
+ puts "Obese Class I"
63
+ when bmi.between?(35,40)
64
+ puts "Obese Class II"
65
+ when bmi > 40
66
+ puts "Obese Class III"
67
+ end
68
+
69
+ end
70
+
data/lib/bmi/cli.rb ADDED
@@ -0,0 +1,59 @@
1
+ require 'optparse'
2
+
3
+ module Bmi
4
+ class CLI
5
+ def self.calc(arguments=[])
6
+
7
+ options = {
8
+ :weight_k => 0,
9
+ :height_m => 0,
10
+ :weight_p => 0,
11
+ :height_i => 0
12
+ }
13
+ mandatory_options = %w( )
14
+
15
+ parser = OptionParser.new do |opts|
16
+ opts.banner = <<-BANNER.gsub(/^ /,'')
17
+ Body Mass Index [BMI] help guide
18
+
19
+ Usage: #{File.basename($0)} [options]
20
+
21
+ Options are:
22
+ BANNER
23
+ opts.separator ""
24
+
25
+ opts.on("-w", "--weight KILOGRAMS", String,
26
+ "Your current weight.",
27
+ "Pleace introduce your weight in kilograms.",
28
+ "Default: ~") { |arg| options[:weight_k] = arg }
29
+
30
+
31
+ opts.on("-b", "--height METERS", String,
32
+ "How hight you are.",
33
+ "Pleace introduce your height in meters.",
34
+ "Default: ~") { |arg| options[:height_m] = arg }
35
+
36
+ opts.on("-W", "--Weight POUNDS", String,
37
+ "Your current weight.",
38
+ "Pleace introduce your weight in pounds.",
39
+ "Default: ~") { |arg| options[:weight_p] = arg }
40
+
41
+ opts.on("-B", "--Height INCHES", String,
42
+ "How hight you are.",
43
+ "Pleace introduce your height in inches.",
44
+ "Default: ~") { |arg| options[:height_i] = arg }
45
+
46
+ opts.on("-h", "--help",
47
+ "Show this help message.") { puts opts; exit }
48
+
49
+ opts.parse!(arguments)
50
+
51
+ if mandatory_options && mandatory_options.find { |option| options[option.to_sym].nil? }
52
+ puts opts; exit
53
+ end
54
+ end
55
+
56
+ return options
57
+ end
58
+ end
59
+ end
data/lib/bmi.rb ADDED
@@ -0,0 +1,157 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'rubygems'
5
+ require 'optparse'
6
+
7
+ class BMI
8
+
9
+ attr_accessor :data, :metric, :imperial, :bmi, :metric, :percent
10
+
11
+ def initialize(data={})
12
+ @data = data
13
+ @data = {
14
+ :weight_k => 0,
15
+ :height_m => 0,
16
+ :weight_p => 0,
17
+ :height_i => 0
18
+ }
19
+ @imperial = false
20
+ @metric = false
21
+ @weight = 0
22
+ @height = 0
23
+ @bmi = 0
24
+ @prime = 0
25
+ @percent = 0
26
+ end
27
+
28
+ def loadata(arguments=[])
29
+ mandatory_options = %w( )
30
+
31
+ parser = OptionParser.new do |opts|
32
+ opts.banner = <<-BANNER.gsub(/^ /,'')
33
+ Body Mass Index [BMI] help guide
34
+
35
+ Usage: #{File.basename($0)} [options]
36
+
37
+ Options are:
38
+ BANNER
39
+ opts.separator ""
40
+
41
+ opts.on("-w", "--weight KILOGRAMS", String,
42
+ "Your current weight.",
43
+ "Pleace introduce your weight in kilograms.",
44
+ "Default: ~") { |arg| @data[:weight_k] = arg }
45
+
46
+
47
+ opts.on("-b", "--height METERS", String,
48
+ "How hight you are.",
49
+ "Pleace introduce your height in meters.",
50
+ "Default: ~") { |arg| @data[:height_m] = arg }
51
+
52
+ opts.on("-W", "--Weight POUNDS", String,
53
+ "Your current weight.",
54
+ "Pleace introduce your weight in pounds.",
55
+ "Default: ~") { |arg| @data[:weight_p] = arg }
56
+
57
+ opts.on("-B", "--Height INCHES", String,
58
+ "How hight you are.",
59
+ "Pleace introduce your height in inches.",
60
+ "Default: ~") { |arg| @data[:height_i] = arg }
61
+
62
+ opts.on("-h", "--help",
63
+ "Show this help message.") { puts opts}
64
+
65
+ opts.parse!(arguments)
66
+
67
+ if mandatory_options && mandatory_options.find { |option| options[option.to_sym].nil? }
68
+ puts opts
69
+ end
70
+
71
+ end
72
+ end
73
+
74
+ def determinates
75
+ @data.select!{|k,v| v.to_f > 0}
76
+ @imperial = true if @data[:weight_p] && @data[:height_i]
77
+ @metric = true if @data[:weight_k] && @data[:height_m]
78
+ @weight = @data[:weight_k] || @data[:weight_p]
79
+ @height = @data[:height_m] || @data[:height_i]
80
+ @weight = @weight.to_f
81
+ @height = @height.to_f
82
+ end
83
+
84
+ def get_imperial
85
+ @bmi =( ( @weight ) / ( @height * @height ) ) * 703
86
+ end
87
+
88
+ def get_metric
89
+ @bmi =( @weight ) / ( @height * @height )
90
+ end
91
+
92
+ def get_prime
93
+
94
+ @prime = ( @bmi / 25 )
95
+ puts "Your body mass index is: #{@bmi.round}"
96
+ prti = @prime.to_s.match(/\d+/)
97
+ ceros = @prime.to_s.match(/\.(0+)/)
98
+
99
+
100
+ if !ceros
101
+ ceros = []
102
+ ceros[1] = "0"
103
+ end
104
+
105
+
106
+ prcnt = @prime.to_s.match(/\.(\d{1,2})/)
107
+ if prti[0].to_i <= 0
108
+ @percent = (100)*(ceros[1].length) - (prcnt[1].to_i)
109
+ puts "You are #{@percent}% under your ideal weight"
110
+ else
111
+ @percent = prcnt[1].to_i + (100*(prti[0].to_i-1))
112
+ puts "You are #{@percent}% over your ideal weight"
113
+ end
114
+ return @percent.to_s+"%"
115
+
116
+ end
117
+
118
+ def cases
119
+ case
120
+ when @bmi < 18.5
121
+ msj= "Underweight"
122
+ when @bmi.between?(18.5,25)
123
+ msj= "Normal"
124
+ when @bmi.between?(25,30)
125
+ msj= "Overweight"
126
+ when @bmi.between?(30,35)
127
+ msj= "Obese Class I"
128
+ when @bmi.between?(35,40)
129
+ msj= "Obese Class II"
130
+ when @bmi > 40
131
+ msj= "Obese Class III"
132
+ end
133
+ return msj
134
+ end
135
+
136
+ def calc(arguments=[])
137
+
138
+ loadata(arguments)
139
+ determinates()
140
+
141
+ if @imperial
142
+ get_imperial()
143
+ get_prime()
144
+ cases()
145
+ end
146
+
147
+ if @metric
148
+ get_metric()
149
+ get_prime()
150
+ cases()
151
+ end
152
+
153
+ end
154
+
155
+ VERSION = '0.1.2'
156
+ end
157
+
data/script/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/bmi.rb'}"
9
+ puts "Loading bmi gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
data/test/test_bmi.rb ADDED
@@ -0,0 +1,42 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+ require 'test/unit'
3
+ require 'bmi'
4
+ class TestBmi < Test::Unit::TestCase
5
+
6
+ #def setup
7
+ #end
8
+ @@bmi=BMI.new
9
+
10
+ def test_truth
11
+ assert true
12
+ end
13
+
14
+ def test_metric
15
+ @@bmi.calc(['-w 60','-b 1.70'])
16
+ assert_equal(true,@@bmi.metric)
17
+ end
18
+
19
+ def test_imperial
20
+ @@bmi.calc(['-W 189','-B 69.88'])
21
+ assert_equal(true,@@bmi.imperial)
22
+ end
23
+
24
+ def test_get_prime
25
+ @@bmi.calc(['-w 60','-b 1.70'])
26
+ assert_equal("17%",@@bmi.get_prime)
27
+ end
28
+
29
+ def test_categories_cases
30
+ cases={'Underweight' =>['-w 50','-b 1.70'],
31
+ 'Normal' =>['-w 60','-b 1.70'],
32
+ 'Overweight' =>['-w 75','-b 1.70'],
33
+ 'Obese Class I' =>['-w 90','-b 1.70'],
34
+ 'Obese Class II' =>['-w 105','-b 1.70'],
35
+ 'Obese Class III' =>['-w 120','-b 1.70']}
36
+
37
+ cases.each do |k,v|
38
+ @@bmi.calc(v)
39
+ assert_equal(k,@@bmi.cases)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,33 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+ require 'bmi/cli'
3
+
4
+ class TestBmiCli < Test::Unit::TestCase
5
+
6
+ def setup
7
+ Bmi::CLI.calc([])
8
+ end
9
+
10
+ def test_kilograms
11
+ data = Bmi::CLI.calc(['-w 80'])
12
+ kilograms = data[:weight_k].to_f
13
+ assert_equal(80, kilograms)
14
+ end
15
+
16
+ def test_meters
17
+ data = Bmi::CLI.calc(['-b 1.80'])
18
+ meters = data[:height_m].to_f
19
+ assert_equal(1.80, meters)
20
+ end
21
+
22
+ def test_pounds
23
+ data = Bmi::CLI.calc(['-W 166'])
24
+ pounds = data[:weight_p].to_f
25
+ assert_equal(166, pounds)
26
+ end
27
+
28
+ def test_inches
29
+ data = Bmi::CLI.calc(['-B 68.11'])
30
+ inches = data[:height_i].to_f
31
+ assert_equal(68.11, inches)
32
+ end
33
+ end
@@ -0,0 +1,3 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/bmi'
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bmi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Narciso Guillen de la Mora
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-16 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: hoe
16
+ requirement: &2160826460 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '2.12'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *2160826460
25
+ description: The Body Mass Index (BMI) Gem is usefull to calculate your BMI from console,
26
+ and add this gem to your ruby project and use it. See 'bmi -h' to read the instructions
27
+ of usage.
28
+ email:
29
+ - narciso.guillen@tangosorce.com
30
+ executables:
31
+ - bmi
32
+ extensions: []
33
+ extra_rdoc_files:
34
+ - History.txt
35
+ - Manifest.txt
36
+ - PostInstall.txt
37
+ files:
38
+ - History.txt
39
+ - Manifest.txt
40
+ - PostInstall.txt
41
+ - README.rdoc
42
+ - Rakefile
43
+ - bin/bmi
44
+ - lib/bmi.rb
45
+ - lib/bmi/cli.rb
46
+ - script/console
47
+ - script/destroy
48
+ - script/generate
49
+ - test/test_bmi.rb
50
+ - test/test_bmi_cli.rb
51
+ - test/test_helper.rb
52
+ - .gemtest
53
+ homepage: http://github.com/#{githug.com/narcisoguillen}/#{BMI}
54
+ licenses: []
55
+ post_install_message: PostInstall.txt
56
+ rdoc_options:
57
+ - --main
58
+ - README.rdoc
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project: bmi
75
+ rubygems_version: 1.8.10
76
+ signing_key:
77
+ specification_version: 3
78
+ summary: The Body Mass Index (BMI) Gem is usefull to calculate your BMI from console,
79
+ and add this gem to your ruby project and use it
80
+ test_files:
81
+ - test/test_bmi.rb
82
+ - test/test_bmi_cli.rb
83
+ - test/test_helper.rb