x_tensions 0.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7dea1c6a350f2a192ed4b6cf4b18131dfb449c54
4
+ data.tar.gz: 02403b9eafe903abd70b6a590edf8d58820f0cd0
5
+ SHA512:
6
+ metadata.gz: fca5d0f060e252a6af56929a99747abfcf12aeb36edf90b8ff52d02a34c2261f78cf84870ba08dd72f910c222d22dabb3866a47b5eaf5d935b88c5fccb3bfc5f
7
+ data.tar.gz: 6191c5b85234dd9ea1bed0ce83a5c1392b742e824b59d0801bef21899332e07de0cb020e8925b68015174c655f91d24da1174eb1a322619e68be371018dbd853
data/lib/x_tensions.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'x_tensions/object'
2
+ require 'x_tensions/hash'
3
+ require 'x_tensions/string'
4
+ require 'x_tensions/array'
5
+ require 'x_tensions/number'
@@ -0,0 +1,14 @@
1
+ class Array
2
+ def average
3
+ self.sum.to_f / self.length
4
+ end
5
+
6
+ def symbolize_keys_recursive
7
+ inject([]) do |options, value|
8
+ value = value.symbolize_keys_recursive if value.instance_of? Hash
9
+ value = value.symbolize_keys_recursive if value.instance_of? Array
10
+ options << value
11
+ options
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,47 @@
1
+ class Hash
2
+ def evaluate(*args)
3
+ options = {:default => nil}.merge(args.last.is_a?(Hash) ? args.pop : {})
4
+ target = self # Initial target is self.
5
+ while target && key = args.shift
6
+ target = target[key]
7
+ end
8
+
9
+ return target if target
10
+ return options[:default]
11
+ end
12
+
13
+ def get(*keys)
14
+ return nil if keys.blank?
15
+ self.fetch keys.shift, self.get(*keys)
16
+ end
17
+
18
+ def clean
19
+ each do |k, v|
20
+ if v.is_a?(Hash)
21
+ v.clean
22
+ elsif v.to_s.empty?
23
+ delete(k)
24
+ end
25
+ end
26
+ end
27
+
28
+ def symbolize_keys_recursive
29
+ inject({}) do |options, (key, value)|
30
+ value = value.symbolize_keys_recursive if value.instance_of? Hash
31
+ value = value.symbolize_keys_recursive if value.instance_of? Array
32
+ options[key.to_sym || key] = value
33
+ options
34
+ end
35
+ end
36
+
37
+ def rename_keys(mapping)
38
+ result = {}
39
+ self.map do |k,v|
40
+ mapped_key = mapping[k] ? mapping[k] : k
41
+ result[mapped_key] = v.kind_of?(Hash) ? v.rename_keys(mapping) : v
42
+ result[mapped_key] = v.collect{ |obj| obj.rename_keys(mapping) if obj.kind_of?(Hash)} if v.kind_of?(Array)
43
+ end
44
+ result
45
+ end
46
+
47
+ end
@@ -0,0 +1,8 @@
1
+ class Number
2
+ def positive?
3
+ self > 0
4
+ end
5
+ def negative
6
+ self < 0
7
+ end
8
+ end
@@ -0,0 +1,32 @@
1
+ class Object
2
+
3
+ def to_hms
4
+ Time.at(self.to_f).utc.strftime("%H:%M:%S")
5
+ end
6
+
7
+ def to_normal_time
8
+ self.strftime("%H:%M %p")
9
+ end
10
+
11
+ def rcall(*args)
12
+ options = {:d => nil}.merge(args.last.is_a?(Hash) ? args.pop : {})
13
+ target = self
14
+
15
+ while target && m = args.shift
16
+ target = target.send(m) if target.respond_to?(m)
17
+ end
18
+
19
+ return target if target
20
+ return options[:d].call if options[:d].respond_to? :call
21
+ return options[:d]
22
+ end
23
+
24
+ def is?(other_object)
25
+ self == other_object
26
+ end
27
+
28
+ def is_not?(other_object)
29
+ self != other_object
30
+ end
31
+
32
+ end
@@ -0,0 +1,49 @@
1
+
2
+ class String
3
+ def humanize
4
+ result = self.to_s.dup
5
+ result.gsub(/_/, " ").capitalize
6
+ end
7
+
8
+ def to_utf8
9
+ self.encode!('UTF-16', 'UTF-8', :invalid => :replace, :replace => '')
10
+ self.encode!('UTF-8', 'UTF-16')
11
+ end
12
+
13
+ def ellipsisize(minimum_length=4,edge_length=3)
14
+ return self if self.length < minimum_length or self.length <= edge_length*2
15
+ edge = '.' * edge_length
16
+ mid_length = self.length - edge_length*2
17
+ gsub(/(#{edge}).{#{mid_length},}(#{edge})/, '\1...\2')
18
+ end
19
+
20
+ def words
21
+ self.split(/\s+/)
22
+ end
23
+
24
+ def urlize
25
+ self.strip.downcase.gsub(/[^a-z]+/, '_')
26
+ end
27
+
28
+ def shortize
29
+ self.words.first.downcase
30
+ end
31
+
32
+ def to_slug
33
+ ret = self.strip
34
+ ret.gsub! /['`]/,""
35
+ ret.gsub! /\s*@\s*/, " at "
36
+ ret.gsub! /\s*&\s*/, " and "
37
+ ret.gsub! /\s*\.\.\.\s*/, " "
38
+ ret.gsub! /\s*\.\s*/, " dot "
39
+ ret.gsub! /\s*\#\s*/, " hash "
40
+ ret.gsub! /\s*\+\s*/, " plus "
41
+ ret.gsub! /\s*[^A-Za-z0-9\.\-]\s*/, '-'
42
+ ret.gsub! /-+/,"-"
43
+ ret.gsub! /\A[-\.]+|[-\.]+\z/,""
44
+ ret.downcase!
45
+
46
+ {
47
+ }[ret] || ret
48
+ end
49
+ end
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: x_tensions
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Usman Ali
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-05 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Just a few useful extensions
14
+ email: usmanalik@outlook.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/x_tensions.rb
20
+ - lib/x_tensions/array.rb
21
+ - lib/x_tensions/hash.rb
22
+ - lib/x_tensions/number.rb
23
+ - lib/x_tensions/object.rb
24
+ - lib/x_tensions/string.rb
25
+ homepage: http://rubygems.org/gems/x_tensions
26
+ licenses:
27
+ - MIT
28
+ metadata: {}
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ required_rubygems_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ requirements: []
44
+ rubyforge_project:
45
+ rubygems_version: 2.4.4
46
+ signing_key:
47
+ specification_version: 4
48
+ summary: Just a few useful extensions!
49
+ test_files: []
50
+ has_rdoc: yard