duffy 0.0.3 → 0.0.4
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 +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:
|