utilities 0.0.8 → 0.0.9

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 CHANGED
@@ -48,24 +48,9 @@ class String
48
48
  def to_time
49
49
  Time.parse(self)
50
50
  end
51
-
52
- # Transform self to a float representation of a time (HH:MM)
53
- # Ex: "14:30" => 14.5, "12h00" => 12.0
54
- def hour_to_float
55
- hour, min = split(/:|h/)
56
- hour.to_f + min.to_f / 60.0
57
- end
58
51
  end
59
52
 
60
53
  class Numeric
61
- # Transform self to a string formatted time (HH:MM)
62
- # Ex: 14.5 => "14:30"
63
- def hour_to_string delimiter = ':'
64
- hour = self.to_i
65
- min = "%02d" % (self.abs * 60 % 60).to_i
66
- "#{hour}#{delimiter}#{min}"
67
- end
68
-
69
54
  # Convert to degrees
70
55
  def degrees
71
56
  self * Math::PI / 180
@@ -76,6 +61,13 @@ class Numeric
76
61
  self * self
77
62
  end
78
63
 
64
+ #Transform self to a string formatted time (HH:MM) Ex: 14.5 => “14:30“
65
+ def hour_to_string delimiter = ':'
66
+ hour = self.to_i
67
+ min = "%02d" % (self.abs * 60 % 60).to_i
68
+ "#{hour}#{delimiter}#{min}"
69
+ end
70
+
79
71
  # Return the square root of self
80
72
  def sqrt
81
73
  Math.sqrt(self)
@@ -100,10 +92,18 @@ class Numeric
100
92
  end
101
93
 
102
94
  module Utilities
103
- module Subclasses
104
- # Find every subclass of an object
95
+ module Submodules
96
+ # Find every submodules of an object.
97
+ def submodules
98
+ constants.collect{ |const_name| const_get(const_name) }.select{ |const| const.class == Module }
99
+ end
100
+ end
101
+
102
+ module Subclasses
103
+ # Find every subclass of an object.
105
104
  def subclasses(direct = false)
106
105
  classes = []
106
+
107
107
  if direct
108
108
  ObjectSpace.each_object(Class) do |c|
109
109
  classes << c if c.superclass == self
@@ -113,21 +113,15 @@ module Utilities
113
113
  classes << c if c.ancestors.include?(self) and (c != self)
114
114
  end
115
115
  end
116
+
116
117
  classes
117
118
  end
118
119
  end
119
-
120
- module Submodules
121
- # Find every submodules of an object
122
- def submodules
123
- constants.collect{ |const_name| const_get(const_name) }.select{ |const| const.class == Module }
124
- end
125
- end
126
-
120
+
127
121
  module Statistics
128
122
  # Add each object of the array to each other in order to get the sum, as long as all objects respond to + operator
129
123
  def sum
130
- inject( :+ )
124
+ flatten.compact.inject( :+ )
131
125
  end
132
126
 
133
127
  # Calculate squares of each item
@@ -149,7 +143,8 @@ module Utilities
149
143
 
150
144
  # Calculate the mean of the array, as long as all objects respond to / operator
151
145
  def mean
152
- (size > 0) ? sum.to_f / size : 0.0
146
+ a = flatten.compact.to_stat
147
+ (a.size > 0) ? a.sum.to_f / a.size : 0.0
153
148
  end
154
149
  alias_method :average, :mean
155
150
 
@@ -183,7 +178,7 @@ module Utilities
183
178
 
184
179
  # Return the first quartile of self
185
180
  def first_quartile( already_sorted = false )
186
- return nil if empty?
181
+ return nil unless size >= 4
187
182
  a = already_sorted ? self : sort
188
183
  a[0..((size / 2) - 1)].extend(Utilities::Statistics).median( true )
189
184
  end
@@ -191,7 +186,7 @@ module Utilities
191
186
 
192
187
  # Return the last quartile of self
193
188
  def last_quartile( already_sorted = false )
194
- return nil if empty?
189
+ return nil unless size >= 4
195
190
  a = already_sorted ? self : sort
196
191
  a[((size / 2) + 1)..-1].extend(Utilities::Statistics).median( true )
197
192
  end
@@ -205,7 +200,7 @@ module Utilities
205
200
 
206
201
  # Calculate the interquartile range of self
207
202
  def interquartile_range( already_sorted = false )
208
- return nil if empty?
203
+ return nil unless size >= 4
209
204
  a = sort_and_extend( already_sorted )
210
205
  a.last_quartile - a.first_quartile
211
206
  end
@@ -267,6 +262,19 @@ module Utilities
267
262
  end
268
263
 
269
264
  class Array
265
+ # Returns true if the array contains only numerical values
266
+ def numerics?( allow_nil = false )
267
+ (allow_nil ? compact : self).reject{ |x| x.is_a?( Numeric ) }.empty?
268
+ end
269
+ alias_method :numeric?, :numerics?
270
+ alias_method :narray?, :numerics?
271
+
272
+ # Transforms an array
273
+ def to_numerics
274
+ map{ |x| x.to_f }
275
+ end
276
+ alias_method :to_numeric, :to_numerics
277
+ alias_method :to_narray, :to_numerics
270
278
 
271
279
  # Returns a copy of self reverse sorted
272
280
  def reverse_sort
@@ -284,9 +292,11 @@ class Array
284
292
  def to_stat
285
293
  dup.to_stat!
286
294
  end
295
+ alias_method :to_stats, :to_stat
287
296
 
288
297
  # Adds the statistics methods to self
289
298
  def to_stat!
290
299
  extend(Utilities::Statistics)
