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.
- data/Gemfile +7 -1
- data/Gemfile.lock +22 -4
- data/VERSION +1 -1
- data/lib/means.rb +30 -12
- data/means.gemspec +12 -6
- data/spec/means_spec.rb +13 -34
- metadata +72 -15
data/Gemfile
CHANGED
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.
|
29
|
+
rspec-expectations (2.9.1)
|
18
30
|
diff-lcs (~> 1.1.3)
|
19
31
|
rspec-mocks (2.9.0)
|
20
|
-
|
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.
|
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
|
-
|
42
|
-
|
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
|
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
|
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.
|
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-
|
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.
|
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<
|
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<
|
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<
|
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
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
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.
|
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-
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
60
|
-
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:
|
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:
|
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.
|
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
|