means 1.2.2 → 1.2.3

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.
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