x_tensions 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/x_tensions.rb +5 -0
- data/lib/x_tensions/array.rb +14 -0
- data/lib/x_tensions/hash.rb +47 -0
- data/lib/x_tensions/number.rb +8 -0
- data/lib/x_tensions/object.rb +32 -0
- data/lib/x_tensions/string.rb +49 -0
- metadata +50 -0
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,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,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
|