duffy 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/duffy/git.rb +23 -0
- data/lib/duffy/string.rb +133 -0
- data/lib/duffy/version.rb +1 -1
- data/lib/duffy.rb +3 -29
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e4de5df8e2616ebcf7cb6c6152a1786f5871124
|
4
|
+
data.tar.gz: ef2bbf68bdd6ae2d1d118d7404d246d82e740acd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a95acc1e49a85e7d08a33c62fcb8f49728d8a217877ce080c01b7cc56072c3bb0a26acd9d2e92bdc0c432ca2a17baf85767003302de7a29b0c521b27e85b61d
|
7
|
+
data.tar.gz: e16065af26004a1c8dc1f1aeddd1c288b2fd92538ce00819b2937923d0fcf0aa8f4c7a90cda415018eadad6f128875d889114cfc7cfe1f20d4ae5678cb7b1772
|
data/lib/duffy/git.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Duffy
|
2
|
+
|
3
|
+
# I like to have a git log in the admin section of my websites. I use these in my capistrano tasks to
|
4
|
+
# generate what I need and upload along with the deployment.
|
5
|
+
|
6
|
+
class Git
|
7
|
+
class << self
|
8
|
+
|
9
|
+
# Produce tab separated listing of current git log.
|
10
|
+
# Useful for displaying a development history page.
|
11
|
+
def log
|
12
|
+
`git log --pretty=format:"%ad%x09%an%x09%s" --date=short`
|
13
|
+
end
|
14
|
+
|
15
|
+
# I tend use the commit count / 1000.0 as a version for my applications.
|
16
|
+
# You wouldn't want to do that if you're building a gem used by others.
|
17
|
+
def count
|
18
|
+
`git rev-list HEAD --count`
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/duffy/string.rb
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
# Monkey Patch String adding useful methods.
|
2
|
+
class String
|
3
|
+
|
4
|
+
def to_ssn
|
5
|
+
ssn = self.to_s.gsub(/[^0-9]/, "") # now it's a string with only 0-9
|
6
|
+
ssn = "%09d" % ssn # now it has leading zeros
|
7
|
+
ssn[0..2] + "-" + ssn[3..4] + "-" + ssn[5..8] # now it's like 123-45-6789
|
8
|
+
end
|
9
|
+
|
10
|
+
# Sanitize SSN.
|
11
|
+
#
|
12
|
+
# "123456789" => "123456789" # Good
|
13
|
+
# "123-45-6789" => "123456789" # Good
|
14
|
+
# "000-12-3456" => nil # Invalid Area
|
15
|
+
# "666123456" => nil # Invalid Area
|
16
|
+
# "derp" => nil # Bogus
|
17
|
+
# "123456" => nil # Too short ( becomes 000123456: Invalid Area )
|
18
|
+
# "999999999" => nil # Important. Many HRS entries
|
19
|
+
# "-" => nil # Important. Many HRS entries
|
20
|
+
#
|
21
|
+
# http://www.ssa.gov/history/ssn/geocard.html
|
22
|
+
# http://en.wikipedia.org/wiki/Social_Security_number
|
23
|
+
# area: 001 to 665, 667 to 899
|
24
|
+
# group: 01 to 99.
|
25
|
+
# serial: 0001 to 9999
|
26
|
+
def sanitize_ssn
|
27
|
+
begin
|
28
|
+
ssn = "%09d" % self.to_numeric
|
29
|
+
raise "Too Long" if ssn.length > 9
|
30
|
+
area, group, serial = ssn[0..2], ssn[3..4], ssn[5..8]
|
31
|
+
raise "Area Range Invalid" unless ("001" .. "665").cover?(area) or ("667" .. "899").cover?(area)
|
32
|
+
raise "Group Range Invalid" unless ("01" .. "99").cover?(group)
|
33
|
+
raise "Serial Range Invalid" unless ("0001" .. "9999").cover?(serial)
|
34
|
+
rescue
|
35
|
+
return nil
|
36
|
+
end
|
37
|
+
ssn
|
38
|
+
end
|
39
|
+
|
40
|
+
def to_numeric
|
41
|
+
self.to_s.gsub(/[^0-9]/, "") # now it's a string with only 0-9
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_alpha
|
45
|
+
self.to_s.gsub(/[^a-zA-Z ]/, "").strip # string with only a-z or A-Z or space, leading+trailing whitespace removed
|
46
|
+
end
|
47
|
+
|
48
|
+
def to_alpha_numeric
|
49
|
+
self.to_s.gsub(/[^0-9a-zA-Z ]/, "").strip # string with only a-z or A-Z or space, leading+trailing whitespace removed
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
def pretty_phone
|
54
|
+
number = self.to_s.gsub(/[^0-9\+]/, "")
|
55
|
+
return "(" + number[0..2] + ") " + number[3..5] + "-" + number[6..9] if number.length == 10
|
56
|
+
number
|
57
|
+
end
|
58
|
+
|
59
|
+
# Parse a git username into a friendly name
|
60
|
+
def pretty_committer
|
61
|
+
case self
|
62
|
+
when /jpd/ then "Jacob"
|
63
|
+
when /ers|Eric/ then "Eric"
|
64
|
+
when /gac/ then "Glenn"
|
65
|
+
when /jes/ then "Samsky"
|
66
|
+
else self
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def space2nbsp
|
71
|
+
# turns double space to double nbsp
|
72
|
+
(self.nil?)? "" : self.to_s.gsub(/ {2}/, " ").html_safe
|
73
|
+
end
|
74
|
+
|
75
|
+
def nl2br
|
76
|
+
(self.nil?)? "" : self.to_s.gsub(/(\r)?\n/, "<br />").html_safe
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
def gender_human
|
81
|
+
case (self.to_s.upcase)
|
82
|
+
when "M" then "Male"
|
83
|
+
when "F" then "Female"
|
84
|
+
when "O" then "Other"
|
85
|
+
else ""
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
# Smarter Titlecase function.
|
91
|
+
# Examples:
|
92
|
+
# "foo" => "Foo"
|
93
|
+
# "IMPORTANT STUFF" => "Important Stuff"
|
94
|
+
# "123 main st." => "123 Main St."
|
95
|
+
# "a tale of two cities" => "A Tale of Two Cities"
|
96
|
+
def smart_titlecase
|
97
|
+
small_re = %w( is a an and as at but by en for if in of on or the to v[.]? via vs[.]? ).join('|')
|
98
|
+
|
99
|
+
# Original Perl version by: John Gruber (daringfireball.net) 2008-05-10
|
100
|
+
# Adapted to Ruby by: Marshall Elfstrand (vengefulcow.com/ 2008-05-21
|
101
|
+
# Improved and customized: Jacob Duffy (duffy.jp) 2011-01-25
|
102
|
+
# License: http://www.opensource.org/licenses/mit-license.php
|
103
|
+
|
104
|
+
# if source is all uppercase, use all lowercase instead. -- jpd
|
105
|
+
string = (self.upcase == self)? self.downcase : self
|
106
|
+
|
107
|
+
result = ""
|
108
|
+
string.gsub(/[_-]/, ' ').split(/( [:.;?!][ ] | (?:[ ]|^)[""] )/x).each do |s|
|
109
|
+
s.gsub!(/ \b( [[:alpha:]] [[:lower:].'']* )\b /x) do |w|
|
110
|
+
# Skip words with inresult dots, e.g. "del.icio.us" or "example.com"
|
111
|
+
(w =~ / [[:alpha:]] [.] [[:alpha:]] /x) ? w : w.capitalize
|
112
|
+
end #gsub!
|
113
|
+
|
114
|
+
# Lowercase our list of small words:
|
115
|
+
s.gsub!(/\b(#{small_re})\b/io) { |w| w.downcase }
|
116
|
+
|
117
|
+
# If the first word in the title is a small word, then capitalize it:
|
118
|
+
s.gsub!(/\A([[:punct:]]*)(#{small_re})\b/io) { |w| $1 + $2.capitalize }
|
119
|
+
|
120
|
+
# If the last word in the title is a small word, then capitalize it:
|
121
|
+
s.gsub!(/\b(#{small_re})([[:punct:]]*)\Z/io) { |w| $1.capitalize + $2 }
|
122
|
+
|
123
|
+
# Append current substring to output
|
124
|
+
result += s
|
125
|
+
end #each
|
126
|
+
|
127
|
+
# Special Cases:
|
128
|
+
result.gsub!(/ V(s?)\. /, ' v\1. ') # "v." and "vs."
|
129
|
+
result.gsub!(/([''])S\b/, '\1s') # 'S (otherwise you get "the SEC'S decision")
|
130
|
+
result.gsub!(/\b(AOB|AT&T|Q&A|II|III|IV|HR|CT|CHS|CME|HRS|PA|UDDS|USA|UWMF|WREN)\b/i) { |w| w.upcase } # "AT&T" and "Q&A", which get tripped up by
|
131
|
+
result
|
132
|
+
end
|
133
|
+
end
|
data/lib/duffy/version.rb
CHANGED
data/lib/duffy.rb
CHANGED
@@ -1,29 +1,3 @@
|
|
1
|
-
require "duffy/version"
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
# I like to have a git log in the admin section of my websites. I use these in my capistrano tasks to
|
7
|
-
# generate what I need and upload along with the deployment.
|
8
|
-
|
9
|
-
class Git
|
10
|
-
class << self
|
11
|
-
|
12
|
-
# Produce tab separated listing of current git log.
|
13
|
-
# Useful for displaying a development history page.
|
14
|
-
def log
|
15
|
-
`git log --pretty=format:"%ad%x09%an%x09%s" --date=short`
|
16
|
-
end
|
17
|
-
|
18
|
-
# I tend use the commit count / 1000.0 as a version for my applications.
|
19
|
-
# You wouldn't want to do that if you're building a gem used by others.
|
20
|
-
def count
|
21
|
-
`git rev-list HEAD --count`
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
1
|
+
require File.dirname(__FILE__) + "/duffy/version"
|
2
|
+
require File.dirname(__FILE__) + "/duffy/git"
|
3
|
+
require File.dirname(__FILE__) + "/duffy/string"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: duffy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jacob Duffy
|
@@ -52,6 +52,8 @@ files:
|
|
52
52
|
- Rakefile
|
53
53
|
- duffy.gemspec
|
54
54
|
- lib/duffy.rb
|
55
|
+
- lib/duffy/git.rb
|
56
|
+
- lib/duffy/string.rb
|
55
57
|
- lib/duffy/version.rb
|
56
58
|
homepage: https://github.com/duffyjp/duffy
|
57
59
|
licenses:
|