dgaff 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8140a97d2e7793d3707e3218d8040f4ca412b2e7
4
- data.tar.gz: d74a49cf309b97889bd4198eb72d465a4113ba1f
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Njk4MWY4ZWFiYjZlNGEwMTFmNjIwMmU3MjU5ODhiZjNiYWUyMzkwMA==
5
+ data.tar.gz: !binary |-
6
+ MTFlYTQ4OTkyMmY5YTQ1YWY2ODk1NjZjMzZmOTNkNzc3MGFlZmY5Nw==
5
7
  SHA512:
6
- metadata.gz: 5ae4eb0bf7a7ca62cebb5fde12e28f68777ccc66317827df8eeca5f24196cfc554ebb8b673ab242190dd9795799166314318cbb51eaf8cbeb72bbbdf7b031aff
7
- data.tar.gz: bb953ae102483953b40cf46c46b401a1936af4898dd536d6c2dbc3065f8dfff914aaf32208a140c4fe9c01c23e41cfaaa8af690c2e960821e63d305ffd579e98
8
+ metadata.gz: !binary |-
9
+ YmM0NGUxN2RlMjZlNjUwNjI2OGJiNzRhMjU5MWQyMzdhZjY1ZGU5ODdhNjc1
10
+ MzQ2ZDIxZGJkZjkxN2U3NGE0YWUwZTUxN2U0ODhkMmMxZjUwMzk5NGI0YTU5
11
+ MGI3OTJjMTU2M2NjZTk3OGRkNzdlZjExNzQ4ZWVmNmRiOTIxZDA=
12
+ data.tar.gz: !binary |-
13
+ ODU1NGVlZmEzZmNkNTllMjkzMGFiMGY4OGU3YTQ0Nzg1YWRlNzYwYmFlNzFl
14
+ YmMzNTRkZmYzZjNiOWJmNDJhZWE2NTExMjlmNWIwYzNkMDBmMTg4MjU0M2Iw
15
+ OTJmNjAyZGM2YzMwMzMzMDg5NTFmOWUyMTU3ZGRkMWE4NzJiYWE=
@@ -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
@@ -0,0 +1,9 @@
1
+ class Class
2
+ def downcase
3
+ return self.to_s.downcase
4
+ end
5
+
6
+ def underscore
7
+ return self.to_s.underscore
8
+ end
9
+ end
@@ -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
@@ -0,0 +1,5 @@
1
+ class Float
2
+ def delimited(delimiter=",")
3
+ self.to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{delimiter}")
4
+ end
5
+ end
@@ -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
@@ -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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Dgaff
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
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.0
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
- - ".gitignore"
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.6
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