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 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