dgaff 0.1.0 → 0.1.1
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.
- checksums.yaml +13 -5
- data/lib/dgaff/array.rb +83 -0
- data/lib/dgaff/class.rb +9 -0
- data/lib/dgaff/fixnum.rb +63 -0
- data/lib/dgaff/float.rb +5 -0
- data/lib/dgaff/hash.rb +42 -0
- data/lib/dgaff/string.rb +95 -0
- data/lib/dgaff/time.rb +16 -0
- data/lib/dgaff/version.rb +1 -1
- metadata +15 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
|
|
2
|
+
!binary "U0hBMQ==":
|
|
3
|
+
metadata.gz: !binary |-
|
|
4
|
+
Njk4MWY4ZWFiYjZlNGEwMTFmNjIwMmU3MjU5ODhiZjNiYWUyMzkwMA==
|
|
5
|
+
data.tar.gz: !binary |-
|
|
6
|
+
MTFlYTQ4OTkyMmY5YTQ1YWY2ODk1NjZjMzZmOTNkNzc3MGFlZmY5Nw==
|
|
5
7
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
|
|
8
|
+
metadata.gz: !binary |-
|
|
9
|
+
YmM0NGUxN2RlMjZlNjUwNjI2OGJiNzRhMjU5MWQyMzdhZjY1ZGU5ODdhNjc1
|
|
10
|
+
MzQ2ZDIxZGJkZjkxN2U3NGE0YWUwZTUxN2U0ODhkMmMxZjUwMzk5NGI0YTU5
|
|
11
|
+
MGI3OTJjMTU2M2NjZTk3OGRkNzdlZjExNzQ4ZWVmNmRiOTIxZDA=
|
|
12
|
+
data.tar.gz: !binary |-
|
|
13
|
+
ODU1NGVlZmEzZmNkNTllMjkzMGFiMGY4OGU3YTQ0Nzg1YWRlNzYwYmFlNzFl
|
|
14
|
+
YmMzNTRkZmYzZjNiOWJmNDJhZWE2NTExMjlmNWIwYzNkMDBmMTg4MjU0M2Iw
|
|
15
|
+
OTJmNjAyZGM2YzMwMzMzMDg5NTFmOWUyMTU3ZGRkMWE4NzJiYWE=
|
data/lib/dgaff/array.rb
CHANGED
|
@@ -1,4 +1,82 @@
|
|
|
1
1
|
class Array
|
|
2
|
+
def to_i
|
|
3
|
+
self.collect{|x| x.to_i}
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def to_f
|
|
7
|
+
self.collect{|x| x.to_f}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def frequencies
|
|
11
|
+
new_val = {}
|
|
12
|
+
self.each do |s|
|
|
13
|
+
elem = s.to_s
|
|
14
|
+
new_val[elem].nil? ? new_val[elem]=1 : new_val[elem]+=1
|
|
15
|
+
end
|
|
16
|
+
return new_val
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def chunk(pieces=2)
|
|
20
|
+
len = self.length
|
|
21
|
+
return [] if len == 0
|
|
22
|
+
mid = (len/pieces)
|
|
23
|
+
chunks = []
|
|
24
|
+
start = 0
|
|
25
|
+
1.upto(pieces) do |i|
|
|
26
|
+
last = start+mid
|
|
27
|
+
last = last-1 unless len%pieces >= i
|
|
28
|
+
chunks << self[start..last] || []
|
|
29
|
+
start = last+1
|
|
30
|
+
end
|
|
31
|
+
chunks
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def repack
|
|
35
|
+
set = []
|
|
36
|
+
self.each do |slice|
|
|
37
|
+
set<<slice
|
|
38
|
+
yield set
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def centroid
|
|
43
|
+
dimensions = self.flatten
|
|
44
|
+
x_cent = (x_vals = 1.upto(dimensions.length).collect{|x| dimensions[x] if x.even?}.compact).sum/x_vals.length
|
|
45
|
+
y_cent = (y_vals = 1.upto(dimensions.length).collect{|y| dimensions[y] if !y.even?}.compact).sum/y_vals.length
|
|
46
|
+
return x_cent, y_cent
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def area
|
|
50
|
+
side_one = (self[0].to_f-self[2].to_f).abs
|
|
51
|
+
side_two = (self[1].to_f-self[3].to_f).abs
|
|
52
|
+
return side_one*side_two
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def all_combinations(length_range=1..self.length)
|
|
56
|
+
permutations = []
|
|
57
|
+
length_range.max.downto(length_range.min) do |length|
|
|
58
|
+
self.permutation(length).each do |perm|
|
|
59
|
+
permutations << perm.sort if !permutations.include?(perm.sort)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
return permutations
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def structs_to_hashes
|
|
66
|
+
keys = (self.first.methods-Class.methods).collect{|x| x.to_s.gsub("=", "") if x.to_s.include?("=") && x.to_s!= "[]="}.compact
|
|
67
|
+
hashed_set = []
|
|
68
|
+
self.each do |struct|
|
|
69
|
+
object = {}
|
|
70
|
+
keys.collect{|k| object[k] = k.class == DateTime ? struct.send(k).to_time : struct.send(k)}
|
|
71
|
+
hashed_set << object
|
|
72
|
+
end
|
|
73
|
+
return hashed_set
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def sth
|
|
77
|
+
structs_to_hashes
|
|
78
|
+
end
|
|
79
|
+
|
|
2
80
|
def moving_average(increment = 1)
|
|
3
81
|
return self.average if increment == 1
|
|
4
82
|
a = self.dup
|
|
@@ -143,4 +221,9 @@ class Array
|
|
|
143
221
|
end
|
|
144
222
|
string
|
|
145
223
|
end
|
|
224
|
+
|
|
225
|
+
def accumulate
|
|
226
|
+
sum = 0
|
|
227
|
+
self.map{|x| sum += x}
|
|
228
|
+
end
|
|
146
229
|
end
|
data/lib/dgaff/class.rb
ADDED
data/lib/dgaff/fixnum.rb
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
class Fixnum
|
|
2
|
+
def delimited(delimiter=",")
|
|
3
|
+
self.to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{delimiter}")
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def percentage(round)
|
|
7
|
+
self.to_f.round(round)*10.to_s+"%"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def rounded_with_suffix
|
|
11
|
+
number_commafied = self.delimited.split(",")
|
|
12
|
+
case number_commafied.length
|
|
13
|
+
when 1
|
|
14
|
+
return number_commafied.first
|
|
15
|
+
when 2
|
|
16
|
+
return number_commafied.first.length == 3 ? number_commafied.first+"K" : number_commafied.first+"."+number_commafied[1][0]+"K"
|
|
17
|
+
when 3
|
|
18
|
+
return number_commafied.first.length == 3 ? number_commafied.first+"M" : number_commafied.first+"."+number_commafied[1][0]+"M"
|
|
19
|
+
when 4
|
|
20
|
+
return number_commafied.first.length == 3 ? number_commafied.first+"B" : number_commafied.first+"."+number_commafied[1][0]+"B"
|
|
21
|
+
when 5
|
|
22
|
+
return number_commafied.first.length == 3 ? number_commafied.first+"T" : number_commafied.first+"."+number_commafied[1][0]+"T"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def days
|
|
27
|
+
return self*60*60*24
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def day
|
|
31
|
+
return days
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def weeks
|
|
35
|
+
return self*60*60*24*7
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def week
|
|
39
|
+
return weeks
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def generalized_time_factor
|
|
43
|
+
if self < 60
|
|
44
|
+
#one second
|
|
45
|
+
return 1
|
|
46
|
+
elsif self < 3600
|
|
47
|
+
#one minute
|
|
48
|
+
return 60
|
|
49
|
+
elsif self < 86400
|
|
50
|
+
#one hour
|
|
51
|
+
return 3600
|
|
52
|
+
elsif self < 604800
|
|
53
|
+
#one day
|
|
54
|
+
return 86400
|
|
55
|
+
elsif self < 11536000
|
|
56
|
+
#one week
|
|
57
|
+
return 604800
|
|
58
|
+
else
|
|
59
|
+
#four weeks
|
|
60
|
+
return 2419200
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
data/lib/dgaff/float.rb
ADDED
data/lib/dgaff/hash.rb
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
class Hash
|
|
2
|
+
def get(key)
|
|
3
|
+
self[key.to_s]||self[key.to_sym]
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def set(key, value)
|
|
7
|
+
if self[key.to_s]
|
|
8
|
+
self[key.to_s] = value
|
|
9
|
+
elsif self[key.to_sym]
|
|
10
|
+
self[key.to_sym] = value
|
|
11
|
+
else
|
|
12
|
+
self[key.to_sym] = value
|
|
13
|
+
end
|
|
14
|
+
self
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def flat_each(prefix=[], &blk)
|
|
18
|
+
each do |k,v|
|
|
19
|
+
if v.is_a?(Hash)
|
|
20
|
+
v.flat_each(prefix+[k], &blk)
|
|
21
|
+
else
|
|
22
|
+
yield prefix+[k], v
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def flatify
|
|
28
|
+
hh = {}
|
|
29
|
+
self.to_enum(:flat_each).collect { |k,v| [k.join("-"),v] }.collect {|attrib| hh[attrib[0]] = attrib[1]}
|
|
30
|
+
return hh
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def highest
|
|
34
|
+
high_pair = self.max {|a,b| a[1] <=> b[1]}
|
|
35
|
+
return {high_pair[0] => high_pair[1]}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def lowest
|
|
39
|
+
low_pair = self.min {|a,b| a[1] <=> b[1]}
|
|
40
|
+
return {low_pair[0] => low_pair[1]}
|
|
41
|
+
end
|
|
42
|
+
end
|
data/lib/dgaff/string.rb
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
class String
|
|
2
|
+
ATEXT = /[A-Za-z0-9!#\$%&'\*\+\-\/=\?\^_`\{\|\}\~]/
|
|
3
|
+
DOT_ATOM = /(?:#{ATEXT})+(?:\.(?:#{ATEXT})+)*/
|
|
4
|
+
|
|
5
|
+
TEXT = /[\x01-\x09\x0B\x0C\x0E-\x7F]/
|
|
6
|
+
QTEXT = /[\x01-\x08\x0B\x0C\x0E-\x1F\x21\x23-\x5B\x5D-\x7E]/
|
|
7
|
+
QUOTED_PAIR = /\\#{TEXT}/
|
|
8
|
+
QCONTENT = /(?:#{QTEXT}|#{QUOTED_PAIR})/
|
|
9
|
+
QUOTED_STRING = /"(?:\s*#{QCONTENT})*\s*"/
|
|
10
|
+
|
|
11
|
+
DTEXT = /[\x01-\x08\x0B\x0C\x0E-\x1F\x21-\x5A\x5E-\x7E]/
|
|
12
|
+
DCONTENT = /(?:#{DTEXT}|#{QUOTED_PAIR})/
|
|
13
|
+
DOMAIN_LITERAL = /\[(?:\s*#{DCONTENT})*\s*\]/
|
|
14
|
+
DOMAIN = /(?:#{DOT_ATOM}|#{DOMAIN_LITERAL})/
|
|
15
|
+
|
|
16
|
+
LOCAL_PART = /(?:#{DOT_ATOM}|#{QUOTED_STRING})/
|
|
17
|
+
|
|
18
|
+
ADDR_SPEC = /^(#{LOCAL_PART})@(#{DOMAIN})$/
|
|
19
|
+
def url?
|
|
20
|
+
return !(self =~ URI::regexp).nil?
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def valid_email_address?
|
|
24
|
+
result = (self =~ ADDR_SPEC)
|
|
25
|
+
return !result.nil?
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def blank?
|
|
29
|
+
# 1.8 does not takes [:space:] properly
|
|
30
|
+
if encoding_aware?
|
|
31
|
+
begin
|
|
32
|
+
self !~ /[^[:space:]]/
|
|
33
|
+
rescue
|
|
34
|
+
p self
|
|
35
|
+
false
|
|
36
|
+
end
|
|
37
|
+
else
|
|
38
|
+
self !~ NON_WHITESPACE_REGEXP
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def to_url
|
|
43
|
+
url = URI.parse(URI.encode(self.strip)).to_s
|
|
44
|
+
url
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def underscore_to_pretty
|
|
48
|
+
self.split("_").collect(&:capitalize).join(" ")
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def truncate(opts={})
|
|
52
|
+
opts = Hashie::Mash[opts]
|
|
53
|
+
opts[:length] ||= 30
|
|
54
|
+
opts.ending_character ||= ""
|
|
55
|
+
set = ""
|
|
56
|
+
text = self.split(" ")
|
|
57
|
+
text.each do |word|
|
|
58
|
+
set = "#{set}#{word} " if opts[:length] >= (set.length + word.length)
|
|
59
|
+
end
|
|
60
|
+
set+opts.ending_character
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def linkify
|
|
64
|
+
self.gsub!(/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/, '<a href="\1" target="_blank">\1</a>')
|
|
65
|
+
self.gsub!(/(#\w*)/, '<a href="https://twitter.com/search?q=\1" target="_blank">\1</a>')
|
|
66
|
+
self.gsub!(/@(\w*)/, '<a href="https://twitter.com/\1" target="_blank">@\1</a>')
|
|
67
|
+
self
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def classify
|
|
71
|
+
if self.split(//).last == "s"
|
|
72
|
+
if self.split(//)[self.split(//).length-3..self.split(//).length].join == "ies"
|
|
73
|
+
camelize(self.split(//)[0..self.split(//).length-4].join("")+"y")
|
|
74
|
+
else
|
|
75
|
+
camelize(self.sub(/.*\./, '').chop)
|
|
76
|
+
end
|
|
77
|
+
else
|
|
78
|
+
camelize(self.sub(/.*\./, ''))
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true)
|
|
83
|
+
if first_letter_in_uppercase
|
|
84
|
+
lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def constantize
|
|
89
|
+
return Object.const_defined?(self) ? Object.const_get(self) : Object.const_missing(self)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def to_class
|
|
93
|
+
return self.classify.constantize
|
|
94
|
+
end
|
|
95
|
+
end
|
data/lib/dgaff/time.rb
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
class Time
|
|
2
|
+
def super_parse(value)
|
|
3
|
+
answer = nil
|
|
4
|
+
begin
|
|
5
|
+
self.parse
|
|
6
|
+
rescue
|
|
7
|
+
year,month,day,hour,minute,second = value.split(" ")
|
|
8
|
+
answer = Time.parse("#{year}-#{month}-#{day} #{hour}:#{minute}:#{second}")
|
|
9
|
+
end
|
|
10
|
+
return answer
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def gmt
|
|
14
|
+
return to_time.gmtime
|
|
15
|
+
end
|
|
16
|
+
end
|
data/lib/dgaff/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dgaff
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Devin Gaffney
|
|
@@ -14,28 +14,28 @@ dependencies:
|
|
|
14
14
|
name: bundler
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- -
|
|
17
|
+
- - ~>
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: '1.9'
|
|
20
20
|
type: :development
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- -
|
|
24
|
+
- - ~>
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '1.9'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rake
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- -
|
|
31
|
+
- - ~>
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: '10.0'
|
|
34
34
|
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- -
|
|
38
|
+
- - ~>
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '10.0'
|
|
41
41
|
description: Mostly Array operations, probably forever.
|
|
@@ -45,7 +45,7 @@ executables: []
|
|
|
45
45
|
extensions: []
|
|
46
46
|
extra_rdoc_files: []
|
|
47
47
|
files:
|
|
48
|
-
-
|
|
48
|
+
- .gitignore
|
|
49
49
|
- CODE_OF_CONDUCT.md
|
|
50
50
|
- Gemfile
|
|
51
51
|
- LICENSE.txt
|
|
@@ -56,6 +56,12 @@ files:
|
|
|
56
56
|
- dgaff.gemspec
|
|
57
57
|
- lib/dgaff.rb
|
|
58
58
|
- lib/dgaff/array.rb
|
|
59
|
+
- lib/dgaff/class.rb
|
|
60
|
+
- lib/dgaff/fixnum.rb
|
|
61
|
+
- lib/dgaff/float.rb
|
|
62
|
+
- lib/dgaff/hash.rb
|
|
63
|
+
- lib/dgaff/string.rb
|
|
64
|
+
- lib/dgaff/time.rb
|
|
59
65
|
- lib/dgaff/version.rb
|
|
60
66
|
homepage: http://devingaffney.com
|
|
61
67
|
licenses:
|
|
@@ -67,17 +73,17 @@ require_paths:
|
|
|
67
73
|
- lib
|
|
68
74
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
69
75
|
requirements:
|
|
70
|
-
- -
|
|
76
|
+
- - ! '>='
|
|
71
77
|
- !ruby/object:Gem::Version
|
|
72
78
|
version: '0'
|
|
73
79
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
74
80
|
requirements:
|
|
75
|
-
- -
|
|
81
|
+
- - ! '>='
|
|
76
82
|
- !ruby/object:Gem::Version
|
|
77
83
|
version: '0'
|
|
78
84
|
requirements: []
|
|
79
85
|
rubyforge_project:
|
|
80
|
-
rubygems_version: 2.4.
|
|
86
|
+
rubygems_version: 2.4.2
|
|
81
87
|
signing_key:
|
|
82
88
|
specification_version: 4
|
|
83
89
|
summary: A gem for some commonly used methods used by @dgaff
|