means 1.2.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (7) hide show
  1. data/Gemfile +7 -1
  2. data/Gemfile.lock +22 -4
  3. data/VERSION +1 -1
  4. data/lib/means.rb +30 -12
  5. data/means.gemspec +12 -6
  6. data/spec/means_spec.rb +13 -34
  7. metadata +72 -15
data/Gemfile CHANGED
@@ -10,5 +10,11 @@ group :development do
10
10
  gem "yard", "~> 0.7.4"
11
11
  gem "bundler", "~> 1.0.0"
12
12
  gem "jeweler", "~> 1.6.4"
13
- gem "rcov", ">= 0"
13
+ gem "simplecov"
14
14
  end
15
+
16
+ group :development, :test do
17
+ gem 'debugger'
18
+ end
19
+
20
+ gem 'activesupport'
data/Gemfile.lock CHANGED
@@ -1,30 +1,48 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ activesupport (3.2.8)
5
+ i18n (~> 0.6)
6
+ multi_json (~> 1.0)
7
+ columnize (0.3.6)
8
+ debugger (1.1.3)
9
+ columnize (>= 0.3.1)
10
+ debugger-linecache (~> 1.1.1)
11
+ debugger-ruby_core_source (~> 1.1.2)
12
+ debugger-linecache (1.1.1)
13
+ debugger-ruby_core_source (>= 1.1.1)
14
+ debugger-ruby_core_source (1.1.2)
4
15
  diff-lcs (1.1.3)
5
16
  git (1.2.5)
17
+ i18n (0.6.1)
6
18
  jeweler (1.6.4)
7
19
  bundler (~> 1.0)
8
20
  git (>= 1.2.5)
9
21
  rake
22
+ multi_json (1.3.2)
10
23
  rake (0.9.2.2)
11
- rcov (0.9.11)
12
24
  rspec (2.9.0)
13
25
  rspec-core (~> 2.9.0)
14
26
  rspec-expectations (~> 2.9.0)
15
27
  rspec-mocks (~> 2.9.0)
16
28
  rspec-core (2.9.0)
17
- rspec-expectations (2.9.0)
29
+ rspec-expectations (2.9.1)
18
30
  diff-lcs (~> 1.1.3)
19
31
  rspec-mocks (2.9.0)
20
- yard (0.7.4)
32
+ simplecov (0.6.1)
33
+ multi_json (~> 1.0)
34
+ simplecov-html (~> 0.5.3)
35
+ simplecov-html (0.5.3)
36
+ yard (0.7.5)
21
37
 
22
38
  PLATFORMS
23
39
  ruby
24
40
 
25
41
  DEPENDENCIES
42
+ activesupport
26
43
  bundler (~> 1.0.0)
44
+ debugger
27
45
  jeweler (~> 1.6.4)
28
- rcov
29
46
  rspec (~> 2.9.0)
47
+ simplecov
30
48
  yard (~> 0.7.4)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.2
1
+ 1.2.3
data/lib/means.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'mathn'
2
+ require 'active_support/all'
2
3
 
3
4
  # Allows calculation of arithmetic, geometric and harmonic means.
4
5
  # Class methods allow the passing in of a data set.
@@ -38,15 +39,8 @@ class Mean
38
39
  # @raise if `:sum_of_reciprocals` is negative
39
40
  # @raise if `:product` is negative
40
41
  def initialize(params={})
41
- raise_error_for_negative params, :count
42
- raise_error_for_negative params, :sum_of_reciprocals
43
- raise_error_for_negative params, :product
44
-
45
- @sum ||= params[:sum] ||= 0
46
- @sum_of_reciprocals ||= params[:sum_of_reciprocals] ||= 0
47
- @product ||= params[:product] ||= 1
48
- @count ||= params[:count] ||= 0
49
- @includes_zero_or_negative = false
42
+ check_params params
43
+ assign_defaults params
50
44
  end
51
45
 
52
46
  # Add element to the data set
@@ -81,13 +75,37 @@ class Mean
81
75
  @count / @sum_of_reciprocals unless @count.zero? or @includes_zero_or_negative
82
76
  end
83
77
 
84
- private
78
+ private
85
79
 
