useful_class_extensions 0.0.3 → 0.0.4

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.
@@ -0,0 +1,247 @@
1
+ class Array
2
+ def sum
3
+ self.compact.inject(0) { |s,v| s += v }
4
+ end
5
+
6
+ def to_i
7
+ self.collect{|x| x.to_i}
8
+ end
9
+
10
+ def to_f
11
+ self.collect{|x| x.to_i}
12
+ end
13
+
14
+ def frequencies
15
+ new_val = {}
16
+ self.each do |s|
17
+ elem = s.to_s
18
+ new_val[elem].nil? ? new_val[elem]=1 : new_val[elem]+=1
19
+ end
20
+ return new_val
21
+ end
22
+
23
+ def chunk(pieces=2)
24
+ len = self.length
25
+ return [] if len == 0
26
+ mid = (len/pieces)
27
+ chunks = []
28
+ start = 0
29
+ 1.upto(pieces) do |i|
30
+ last = start+mid
31
+ last = last-1 unless len%pieces >= i
32
+ chunks << self[start..last] || []
33
+ start = last+1
34
+ end
35
+ chunks
36
+ end
37
+
38
+ def repack
39
+ set = []
40
+ self.each do |slice|
41
+ set<<slice
42
+ yield set
43
+ end
44
+ end
45
+
46
+ def centroid
47
+ dimensions = self.flatten
48
+ x_cent = (x_vals = 1.upto(dimensions.length).collect{|x| dimensions[x] if x.even?}.compact).sum/x_vals.length
49
+ y_cent = (y_vals = 1.upto(dimensions.length).collect{|y| dimensions[y] if !y.even?}.compact).sum/y_vals.length
50
+ return x_cent, y_cent
51
+ end
52
+
53
+ def area
54
+ side_one = (self[0].to_f-self[2].to_f).abs
55
+ side_two = (self[1].to_f-self[3].to_f).abs
56
+ return side_one*side_two
57
+ end
58
+
59
+ def all_combinations(length_range=1..self.length)
60
+ permutations = []
61
+ length_range.max.downto(length_range.min) do |length|
62
+ self.permutation(length).each do |perm|
63
+ permutations << perm.sort if !permutations.include?(perm.sort)
64
+ end
65
+ end
66
+ return permutations
67
+ end
68
+
69
+ def structs_to_hashes
70
+ keys = (self.first.methods-Class.methods).collect{|x| x.to_s.gsub("=", "") if x.to_s.include?("=") && x.to_s!= "[]="}.compact
71
+ hashed_set = []
72
+ self.each do |struct|
73
+ object = {}
74
+ keys.collect{|k| object[k] = k.class == DateTime ? struct.send(k).to_time : struct.send(k)}
75
+ hashed_set << object
76
+ end
77
+ return hashed_set
78
+ end
79
+
80
+ def sth
81
+ structs_to_hashes
82
+ end
83
+ end
84
+
85
+ class Fixnum
86
+
87
+ def days
88
+ return self*60*60*24
89
+ end
90
+
91
+ def day
92
+ return days
93
+ end
94
+
95
+ def weeks
96
+ return self*60*60*24*7
97
+ end
98
+
99
+ def week
100
+ return weeks
101
+ end
102
+
103
+ def generalized_time_factor
104
+ if self < 60
105
+ #one second
106
+ return 1
107
+ elsif self < 3600
108
+ #one minute
109
+ return 60
110
+ elsif self < 86400
111
+ #one hour
112
+ return 3600
113
+ elsif self < 604800
114
+ #one day
115
+ return 86400
116
+ elsif self < 11536000
117
+ #one week
118
+ return 604800
119
+ else
120
+ #four weeks
121
+ return 2419200
122
+ end
123
+ end
124
+
125
+ end
126
+
127
+ class Time
128
+ def self.ntp
129
+ return self.at(self.now.to_f)
130
+ end
131
+
132
+ def gmt
133
+ return to_time.gmtime
134
+ end
135
+ end
136
+ class String
137
+
138
+ require 'rubygems'
139
+ require 'htmlentities'
140
+
141
+ def write(str)
142
+ self << str
143
+ end
144
+
145
+ def underscore
146
+ self.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').gsub(/([a-z\d])([A-Z])/,'\1_\2').tr("-", "_").downcase
147
+ end
148
+
149
+ def pluralize
150
+ self.underscore.concat("s")
151
+ end
152
+
153
+ def sanitize_for_streaming
154
+ # return self.split("").reject {|c| c.match(/[\w\'\-]/).nil?}.to_s
155
+ return self.gsub(/[\'\"]/, '').gsub("#", "%23").gsub(' ', '%20')
156
+ end
157
+
158
+ def classify
159
+ if self.split(//).last == "s"
160
+ if self.split(//)[self.split(//).length-3..self.split(//).length].join == "ies"
161
+ camelize(self.split(//)[0..self.split(//).length-4].join("")+"y")
162
+ else
163
+ camelize(self.sub(/.*\./, '').chop)
164
+ end
165
+ else
166
+ camelize(self.sub(/.*\./, ''))
167
+ end
168
+ end
169
+
170
+ def camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true)
171
+ if first_letter_in_uppercase
172
+ lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
173
+ end
174
+ end
175
+
176
+ def constantize
177
+ return Object.const_defined?(self) ? Object.const_get(self) : Object.const_missing(self)
178
+ end
179
+
180
+ def to_class
181
+ return self.classify.constantize
182
+ end
183
+
184
+ def super_strip
185
+ #This regexp is used in place of \W to allow for # and @ signs.
186
+ if self.include?("#") || self.include?("@")
187
+ return self
188
+ elsif self.include?("http")
189
+ return self
190
+ else
191
+ return self.strip.downcase.gsub(/[!$%\*&:.\;{}\[\]\(\)\-\_+=\'\"\|<>,\/?~`]/, "")
192
+ end
193
+ end
194
+
195
+ def super_split(split_char)
196
+ #This regexp is used in place of \W to allow for # and @ signs.
197
+ return self.gsub(/[!$%\*\;{}\[\]\(\)\+=\'\"\|<>,~`]/, " ").split(split_char)
198
+ end
199
+
200
+ def blank?
201
+ return self.empty? || self.nil?
202
+ end
203
+ end
204
+
205
+ class NilClass
206
+ def empty?
207
+ return true
208
+ end
209
+
210
+ def blank?
211
+ return true
212
+ end
213
+ end
214
+
215
+ class Hash
216
+ def flat_each(prefix=[], &blk)
217
+ each do |k,v|
218
+ if v.is_a?(Hash)
219
+ v.flat_each(prefix+[k], &blk)
220
+ else
221
+ yield prefix+[k], v
222
+ end
223
+ end
224
+ end
225
+
226
+ def flatify
227
+ hh = {}
228
+ self.to_enum(:flat_each).collect { |k,v| [k.join("-"),v] }.collect {|attrib| hh[attrib[0]] = attrib[1]}
229
+ return hh
230
+ end
231
+
232
+ def highest
233
+ high_pair = self.max {|a,b| a[1] <=> b[1]}
234
+ return {high_pair[0] => high_pair[1]}
235
+ end
236
+
237
+ def lowest
238
+ low_pair = self.min {|a,b| a[1] <=> b[1]}
239
+ return {low_pair[0] => low_pair[1]}
240
+ end
241
+
242
+ def self.zip(keys, values, default=nil, &block)
243
+ hsh = block_given? ? Hash.new(&block) : Hash.new(default)
244
+ keys.zip(values) { |k,v| hsh[k]=v }
245
+ hsh
246
+ end
247
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: useful_class_extensions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -18,12 +18,7 @@ executables: []
18
18
  extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
- - array.rb
22
- - fixnum.rb
23
- - hash.rb
24
- - nil_class.rb
25
- - string.rb
26
- - time.rb
21
+ - lib/useful_class_extensions.rb
27
22
  homepage: http://devingaffney.com
28
23
  licenses: []
29
24
  post_install_message:
data/array.rb DELETED
@@ -1,83 +0,0 @@
1
- class Array
2
- def sum
3
- self.compact.inject(0) { |s,v| s += v }
4
- end
5
-
6
- def to_i
7
- self.collect{|x| x.to_i}
8
- end
9
-
10
- def to_f
11
- self.collect{|x| x.to_i}
12
- end
13
-
14
- def frequencies
15
- new_val = {}
16
- self.each do |s|
17
- elem = s.to_s
18
- new_val[elem].nil? ? new_val[elem]=1 : new_val[elem]+=1
19
- end
20
- return new_val
21
- end
22
-
23
- def chunk(pieces=2)
24
- len = self.length
25
- return [] if len == 0
26
- mid = (len/pieces)
27
- chunks = []
28
- start = 0
29
- 1.upto(pieces) do |i|
30
- last = start+mid
31
- last = last-1 unless len%pieces >= i
32
- chunks << self[start..last] || []
33
- start = last+1
34
- end
35
- chunks
36
- end
37
-
38
- def repack
39
- set = []
40
- self.each do |slice|
41
- set<<slice
42
- yield set
43
- end
44
- end
45
-
46
- def centroid
47
- dimensions = self.flatten
48
- x_cent = (x_vals = 1.upto(dimensions.length).collect{|x| dimensions[x] if x.even?}.compact).sum/x_vals.length
49
- y_cent = (y_vals = 1.upto(dimensions.length).collect{|y| dimensions[y] if !y.even?}.compact).sum/y_vals.length
50
- return x_cent, y_cent
51
- end
52
-
53
- def area
54
- side_one = (self[0].to_f-self[2].to_f).abs
55
- side_two = (self[1].to_f-self[3].to_f).abs
56
- return side_one*side_two
57
- end
58
-
59
- def all_combinations(length_range=1..self.length)
60
- permutations = []
61
- length_range.max.downto(length_range.min) do |length|
62
- self.permutation(length).each do |perm|
63
- permutations << perm.sort if !permutations.include?(perm.sort)
64
- end
65
- end
66
- return permutations
67
- end
68
-
69
- def structs_to_hashes
70
- keys = (self.first.methods-Class.methods).collect{|x| x.to_s.gsub("=", "") if x.to_s.include?("=") && x.to_s!= "[]="}.compact
71
- hashed_set = []
72
- self.each do |struct|
73
- object = {}
74
- keys.collect{|k| object[k] = k.class == DateTime ? struct.send(k).to_time : struct.send(k)}
75
- hashed_set << object
76
- end
77
- return hashed_set
78
- end
79
-
80
- def sth
81
- structs_to_hashes
82
- end
83
- end
data/fixnum.rb DELETED
@@ -1,41 +0,0 @@
1
- class Fixnum
2
-
3
- def days
4
- return self*60*60*24
5
- end
6
-
7
- def day
8
- return days
9
- end
10
-
11
- def weeks
12
- return self*60*60*24*7
13
- end
14
-
15
- def week
16
- return weeks
17
- end
18
-
19
- def generalized_time_factor
20
- if self < 60
21
- #one second
22
- return 1
23
- elsif self < 3600
24
- #one minute
25
- return 60
26
- elsif self < 86400
27
- #one hour
28
- return 3600
29
- elsif self < 604800
30
- #one day
31
- return 86400
32
- elsif self < 11536000
33
- #one week
34
- return 604800
35
- else
36
- #four weeks
37
- return 2419200
38
- end
39
- end
40
-
41
- end
data/hash.rb DELETED
@@ -1,33 +0,0 @@
1
- class Hash
2
- def flat_each(prefix=[], &blk)
3
- each do |k,v|
4
- if v.is_a?(Hash)
5
- v.flat_each(prefix+[k], &blk)
6
- else
7
- yield prefix+[k], v
8
- end
9
- end
10
- end
11
-
12
- def flatify
13
- hh = {}
14
- self.to_enum(:flat_each).collect { |k,v| [k.join("-"),v] }.collect {|attrib| hh[attrib[0]] = attrib[1]}
15
- return hh
16
- end
17
-
18
- def highest
19
- high_pair = self.max {|a,b| a[1] <=> b[1]}
20
- return {high_pair[0] => high_pair[1]}
21
- end
22
-
23
- def lowest
24
- low_pair = self.min {|a,b| a[1] <=> b[1]}
25
- return {low_pair[0] => low_pair[1]}
26
- end
27
-
28
- def self.zip(keys, values, default=nil, &block)
29
- hsh = block_given? ? Hash.new(&block) : Hash.new(default)
30
- keys.zip(values) { |k,v| hsh[k]=v }
31
- hsh
32
- end
33
- end
data/nil_class.rb DELETED
@@ -1,9 +0,0 @@
1
- class NilClass
2
- def empty?
3
- return true
4
- end
5
-
6
- def blank?
7
- return true
8
- end
9
- end
data/string.rb DELETED
@@ -1,68 +0,0 @@
1
- class String
2
-
3
- require 'rubygems'
4
- require 'htmlentities'
5
-
6
- def write(str)
7
- self << str
8
- end
9
-
10
- def underscore
11
- self.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').gsub(/([a-z\d])([A-Z])/,'\1_\2').tr("-", "_").downcase
12
- end
13
-
14
- def pluralize
15
- self.underscore.concat("s")
16
- end
17
-
18
- def sanitize_for_streaming
19
- # return self.split("").reject {|c| c.match(/[\w\'\-]/).nil?}.to_s
20
- return self.gsub(/[\'\"]/, '').gsub("#", "%23").gsub(' ', '%20')
21
- end
22
-
23
- def classify
24
- if self.split(//).last == "s"
25
- if self.split(//)[self.split(//).length-3..self.split(//).length].join == "ies"
26
- camelize(self.split(//)[0..self.split(//).length-4].join("")+"y")
27
- else
28
- camelize(self.sub(/.*\./, '').chop)
29
- end
30
- else
31
- camelize(self.sub(/.*\./, ''))
32
- end
33
- end
34
-
35
- def camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true)
36
- if first_letter_in_uppercase
37
- lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
38
- end
39
- end
40
-
41
- def constantize
42
- return Object.const_defined?(self) ? Object.const_get(self) : Object.const_missing(self)
43
- end
44
-
45
- def to_class
46
- return self.classify.constantize
47
- end
48
-
49
- def super_strip
50
- #This regexp is used in place of \W to allow for # and @ signs.
51
- if self.include?("#") || self.include?("@")
52
- return self
53
- elsif self.include?("http")
54
- return self
55
- else
56
- return self.strip.downcase.gsub(/[!$%\*&:.\;{}\[\]\(\)\-\_+=\'\"\|<>,\/?~`]/, "")
57
- end
58
- end
59
-
60
- def super_split(split_char)
61
- #This regexp is used in place of \W to allow for # and @ signs.
62
- return self.gsub(/[!$%\*\;{}\[\]\(\)\+=\'\"\|<>,~`]/, " ").split(split_char)
63
- end
64
-
65
- def blank?
66
- return self.empty? || self.nil?
67
- end
68
- end
data/time.rb DELETED
@@ -1,9 +0,0 @@
1
- class Time
2
- def self.ntp
3
- return self.at(self.now.to_f)
4
- end
5
-
6
- def gmt
7
- return to_time.gmtime
8
- end
9
- end