291
300
  end
301
+ alias_method :to_stats!, :to_stat!
292
302
  end
data/lib/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  class Utilities
2
2
  MAJOR = 0
3
3
  MINOR = 0
4
- BUILD = 8
4
+ BUILD = 9
5
5
 
6
6
  VERSION = "#{MAJOR}.#{MINOR}.#{BUILD}"
7
7
  end
@@ -0,0 +1,63 @@
1
+ require '../lib/utilities'
2
+
3
+ describe Range do
4
+ it "#intersection should returns a range containing elements common to the two ranges, with no duplicates" do
5
+ (1..10).intersection(5..15).should == (5..10)
6
+ (1..10).intersection(15..25).should == nil
7
+ end
8
+
9
+ it "#empty? should returns true if given Range is empty" do
10
+ # Can a range be empty?
11
+ end
12
+
13
+ it "#overlap? should returns true if the given Range overlaps the other" do
14
+ (1..5).overlap?(10..20).should == false
15
+ (1..5).overlap?(4..9).should == true
16
+ (1..5).overlap?(5..10).should == true
17
+ (1...5).overlap?(5..10).should == false
18
+ end
19
+ end
20
+
21
+ describe Numeric do
22
+ it "#degrees should returns the right degrees for any given Numeric" do
23
+ 0.degrees.should == 0
24
+ 90.degrees.should == Math::PI / 2
25
+ 180.degrees.should == Math::PI
26
+ 360.degrees.should == Math::PI * 2
27
+ end
28
+
29
+ it "#square should returns the square of any given Numeric (based on Numeric ** method)" do
30
+ (-5..5).each do |i|
31
+ i.square.should == i**2
32
+ end
33
+ end
34
+
35
+ it "#sqrt should returns the square root of any given Numeric (based on Math::sqrt)" do
36
+ (1..25).each do |i|
37
+ i.sqrt.should == Math::sqrt(i)
38
+ end
39
+ end
40
+
41
+ it "#rank should returns the rank of any given Numeric" do
42
+ 1.rank(1, 5).should == (1.0 - 1.0) / (5.0 - 1.0)
43
+ 5.rank(3, 9).should == (5.0 - 3.0) / (9.0 - 3.0)
44
+ -4.rank(1, 5).should == (-4.0 - 1.0) / (5.0 - 1.0)
45
+ 1.rank(1, 1).should == 0.0
46
+ end
47
+
48
+ it "#to_decimals should return a string of format %.nf" do
49
+ 1.to_decimals(1).should == "1.0"
50
+ 1.to_decimals(4).should == "1.0000"
51
+ 1.983.to_decimals.should == "1.98"
52
+ 1.987.to_decimals.should == "1.99"
53
+ -1.531.to_decimals.should == "-1.53"
54
+ end
55
+
56
+ it "#percentage_of should return the percent of any given Numeric on n" do
57
+ 1.percentage_of(100).should == 1
58
+ 1.percentage_of(50).should == 2
59
+ 1.percentage_of(1).should == 100
60
+ 1.percentage_of(50, 50).should == 1
61
+ 100.percentage_of(50).should == 200
62
+ end
63
+ end
data/utilities.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
  lib = File.expand_path('../lib/', __FILE__)
3
3
  $:.unshift lib unless $:.include?(lib)
4
4
 
5
- require 'lib/version'
5
+ require './lib/version'
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "utilities"
@@ -19,7 +19,8 @@ Gem::Specification.new do |s|
19
19
  'README',
20
20
  'utilities.gemspec',
21
21
  'lib/utilities.rb',
22
- 'lib/version.rb']
22
+ 'lib/version.rb',
23
+ 'test/test_utilities.rb']
23
24
 
24
- s.require_paths = ['lib']
25
+ s.require_paths = ['lib', 'test']
25
26
  end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: utilities
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
5
- prerelease:
4
+ prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 0
9
- - 8
10
- version: 0.0.8
8
+ - 9
9
+ version: 0.0.9
11
10
  platform: ruby
12
11
  authors:
13
12
  - Christian Blais
@@ -17,7 +16,7 @@ autorequire:
17
16
  bindir: bin
18
17
  cert_chain: []
19
18
 
20
- date: 2011-04-26 00:00:00 -04:00
19
+ date: 2011-06-21 00:00:00 -04:00
21
20
  default_executable:
22
21
  dependencies: []
23
22
 
@@ -37,6 +36,7 @@ files:
37
36
  - utilities.gemspec
38
37
  - lib/utilities.rb
39
38
  - lib/version.rb
39
+ - test/test_utilities.rb
40
40
  has_rdoc: true
41
41
  homepage: http://github.com/christianblais/utilities
42
42
  licenses: []
@@ -46,12 +46,12 @@ rdoc_options: []
46
46
 
47
47
  require_paths:
48
48
  - lib
49
+ - test
49
50
  required_ruby_version: !ruby/object:Gem::Requirement
50
51
  none: false
51
52
  requirements:
52
53
  - - ">="
53
54
  - !ruby/object:Gem::Version
54
- hash: 3
55
55
  segments:
56
56
  - 0
57
57
  version: "0"
@@ -60,14 +60,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - ">="
62
62
  - !ruby/object:Gem::Version
63
- hash: 3
64
63
  segments:
65
64
  - 0
66
65
  version: "0"
67
66
  requirements: []
68
67
 
69
68
  rubyforge_project:
70
- rubygems_version: 1.5.0
69
+ rubygems_version: 1.3.7
71
70
  signing_key:
72
71
  specification_version: 3
73
72
  summary: Few utilities include in all my projects