86
- def Mean.includes_zero_or_negative? data
80
+ def check_params params
81
+ params.assert_valid_keys :count, :sum_of_reciprocals, :product, :sum
82
+ raise_error_for_negative params, :count
83
+ raise_error_for_negative params, :sum_of_reciprocals
84
+ raise_error_for_negative params, :product
85
+ end
86
+
87
+ def assign_defaults params
88
+ defaults = {
89
+ sum: 0,
90
+ sum_of_reciprocals: 0,
91
+ product: 1,
92
+ count: 0
93
+ }
94
+
95
+ options = params.reverse_merge defaults
96
+
97
+ @sum = options[:sum]
98
+ @sum_of_reciprocals = options[:sum_of_reciprocals]
99
+ @product = options[:product]
100
+ @count = options[:count]
101
+ @includes_zero_or_negative = false
102
+ end
103
+
104
+ def self.includes_zero_or_negative? data
87
105
  data.any? {|element| zero_or_negative? element}
88
106
  end
89
107
 
90
- def Mean.zero_or_negative? element
108
+ def self.zero_or_negative? element
91
109
  element <= 0
92
110
  end
93
111
 
data/means.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "means"
8
- s.version = "1.2.2"
8
+ s.version = "1.2.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Nigel Lowry"]
12
- s.date = "2012-04-12"
12
+ s.date = "2012-11-05"
13
13
  s.description = "Calculates the different means for a data set (arithmetic, geometric and harmonic)."
14
14
  s.email = "nigel-lowry@ultra.eclipse.co.uk"
