finishing_moves 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/lib/finishing_moves/string.rb +40 -32
- data/lib/finishing_moves/version.rb +1 -1
- data/spec/string_spec.rb +6 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 69a404faf013aed724182275a9161c727b342964
|
4
|
+
data.tar.gz: 5aa8ac458731e843686630cb0c17684f3057a03c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8efc6183a72dfa6d7608442151d9e47a933e986dae04f069a48783cedc3319868dc74bb664182b122813dc8415d917830723bea57cdbaca0935595d376e7995
|
7
|
+
data.tar.gz: 164284b79295232351b67a00abb58afb106050bbe9f5b8ef69fe737a017c828838d613230a66d8f6ded2230ff32623c6c32087c90a394d0406713af82e281d1d
|
data/README.md
CHANGED
@@ -49,6 +49,7 @@ Tested against **`2.0.0` and above**. Probably works in `1.9.3`.
|
|
49
49
|
- [`Object#is_an?`](https://github.com/forgecrafted/finishing_moves/wiki/Object#objectis_an)
|
50
50
|
- [`String#dedupe`](https://github.com/forgecrafted/finishing_moves/wiki/String#stringdedupe)
|
51
51
|
- [`String#keyify`](https://github.com/forgecrafted/finishing_moves/wiki/String#stringkeyify)
|
52
|
+
- [`String#slugify`](https://github.com/forgecrafted/finishing_moves/wiki/String#stringslugify) *<-- new in 0.6.0!*
|
52
53
|
- [`String#match?`](https://github.com/forgecrafted/finishing_moves/wiki/String#stringmatch)
|
53
54
|
- [`String#nl2br`](https://github.com/forgecrafted/finishing_moves/wiki/String#stringnl2br)
|
54
55
|
- [`String#remove_whitespace`](https://github.com/forgecrafted/finishing_moves/wiki/String#stringremove_whitespace)
|
@@ -5,46 +5,23 @@ class String
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def keyify
|
8
|
-
|
9
|
-
the_key = self.clone
|
10
|
-
|
11
|
-
# strip all non-alphanumerics
|
12
|
-
the_key.gsub!(/[^0-9a-z]+/i, '_')
|
13
|
-
|
14
|
-
# borrowing some logic from Rails method underscore
|
15
|
-
# http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-underscore
|
16
|
-
if the_key =~ /[A-Z-]|::/
|
17
|
-
the_key.gsub!(/::/, '_')
|
18
|
-
the_key.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
|
19
|
-
the_key.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
20
|
-
end
|
21
|
-
|
22
|
-
# Strip any leading numbers and underscores
|
23
|
-
the_key.lstrip_all!('0-9_')
|
24
|
-
# Strip trailing underscores
|
25
|
-
the_key.rstrip_all!('_')
|
26
|
-
# Combine multiple concurrent underscores
|
27
|
-
the_key.dedupe!('_')
|
28
|
-
# lowercase
|
29
|
-
the_key.downcase!
|
30
|
-
next the_key
|
31
|
-
end
|
32
|
-
return nil if result.nil? || result == ''
|
33
|
-
result.to_sym
|
8
|
+
_prep_key_or_slug(true)
|
34
9
|
end
|
35
10
|
|
36
11
|
def keyify!
|
37
|
-
result =
|
12
|
+
result = _prep_key_or_slug(true)
|
38
13
|
raise ArgumentError, "#{self.inspect} cannot be keyified, no valid characters" if result.nil?
|
39
14
|
result
|
40
15
|
end
|
41
16
|
|
42
17
|
def slugify
|
43
|
-
|
18
|
+
_prep_key_or_slug(false)
|
44
19
|
end
|
45
20
|
|
46
21
|
def slugify!
|
47
|
-
|
22
|
+
result = _prep_key_or_slug(false)
|
23
|
+
raise ArgumentError, "#{self.inspect} cannot be slugified, no valid characters" if result.nil?
|
24
|
+
result
|
48
25
|
end
|
49
26
|
|
50
27
|
def strip_all(chars = nil)
|
@@ -122,9 +99,40 @@ class String
|
|
122
99
|
expr << ' '
|
123
100
|
end
|
124
101
|
|
125
|
-
def
|
126
|
-
|
127
|
-
|
102
|
+
def _prep_key_or_slug(keyified = true)
|
103
|
+
result = nil_chain do
|
104
|
+
the_key = self.clone
|
105
|
+
|
106
|
+
# strip all non-alphanumerics
|
107
|
+
the_key.gsub!(/[^0-9a-z]+/i, '_')
|
108
|
+
|
109
|
+
# borrowing some logic from Rails method underscore
|
110
|
+
# http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-underscore
|
111
|
+
if the_key =~ /[A-Z-]|::/
|
112
|
+
the_key.gsub!(/::/, '_')
|
113
|
+
the_key.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
|
114
|
+
the_key.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
115
|
+
end
|
116
|
+
|
117
|
+
# Strip any leading numbers (keyify only)
|
118
|
+
the_key.lstrip_all!('0-9') if keyified
|
119
|
+
# Strip any leading or trailing underscores
|
120
|
+
the_key.strip_all!('_')
|
121
|
+
# Combine multiple concurrent underscores
|
122
|
+
the_key.dedupe!('_')
|
123
|
+
# lowercase
|
124
|
+
the_key.downcase!
|
125
|
+
# replace underscore with dashes (slugify only)
|
126
|
+
the_key.gsub!('_', '-') unless keyified
|
127
|
+
next the_key
|
128
|
+
end
|
129
|
+
case
|
130
|
+
when result.nil? || result == ''
|
131
|
+
nil
|
132
|
+
when keyified
|
133
|
+
result.to_sym
|
134
|
+
else result
|
135
|
+
end
|
128
136
|
end
|
129
137
|
|
130
138
|
end
|
data/spec/string_spec.rb
CHANGED
@@ -162,10 +162,8 @@ describe String do
|
|
162
162
|
expect(:FooBarBaz.slugify).to eq 'foo-bar-baz'
|
163
163
|
expect("Foo-Bar'Baz".slugify).to eq 'foo-bar-baz'
|
164
164
|
expect('(Foo*&Bar!Baz?'.slugify).to eq 'foo-bar-baz'
|
165
|
-
expect('1234FooBAR'.slugify).to eq 'foo-bar'
|
166
165
|
expect('!@#$Foo0987'.slugify).to eq 'foo0987'
|
167
166
|
expect('!@#$%^'.slugify).to eq nil
|
168
|
-
expect('12345678'.slugify).to eq nil
|
169
167
|
expect("Bill O'Shea".slugify).to eq 'bill-o-shea'
|
170
168
|
expect("Bill O Shea".slugify).to eq 'bill-o-shea'
|
171
169
|
expect("Bill O Shea".slugify).to eq 'bill-o-shea'
|
@@ -174,11 +172,16 @@ describe String do
|
|
174
172
|
str = 'FooBarBaz'
|
175
173
|
expect(str.slugify).to eq 'foo-bar-baz'
|
176
174
|
expect(str).to eq 'FooBarBaz'
|
175
|
+
|
176
|
+
# we permit leading numbers, unlike keyify
|
177
|
+
expect('!1234FooBAR'.slugify).to eq '1234-foo-bar'
|
178
|
+
expect('1234FooBAR'.slugify).to eq '1234-foo-bar'
|
179
|
+
expect('12345678'.slugify).to eq '12345678'
|
177
180
|
end
|
178
181
|
|
179
182
|
it '#slugify!' do
|
180
183
|
expect{ '!@#$%^'.slugify! }.to raise_error(ArgumentError)
|
181
|
-
expect{ '12345678'.slugify! }.
|
184
|
+
expect{ '12345678'.slugify! }.not_to raise_error
|
182
185
|
end
|
183
186
|
|
184
187
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: finishing_moves
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Frank Koehl
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-06-
|
12
|
+
date: 2015-06-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rb-readline
|