utilities 0.0.12 → 0.0.13
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/lib/utilities.rb +22 -1
- data/lib/version.rb +1 -1
- data/test/test_utilities.rb +24 -1
- metadata +22 -40
data/lib/utilities.rb
CHANGED
@@ -181,7 +181,7 @@ module Utilities
|
|
181
181
|
# If population is set to true, then we consider the dataset as the complete population
|
182
182
|
# Else, we consider the dataset as a sample, so we use the sample standard deviation (size - 1)
|
183
183
|
def standard_deviation( population = false )
|
184
|
-
|
184
|
+
size > 1 ? Math.sqrt( variance / ( size - ( population ? 0 : 1 ) ) ) : 0.0
|
185
185
|
end
|
186
186
|
alias_method :std_dev, :standard_deviation
|
187
187
|
|
@@ -337,3 +337,24 @@ class Array
|
|
337
337
|
end
|
338
338
|
alias_method :to_stats!, :to_stat!
|
339
339
|
end
|
340
|
+
|
341
|
+
|
342
|
+
module Enumerable
|
343
|
+
# Collects the first N truthy values
|
344
|
+
# {}.collect_first {|a, b| obj} => obj
|
345
|
+
# {}.collect_first(n) {|a, b| obj} => [obj]
|
346
|
+
def collect_first( amount = nil, &block )
|
347
|
+
array = !amount.nil?
|
348
|
+
amount ||= 1
|
349
|
+
|
350
|
+
values = []
|
351
|
+
self.each do |val|
|
352
|
+
break if values.length >= amount
|
353
|
+
t = yield(val)
|
354
|
+
values << t if t
|
355
|
+
end
|
356
|
+
|
357
|
+
!array && amount == 1 ? values.first : values
|
358
|
+
end
|
359
|
+
alias_method :map_first, :collect_first
|
360
|
+
end
|
data/lib/version.rb
CHANGED
data/test/test_utilities.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "lib", "utilities")
|
2
2
|
|
3
3
|
describe Range do
|
4
4
|
it "#intersection should returns a range containing elements common to the two ranges, with no duplicates" do
|
@@ -61,3 +61,26 @@ describe Numeric do
|
|
61
61
|
100.percentage_of(50).should == 200
|
62
62
|
end
|
63
63
|
end
|
64
|
+
|
65
|
+
describe Hash do
|
66
|
+
it "#collect_keys should returns a new hash with the results of running block once for every key in self" do
|
67
|
+
{"a"=>1, "b"=>2, "c"=>3}.collect_keys{|k| k + "z"}.should == {"az"=>1, "bz"=>2, "cz"=>3}
|
68
|
+
end
|
69
|
+
|
70
|
+
it "#collect_values should returns a new hash with the results of running block once for every value in self" do
|
71
|
+
{"a"=>1, "b"=>2, "c"=>3}.collect_values{|v| v**2}.should == {"a"=>1, "b"=>4, "c"=>9}
|
72
|
+
end
|
73
|
+
|
74
|
+
it "#symbolize_keys should returns a new hash where all keys have been symbolized" do
|
75
|
+
{"a"=>1, "b"=>2, "c"=>3}.symbolize_keys.should == {:a=>1, :b=>2, :c=>3}
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe Enumerable do
|
80
|
+
it "#collect_first should return the first collected elements" do
|
81
|
+
h = {:a => 1, :b => 2, :c => 3}
|
82
|
+
h.collect_first{|k, v| v if v == 2}.should == 2
|
83
|
+
h.collect_first(1){|k, v| v}.should == [1]
|
84
|
+
h.collect_first(2){|k, v| v}.should == [1, 2]
|
85
|
+
end
|
86
|
+
end
|
metadata
CHANGED
@@ -1,74 +1,56 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: utilities
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 0
|
8
|
-
- 12
|
9
|
-
version: 0.0.12
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.13
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Christian Blais
|
13
9
|
- Guillaume Malette
|
14
10
|
- Louis-Mathieu Houle
|
15
11
|
autorequire:
|
16
12
|
bindir: bin
|
17
13
|
cert_chain: []
|
18
|
-
|
19
|
-
date: 2011-08-21 00:00:00 -04:00
|
20
|
-
default_executable:
|
14
|
+
date: 2011-08-22 00:00:00.000000000Z
|
21
15
|
dependencies: []
|
22
|
-
|
23
|
-
|
24
|
-
email:
|
16
|
+
description: Few utilities include in all my projects, including a module for statistics,
|
17
|
+
some to_date and to_time functions as well as intersection method for Range object.
|
18
|
+
email:
|
25
19
|
- christ.blais@gmail.com
|
26
20
|
- gmalette@gmail.com
|
27
21
|
executables: []
|
28
|
-
|
29
22
|
extensions: []
|
30
|
-
|
31
23
|
extra_rdoc_files: []
|
32
|
-
|
33
|
-
files:
|
24
|
+
files:
|
34
25
|
- LICENSE
|
35
26
|
- README
|
36
27
|
- utilities.gemspec
|
37
28
|
- lib/utilities.rb
|
38
29
|
- lib/version.rb
|
39
30
|
- test/test_utilities.rb
|
40
|
-
has_rdoc: true
|
41
31
|
homepage: http://github.com/christianblais/utilities
|
42
32
|
licenses: []
|
43
|
-
|
44
33
|
post_install_message:
|
45
34
|
rdoc_options: []
|
46
|
-
|
47
|
-
require_paths:
|
35
|
+
require_paths:
|
48
36
|
- lib
|
49
37
|
- test
|
50
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
39
|
none: false
|
52
|
-
requirements:
|
53
|
-
- -
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
|
56
|
-
|
57
|
-
version: "0"
|
58
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
45
|
none: false
|
60
|
-
requirements:
|
61
|
-
- -
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
|
64
|
-
- 0
|
65
|
-
version: "0"
|
46
|
+
requirements:
|
47
|
+
- - ! '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
66
50
|
requirements: []
|
67
|
-
|
68
51
|
rubyforge_project:
|
69
|
-
rubygems_version: 1.
|
52
|
+
rubygems_version: 1.8.6
|
70
53
|
signing_key:
|
71
54
|
specification_version: 3
|
72
55
|
summary: Few utilities include in all my projects
|
73
56
|
test_files: []
|
74
|
-
|