15
15
  s.extra_rdoc_files = [
@@ -34,31 +34,37 @@ Gem::Specification.new do |s|
34
34
  s.homepage = "http://github.com/nigel-lowry/means"
35
35
  s.licenses = ["MIT"]
36
36
  s.require_paths = ["lib"]
37
- s.rubygems_version = "1.8.17"
37
+ s.rubygems_version = "1.8.24"
38
38
  s.summary = "Small gem to work out the arithmetic, harmonic and geometric means of a data set"
39
39
 
40
40
  if s.respond_to? :specification_version then
41
41
  s.specification_version = 3
42
42
 
43
43
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
44
+ s.add_runtime_dependency(%q<activesupport>, [">= 0"])
44
45
  s.add_development_dependency(%q<rspec>, ["~> 2.9.0"])
45
46
  s.add_development_dependency(%q<yard>, ["~> 0.7.4"])
46
47
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
47
48
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
48
- s.add_development_dependency(%q<rcov>, [">= 0"])
49
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
50
+ s.add_development_dependency(%q<debugger>, [">= 0"])
49
51
  else
52
+ s.add_dependency(%q<activesupport>, [">= 0"])
50
53
  s.add_dependency(%q<rspec>, ["~> 2.9.0"])
51
54
  s.add_dependency(%q<yard>, ["~> 0.7.4"])
52
55
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
53
56
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
54
- s.add_dependency(%q<rcov>, [">= 0"])
57
+ s.add_dependency(%q<simplecov>, [">= 0"])
58
+ s.add_dependency(%q<debugger>, [">= 0"])
55
59
  end
56
60
  else
61
+ s.add_dependency(%q<activesupport>, [">= 0"])
57
62
  s.add_dependency(%q<rspec>, ["~> 2.9.0"])
58
63
  s.add_dependency(%q<yard>, ["~> 0.7.4"])
59
64
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
60
65
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
61
- s.add_dependency(%q<rcov>, [">= 0"])
66
+ s.add_dependency(%q<simplecov>, [">= 0"])
67
+ s.add_dependency(%q<debugger>, [">= 0"])
62
68
  end
63
69
  end
64
70
 
data/spec/means_spec.rb CHANGED
@@ -37,40 +37,15 @@ describe "Mean" do
37
37
  describe ".arithmetic" do
38
38
  it_behaves_like "all means"
39
39
 
40
- it "is 1.5 for [1, 2]" do
41
- data = [1.0, 2.0]
42
- Mean.arithmetic(data).should be_within(0.01).of(1.5)
43
- end
44
-
45
- it "works with integers" do
46
- data = [1, 2]
47
- Mean.arithmetic(data).should be_within(0.01).of(1.5)
48
- end
49
-
50
- it "works with an int then a float" do
51
- data = [1, 2.0]
52
- Mean.arithmetic(data).should be_within(0.01).of(1.5)
53
- end
54
-
55
- it "works with a float then an int" do
56
- data = [1.0, 2]
57
- Mean.arithmetic(data).should be_within(0.01).of(1.5)
58
- end
59
-
60
- it "works with three numbers" do
61
- data = [1, 2, 3]
62
- Mean.arithmetic(data).should == 2
63
- end
64
-
65
- it "works with zero" do
66
- data = [0, 2]
67
- Mean.arithmetic(data).should == 1
68
- end
69
-
70
- it "works with negative numbers" do
71
- data = [-1, 3]
72
- Mean.arithmetic(data).should == 1
73
- end
40
+ specify { Mean.arithmetic([1.0, 2.0]).should be_within(0.01).of(1.5) }
41
+ specify { Mean.arithmetic([1, 2]).should be_within(0.01).of(1.5) }
42
+ specify { Mean.arithmetic([1, 2.0]).should be_within(0.01).of(1.5) }
43
+ specify { Mean.arithmetic([1.0, 2]).should be_within(0.01).of(1.5) }
44
+
45
+ specify { Mean.arithmetic([1, 2, 3]).should == 2 }
46
+
47
+ specify { Mean.arithmetic([0, 2]).should == 1 }
48
+ specify { Mean.arithmetic([-1, 3]).should == 1 }
74
49
  end
75
50
 
76
51
  describe ".geometric" do
@@ -194,6 +169,10 @@ describe "Mean" do
194
169
  m.harmonic_mean.should == 4.0 / 3.0
195
170
  end
196
171
 
172
+ it "rejects an unknown key" do
173
+ lambda { Mean.new(count: 1, blah: 1) }.should raise_error
174
+ end
175
+
197
176
  it "rejects a negative count" do
198
177
  lambda { Mean.new(count: -1) }.should raise_error
199
178
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: means
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.2.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,27 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-12 00:00:00.000000000 Z
12
+ date: 2012-11-05 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
14
30
  - !ruby/object:Gem::Dependency
15
31
  name: rspec
16
- requirement: &70094703023460 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
17
33
  none: false
18
34
  requirements:
19
35
  - - ~>
@@ -21,10 +37,15 @@ dependencies:
21
37
  version: 2.9.0
22
38
  type: :development
23
39
  prerelease: false
24
- version_requirements: *70094703023460
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 2.9.0
25
46
  - !ruby/object:Gem::Dependency
26
47
  name: yard
27
- requirement: &70094703021720 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
28
49
  none: false
29
50
  requirements:
30
51
  - - ~>
@@ -32,10 +53,15 @@ dependencies:
32
53
  version: 0.7.4
33
54
  type: :development
34
55
  prerelease: false
35
- version_requirements: *70094703021720
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.7.4
36
62
  - !ruby/object:Gem::Dependency
37
63
  name: bundler
38
- requirement: &70094703018560 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
39
65
  none: false
40
66
  requirements:
41
67
  - - ~>
@@ -43,10 +69,15 @@ dependencies:
43
69
  version: 1.0.0
44
70
  type: :development
45
71
  prerelease: false
46
- version_requirements: *70094703018560
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.0.0
47
78
  - !ruby/object:Gem::Dependency
48
79
  name: jeweler
49
- requirement: &70094703080460 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
50
81
  none: false
51
82
  requirements:
52
83
  - - ~>
@@ -54,10 +85,15 @@ dependencies:
54
85
  version: 1.6.4
55
86
  type: :development
56
87
  prerelease: false
57
- version_requirements: *70094703080460
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 1.6.4
58
94
  - !ruby/object:Gem::Dependency
59
- name: rcov
60
- requirement: &70094703079740 !ruby/object:Gem::Requirement
95
+ name: simplecov
96
+ requirement: !ruby/object:Gem::Requirement
61
97
  none: false
62
98
  requirements:
63
99
  - - ! '>='
@@ -65,7 +101,28 @@ dependencies:
65
101
  version: '0'
66
102
  type: :development
67
103
  prerelease: false
68
- version_requirements: *70094703079740
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: debugger
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
69
126
  description: Calculates the different means for a data set (arithmetic, geometric
70
127
  and harmonic).
71
128
  email: nigel-lowry@ultra.eclipse.co.uk
@@ -103,7 +160,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
160
  version: '0'
104
161
  segments:
105
162
  - 0
106
- hash: 4072449701822511061
163
+ hash: 2287703100562753165
107
164
  required_rubygems_version: !ruby/object:Gem::Requirement
108
165
  none: false
109
166
  requirements:
@@ -112,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
169
  version: '0'
113
170
  requirements: []
114
171
  rubyforge_project:
115
- rubygems_version: 1.8.17
172
+ rubygems_version: 1.8.24
116
173
  signing_key:
117
174
  specification_version: 3
118
175
  summary: Small gem to work out the arithmetic, harmonic and geometric means of a data