mack_ruby_core_extensions 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.
Files changed (75) hide show
  1. data/README +3 -0
  2. data/doc/classes/Array.html +465 -0
  3. data/doc/classes/Class.html +181 -0
  4. data/doc/classes/Dir.html +190 -0
  5. data/doc/classes/Float.html +148 -0
  6. data/doc/classes/Hash.html +232 -0
  7. data/doc/classes/Kernel.html +182 -0
  8. data/doc/classes/Mack.html +111 -0
  9. data/doc/classes/Mack/Utils.html +111 -0
  10. data/doc/classes/Mack/Utils/Inflector.html +422 -0
  11. data/doc/classes/Math.html +188 -0
  12. data/doc/classes/MethodNotImplemented.html +155 -0
  13. data/doc/classes/Module.html +203 -0
  14. data/doc/classes/NilClass.html +151 -0
  15. data/doc/classes/Object.html +315 -0
  16. data/doc/classes/String.html +890 -0
  17. data/doc/classes/Symbol.html +148 -0
  18. data/doc/created.rid +1 -0
  19. data/doc/files/README.html +111 -0
  20. data/doc/files/lib/extensions/array_rb.html +101 -0
  21. data/doc/files/lib/extensions/class_rb.html +101 -0
  22. data/doc/files/lib/extensions/dir_rb.html +101 -0
  23. data/doc/files/lib/extensions/float_rb.html +101 -0
  24. data/doc/files/lib/extensions/hash_rb.html +101 -0
  25. data/doc/files/lib/extensions/kernel_rb.html +109 -0
  26. data/doc/files/lib/extensions/logger_rb.html +101 -0
  27. data/doc/files/lib/extensions/math_rb.html +101 -0
  28. data/doc/files/lib/extensions/method_not_implemented_rb.html +108 -0
  29. data/doc/files/lib/extensions/module_rb.html +101 -0
  30. data/doc/files/lib/extensions/nil_rb.html +101 -0
  31. data/doc/files/lib/extensions/object_rb.html +101 -0
  32. data/doc/files/lib/extensions/string_rb.html +108 -0
  33. data/doc/files/lib/extensions/symbol_rb.html +101 -0
  34. data/doc/files/lib/mack_ruby_core_extensions_rb.html +101 -0
  35. data/doc/files/lib/utils/inflections_rb.html +101 -0
  36. data/doc/files/lib/utils/inflector_rb.html +108 -0
  37. data/doc/fr_class_index.html +42 -0
  38. data/doc/fr_file_index.html +44 -0
  39. data/doc/fr_method_index.html +92 -0
  40. data/doc/index.html +24 -0
  41. data/doc/rdoc-style.css +208 -0
  42. data/lib/extensions/array.rb +101 -0
  43. data/lib/extensions/class.rb +19 -0
  44. data/lib/extensions/dir.rb +25 -0
  45. data/lib/extensions/float.rb +5 -0
  46. data/lib/extensions/hash.rb +47 -0
  47. data/lib/extensions/kernel.rb +30 -0
  48. data/lib/extensions/logger.rb +0 -0
  49. data/lib/extensions/math.rb +15 -0
  50. data/lib/extensions/method_not_implemented.rb +12 -0
  51. data/lib/extensions/module.rb +29 -0
  52. data/lib/extensions/nil.rb +8 -0
  53. data/lib/extensions/object.rb +103 -0
  54. data/lib/extensions/string.rb +261 -0
  55. data/lib/extensions/symbol.rb +7 -0
  56. data/lib/mack_ruby_core_extensions.rb +7 -0
  57. data/lib/utils/inflections.rb +62 -0
  58. data/lib/utils/inflector.rb +129 -0
  59. data/test/extensions/array_test.rb +15 -0
  60. data/test/extensions/class_test.rb +28 -0
  61. data/test/extensions/dir_test.rb +15 -0
  62. data/test/extensions/float_test.rb +15 -0
  63. data/test/extensions/hash_test.rb +34 -0
  64. data/test/extensions/kernel_test.rb +15 -0
  65. data/test/extensions/logger_test.rb +15 -0
  66. data/test/extensions/math_test.rb +15 -0
  67. data/test/extensions/method_not_implemented_test.rb +15 -0
  68. data/test/extensions/module_test.rb +57 -0
  69. data/test/extensions/nil_test.rb +15 -0
  70. data/test/extensions/object_test.rb +15 -0
  71. data/test/extensions/string_test.rb +104 -0
  72. data/test/extensions/symbol_test.rb +15 -0
  73. data/test/test_helper.rb +6 -0
  74. data/test/utils/inflection_test.rb +32 -0
  75. metadata +133 -0
@@ -0,0 +1,890 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: String</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">String</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../files/lib/extensions/string_rb.html">
59
+ lib/extensions/string.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ <a href="Object.html">
69
+ Object
70
+ </a>
71
+ </td>
72
+ </tr>
73
+ </table>
74
+ </div>
75
+ <!-- banner header -->
76
+
77
+ <div id="bodyContent">
78
+
79
+
80
+
81
+ <div id="contextContent">
82
+
83
+
84
+
85
+ </div>
86
+
87
+ <div id="method-list">
88
+ <h3 class="section-bar">Methods</h3>
89
+
90
+ <div class="name-list">
91
+ <a href="#M000033">blank?</a>&nbsp;&nbsp;
92
+ <a href="#M000044">breakify</a>&nbsp;&nbsp;
93
+ <a href="#M000045">breakify!</a>&nbsp;&nbsp;
94
+ <a href="#M000031">camelcase</a>&nbsp;&nbsp;
95
+ <a href="#M000051">capitalize_all_words</a>&nbsp;&nbsp;
96
+ <a href="#M000052">capitalize_all_words!</a>&nbsp;&nbsp;
97
+ <a href="#M000032">constantize</a>&nbsp;&nbsp;
98
+ <a href="#M000040">ends_with?</a>&nbsp;&nbsp;
99
+ <a href="#M000046">hexdigest</a>&nbsp;&nbsp;
100
+ <a href="#M000047">hexdigest!</a>&nbsp;&nbsp;
101
+ <a href="#M000036">linkify</a>&nbsp;&nbsp;
102
+ <a href="#M000037">methodize</a>&nbsp;&nbsp;
103
+ <a href="#M000034">plural</a>&nbsp;&nbsp;
104
+ <a href="#M000041">pluralize_word</a>&nbsp;&nbsp;
105
+ <a href="#M000048">randomize</a>&nbsp;&nbsp;
106
+ <a href="#M000042">remove</a>&nbsp;&nbsp;
107
+ <a href="#M000043">remove!</a>&nbsp;&nbsp;
108
+ <a href="#M000035">singular</a>&nbsp;&nbsp;
109
+ <a href="#M000053">sql_safe_str</a>&nbsp;&nbsp;
110
+ <a href="#M000054">sql_safe_str!</a>&nbsp;&nbsp;
111
+ <a href="#M000039">starts_with?</a>&nbsp;&nbsp;
112
+ <a href="#M000049">truncate</a>&nbsp;&nbsp;
113
+ <a href="#M000050">truncate!</a>&nbsp;&nbsp;
114
+ <a href="#M000038">underscore</a>&nbsp;&nbsp;
115
+ </div>
116
+ </div>
117
+
118
+ </div>
119
+
120
+
121
+ <!-- if includes -->
122
+
123
+ <div id="section">
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+ <!-- if method_list -->
133
+ <div id="methods">
134
+ <h3 class="section-bar">Public Class methods</h3>
135
+
136
+ <div id="method-M000041" class="method-detail">
137
+ <a name="M000041"></a>
138
+
139
+ <div class="method-heading">
140
+ <a href="#M000041" class="method-signature">
141
+ <span class="method-name">pluralize_word</span><span class="method-args">(num, vals = [&quot;is&quot;, &quot;are&quot;])</span>
142
+ </a>
143
+ </div>
144
+
145
+ <div class="method-description">
146
+ <p>
147
+ Returns &quot;is&quot; or &quot;are&quot; based on the number, i.e.
148
+ &quot;i=6; There #{isare(i)} #{i} topics here.&quot;
149
+ </p>
150
+ <p><a class="source-toggle" href="#"
151
+ onclick="toggleCode('M000041-source');return false;">[Source]</a></p>
152
+ <div class="method-source-code" id="M000041-source">
153
+ <pre>
154
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 165</span>
155
+ 165: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">pluralize_word</span>(<span class="ruby-identifier">num</span>, <span class="ruby-identifier">vals</span> = [<span class="ruby-value str">&quot;is&quot;</span>, <span class="ruby-value str">&quot;are&quot;</span>])
156
+ 166: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">vals</span>[<span class="ruby-value">0</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">num</span>.<span class="ruby-identifier">to_i</span><span class="ruby-operator">==</span><span class="ruby-value">1</span>
157
+ 167: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">vals</span>[<span class="ruby-value">1</span>]
158
+ 168: <span class="ruby-keyword kw">end</span>
159
+ </pre>
160
+ </div>
161
+ </div>
162
+ </div>
163
+
164
+ <div id="method-M000048" class="method-detail">
165
+ <a name="M000048"></a>
166
+
167
+ <div class="method-heading">
168
+ <a href="#M000048" class="method-signature">
169
+ <span class="method-name">randomize</span><span class="method-args">(length = 10)</span>
170
+ </a>
171
+ </div>
172
+
173
+ <div class="method-description">
174
+ <p><a class="source-toggle" href="#"
175
+ onclick="toggleCode('M000048-source');return false;">[Source]</a></p>
176
+ <div class="method-source-code" id="M000048-source">
177
+ <pre>
178
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 219</span>
179
+ 219: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">randomize</span>(<span class="ruby-identifier">length</span> = <span class="ruby-value">10</span>)
180
+ 220: <span class="ruby-identifier">chars</span> = (<span class="ruby-value str">&quot;A&quot;</span><span class="ruby-operator">..</span><span class="ruby-value str">&quot;H&quot;</span>).<span class="ruby-identifier">to_a</span> <span class="ruby-operator">+</span> (<span class="ruby-value str">&quot;J&quot;</span><span class="ruby-operator">..</span><span class="ruby-value str">&quot;N&quot;</span>).<span class="ruby-identifier">to_a</span> <span class="ruby-operator">+</span> (<span class="ruby-value str">&quot;P&quot;</span><span class="ruby-operator">..</span><span class="ruby-value str">&quot;T&quot;</span>).<span class="ruby-identifier">to_a</span> <span class="ruby-operator">+</span> (<span class="ruby-value str">&quot;W&quot;</span><span class="ruby-operator">..</span><span class="ruby-value str">&quot;Z&quot;</span>).<span class="ruby-identifier">to_a</span> <span class="ruby-operator">+</span> (<span class="ruby-value str">&quot;3&quot;</span><span class="ruby-operator">..</span><span class="ruby-value str">&quot;9&quot;</span>).<span class="ruby-identifier">to_a</span>
181
+ 221: <span class="ruby-identifier">newpass</span> = <span class="ruby-value str">&quot;&quot;</span>
182
+ 222: <span class="ruby-value">1</span>.<span class="ruby-identifier">upto</span>(<span class="ruby-identifier">length</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span> <span class="ruby-identifier">newpass</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">chars</span>[<span class="ruby-identifier">rand</span>(<span class="ruby-identifier">chars</span>.<span class="ruby-identifier">size</span><span class="ruby-operator">-</span><span class="ruby-value">1</span>)] }
183
+ 223: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">newpass</span>.<span class="ruby-identifier">upcase</span>
184
+ 224: <span class="ruby-keyword kw">end</span>
185
+ </pre>
186
+ </div>
187
+ </div>
188
+ </div>
189
+
190
+ <h3 class="section-bar">Public Instance methods</h3>
191
+
192
+ <div id="method-M000033" class="method-detail">
193
+ <a name="M000033"></a>
194
+
195
+ <div class="method-heading">
196
+ <a href="#M000033" class="method-signature">
197
+ <span class="method-name">blank?</span><span class="method-args">()</span>
198
+ </a>
199
+ </div>
200
+
201
+ <div class="method-description">
202
+ <p>
203
+ If the string is empty, this will return true.
204
+ </p>
205
+ <p><a class="source-toggle" href="#"
206
+ onclick="toggleCode('M000033-source');return false;">[Source]</a></p>
207
+ <div class="method-source-code" id="M000033-source">
208
+ <pre>
209
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 25</span>
210
+ 25: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">blank?</span>
211
+ 26: <span class="ruby-keyword kw">self</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;&quot;</span>
212
+ 27: <span class="ruby-keyword kw">end</span>
213
+ </pre>
214
+ </div>
215
+ </div>
216
+ </div>
217
+
218
+ <div id="method-M000044" class="method-detail">
219
+ <a name="M000044"></a>
220
+
221
+ <div class="method-heading">
222
+ <a href="#M000044" class="method-signature">
223
+ <span class="method-name">breakify</span><span class="method-args">(every = 30)</span>
224
+ </a>
225
+ </div>
226
+
227
+ <div class="method-description">
228
+ <p>
229
+ makes long strings of unbroken characters wrap inside elements (hopefully!
230
+ tested in Safari, Firefox, and IE for Windows) For documentation about this
231
+ kind of workaround to this browser compatibility problem please see the
232
+ following URL&#8216;s: <a
233
+ href="http://www.quirksmode.org/oddsandends/wbr.html">www.quirksmode.org/oddsandends/wbr.html</a>
234
+ <a
235
+ href="http://krijnhoetmer.nl/stuff/css/word-wrap-break-word">krijnhoetmer.nl/stuff/css/word-wrap-break-word</a>/
236
+ note: if the txt has spaces, this will only try to break up runs of
237
+ non-space characters longer than &quot;every&quot; characters
238
+ </p>
239
+ <p><a class="source-toggle" href="#"
240
+ onclick="toggleCode('M000044-source');return false;">[Source]</a></p>
241
+ <div class="method-source-code" id="M000044-source">
242
+ <pre>
243
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 183</span>
244
+ 183: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">breakify</span>(<span class="ruby-identifier">every</span> = <span class="ruby-value">30</span>)
245
+ 184: <span class="ruby-identifier">every</span> = <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">every</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">1</span>
246
+ 185: <span class="ruby-identifier">text</span> = <span class="ruby-keyword kw">self</span>
247
+ 186: <span class="ruby-identifier">textile_regex</span> = <span class="ruby-regexp re">/\&quot;([^\&quot;]+)\&quot;:([^:]*:[\/\/]{0,1}[^ ]*)/</span>
248
+ 187: <span class="ruby-identifier">long_regex</span> = <span class="ruby-node">/\S{#{every},}/</span>
249
+ 188: <span class="ruby-identifier">brokentxt</span> = <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-identifier">long_regex</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">longword</span><span class="ruby-operator">|</span>
250
+ 189: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">longword</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">textile_regex</span> <span class="ruby-comment cmt">#if the longword is a textile link...ignore and recheck for the link text only</span>
251
+ 190: <span class="ruby-identifier">textile_link</span> = <span class="ruby-identifier">textile_regex</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">longword</span>)[<span class="ruby-value">0</span>]
252
+ 191: <span class="ruby-identifier">link_text</span> = <span class="ruby-identifier">textile_regex</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">longword</span>)[<span class="ruby-value">1</span>]
253
+ 192: <span class="ruby-identifier">longword</span> = <span class="ruby-identifier">link_text</span>
254
+ 193: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">longword</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">long_regex</span> <span class="ruby-comment cmt">#link text is long...allow break</span>
255
+ 194: <span class="ruby-identifier">textile_link</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-node">/.{1,#{every}}/</span>).<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;&lt;wbr/&gt;&quot;</span>)
256
+ 195: <span class="ruby-keyword kw">else</span>
257
+ 196: <span class="ruby-identifier">textile_link</span> <span class="ruby-comment cmt">#the url is what triggered the match...so leave it alone</span>
258
+ 197: <span class="ruby-keyword kw">end</span>
259
+ 198: <span class="ruby-keyword kw">else</span>
260
+ 199: <span class="ruby-identifier">longword</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-node">/.{1,#{every}}/</span>).<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;&lt;wbr/&gt;&quot;</span>) <span class="ruby-comment cmt">#no textile link matched</span>
261
+ 200: <span class="ruby-keyword kw">end</span>
262
+ 201: <span class="ruby-keyword kw">end</span>
263
+ 202: <span class="ruby-comment cmt">#text = %Q[&lt;span style='word-wrap:break-word;wbr:after{content:&quot;\\00200B&quot;}'&gt;#{brokentxt}&lt;/span&gt;]</span>
264
+ 203: <span class="ruby-comment cmt">#brokentxt.gsub(&quot;&lt;wbr/&gt;&quot;, &quot;&lt;br /&gt;&quot;)</span>
265
+ 204: <span class="ruby-identifier">brokentxt</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">&quot;&lt;wbr/&gt;&quot;</span>, <span class="ruby-value str">&quot; &quot;</span>)
266
+ 205: <span class="ruby-keyword kw">end</span>
267
+ </pre>
268
+ </div>
269
+ </div>
270
+ </div>
271
+
272
+ <div id="method-M000045" class="method-detail">
273
+ <a name="M000045"></a>
274
+
275
+ <div class="method-heading">
276
+ <a href="#M000045" class="method-signature">
277
+ <span class="method-name">breakify!</span><span class="method-args">(every = 30)</span>
278
+ </a>
279
+ </div>
280
+
281
+ <div class="method-description">
282
+ <p><a class="source-toggle" href="#"
283
+ onclick="toggleCode('M000045-source');return false;">[Source]</a></p>
284
+ <div class="method-source-code" id="M000045-source">
285
+ <pre>
286
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 207</span>
287
+ 207: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">breakify!</span>(<span class="ruby-identifier">every</span> = <span class="ruby-value">30</span>)
288
+ 208: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">replace</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">breakify</span>(<span class="ruby-identifier">every</span>))
289
+ 209: <span class="ruby-keyword kw">end</span>
290
+ </pre>
291
+ </div>
292
+ </div>
293
+ </div>
294
+
295
+ <div id="method-M000031" class="method-detail">
296
+ <a name="M000031"></a>
297
+
298
+ <div class="method-heading">
299
+ <a href="#M000031" class="method-signature">
300
+ <span class="method-name">camelcase</span><span class="method-args">()</span>
301
+ </a>
302
+ </div>
303
+
304
+ <div class="method-description">
305
+ <p>
306
+ Camel cases the string.
307
+ </p>
308
+ <p>
309
+ Examples:
310
+ </p>
311
+ <pre>
312
+ &quot;user&quot;.camelcase # =&gt; User
313
+ &quot;my_blog&quot;.camelcase # =&gt; MyBlog
314
+ &quot;my/blog&quot;.camelcase # =&gt; My::Blog
315
+ </pre>
316
+ <p><a class="source-toggle" href="#"
317
+ onclick="toggleCode('M000031-source');return false;">[Source]</a></p>
318
+ <div class="method-source-code" id="M000031-source">
319
+ <pre>
320
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 10</span>
321
+ 10: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">camelcase</span>
322
+ 11: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/\/(.?)/</span>) { <span class="ruby-value str">&quot;::&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">$1</span>.<span class="ruby-identifier">upcase</span> }.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/(^|_)(.)/</span>) { <span class="ruby-identifier">$2</span>.<span class="ruby-identifier">upcase</span> }
323
+ 12: <span class="ruby-keyword kw">end</span>
324
+ </pre>
325
+ </div>
326
+ </div>
327
+ </div>
328
+
329
+ <div id="method-M000051" class="method-detail">
330
+ <a name="M000051"></a>
331
+
332
+ <div class="method-heading">
333
+ <a href="#M000051" class="method-signature">
334
+ <span class="method-name">capitalize_all_words</span><span class="method-args">()</span>
335
+ </a>
336
+ </div>
337
+
338
+ <div class="method-description">
339
+ <p><a class="source-toggle" href="#"
340
+ onclick="toggleCode('M000051-source');return false;">[Source]</a></p>
341
+ <div class="method-source-code" id="M000051-source">
342
+ <pre>
343
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 241</span>
344
+ 241: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">capitalize_all_words</span>
345
+ 242: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/\b\w/</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">upcase</span>}
346
+ 243: <span class="ruby-keyword kw">end</span>
347
+ </pre>
348
+ </div>
349
+ </div>
350
+ </div>
351
+
352
+ <div id="method-M000052" class="method-detail">
353
+ <a name="M000052"></a>
354
+
355
+ <div class="method-heading">
356
+ <a href="#M000052" class="method-signature">
357
+ <span class="method-name">capitalize_all_words!</span><span class="method-args">()</span>
358
+ </a>
359
+ </div>
360
+
361
+ <div class="method-description">
362
+ <p><a class="source-toggle" href="#"
363
+ onclick="toggleCode('M000052-source');return false;">[Source]</a></p>
364
+ <div class="method-source-code" id="M000052-source">
365
+ <pre>
366
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 245</span>
367
+ 245: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">capitalize_all_words!</span>
368
+ 246: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">replace</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">capitalize_all_words</span>)
369
+ 247: <span class="ruby-keyword kw">end</span>
370
+ </pre>
371
+ </div>
372
+ </div>
373
+ </div>
374
+
375
+ <div id="method-M000032" class="method-detail">
376
+ <a name="M000032"></a>
377
+
378
+ <div class="method-heading">
379
+ <a href="#M000032" class="method-signature">
380
+ <span class="method-name">constantize</span><span class="method-args">()</span>
381
+ </a>
382
+ </div>
383
+
384
+ <div class="method-description">
385
+ <p>
386
+ Returns a constant of the string.
387
+ </p>
388
+ <p>
389
+ Examples:
390
+ </p>
391
+ <pre>
392
+ &quot;User&quot;.constantize # =&gt; User
393
+ &quot;HomeController&quot;.constantize # =&gt; HomeController
394
+ &quot;Mack::Configuration&quot; # =&gt; Mack::Configuration
395
+ </pre>
396
+ <p><a class="source-toggle" href="#"
397
+ onclick="toggleCode('M000032-source');return false;">[Source]</a></p>
398
+ <div class="method-source-code" id="M000032-source">
399
+ <pre>
400
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 20</span>
401
+ 20: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">constantize</span>
402
+ 21: <span class="ruby-constant">Module</span>.<span class="ruby-identifier">instance_eval</span>(<span class="ruby-node">&quot;::#{self}&quot;</span>)
403
+ 22: <span class="ruby-keyword kw">end</span>
404
+ </pre>
405
+ </div>
406
+ </div>
407
+ </div>
408
+
409
+ <div id="method-M000040" class="method-detail">
410
+ <a name="M000040"></a>
411
+
412
+ <div class="method-heading">
413
+ <a href="#M000040" class="method-signature">
414
+ <span class="method-name">ends_with?</span><span class="method-args">(x)</span>
415
+ </a>
416
+ </div>
417
+
418
+ <div class="method-description">
419
+ <p><a class="source-toggle" href="#"
420
+ onclick="toggleCode('M000040-source');return false;">[Source]</a></p>
421
+ <div class="method-source-code" id="M000040-source">
422
+ <pre>
423
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 160</span>
424
+ 160: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ends_with?</span>(<span class="ruby-identifier">x</span>)
425
+ 161: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">match</span>(<span class="ruby-node">/#{x}$/</span>) <span class="ruby-operator">?</span> <span class="ruby-keyword kw">true</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">false</span>
426
+ 162: <span class="ruby-keyword kw">end</span>
427
+ </pre>
428
+ </div>
429
+ </div>
430
+ </div>
431
+
432
+ <div id="method-M000046" class="method-detail">
433
+ <a name="M000046"></a>
434
+
435
+ <div class="method-heading">
436
+ <a href="#M000046" class="method-signature">
437
+ <span class="method-name">hexdigest</span><span class="method-args">()</span>
438
+ </a>
439
+ </div>
440
+
441
+ <div class="method-description">
442
+ <p><a class="source-toggle" href="#"
443
+ onclick="toggleCode('M000046-source');return false;">[Source]</a></p>
444
+ <div class="method-source-code" id="M000046-source">
445
+ <pre>
446
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 211</span>
447
+ 211: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">hexdigest</span>
448
+ 212: <span class="ruby-constant">Digest</span><span class="ruby-operator">::</span><span class="ruby-constant">SHA1</span>.<span class="ruby-identifier">hexdigest</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">downcase</span>)
449
+ 213: <span class="ruby-keyword kw">end</span>
450
+ </pre>
451
+ </div>
452
+ </div>
453
+ </div>
454
+
455
+ <div id="method-M000047" class="method-detail">
456
+ <a name="M000047"></a>
457
+
458
+ <div class="method-heading">
459
+ <a href="#M000047" class="method-signature">
460
+ <span class="method-name">hexdigest!</span><span class="method-args">()</span>
461
+ </a>
462
+ </div>
463
+
464
+ <div class="method-description">
465
+ <p><a class="source-toggle" href="#"
466
+ onclick="toggleCode('M000047-source');return false;">[Source]</a></p>
467
+ <div class="method-source-code" id="M000047-source">
468
+ <pre>
469
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 215</span>
470
+ 215: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">hexdigest!</span>
471
+ 216: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">replace</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">hexdigest</span>)
472
+ 217: <span class="ruby-keyword kw">end</span>
473
+ </pre>
474
+ </div>
475
+ </div>
476
+ </div>
477
+
478
+ <div id="method-M000036" class="method-detail">
479
+ <a name="M000036"></a>
480
+
481
+ <div class="method-heading">
482
+ <a href="#M000036" class="method-signature">
483
+ <span class="method-name">linkify</span><span class="method-args">(enabled = true, options = {}) {|t, url, options| ...}</span>
484
+ </a>
485
+ </div>
486
+
487
+ <div class="method-description">
488
+ <p><a class="source-toggle" href="#"
489
+ onclick="toggleCode('M000036-source');return false;">[Source]</a></p>
490
+ <div class="method-source-code" id="M000036-source">
491
+ <pre>
492
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 39</span>
493
+ 39: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">linkify</span>(<span class="ruby-identifier">enabled</span> = <span class="ruby-keyword kw">true</span>, <span class="ruby-identifier">options</span> = {}, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
494
+ 40: <span class="ruby-identifier">text</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">dup</span>
495
+ 41: <span class="ruby-identifier">m</span> = <span class="ruby-identifier">text</span>.<span class="ruby-identifier">match</span>(<span class="ruby-regexp re">/\&quot;([^&quot;]+)\&quot;\:([^:]+\:\S+)/</span>)
496
+ 42: <span class="ruby-keyword kw">until</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">nil?</span>
497
+ 43: <span class="ruby-identifier">y</span> = <span class="ruby-identifier">m</span>.<span class="ruby-identifier">to_s</span>
498
+ 44: <span class="ruby-identifier">t</span> = <span class="ruby-identifier">m</span>[<span class="ruby-value">1</span>]
499
+ 45: <span class="ruby-identifier">url</span> = <span class="ruby-identifier">m</span>[<span class="ruby-value">2</span>]
500
+ 46:
501
+ 47: <span class="ruby-comment cmt"># The code below handles punctuation or p tags being mistakenly added to the url when the link is at the end of a sentence or body</span>
502
+ 48: <span class="ruby-identifier">url_punct_match</span> = <span class="ruby-regexp re">/\W*[&amp;nbsp;]*[\&lt;\/p\&gt;]*$/</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">url</span>)
503
+ 49: <span class="ruby-identifier">punct</span> = <span class="ruby-value str">''</span>
504
+ 50: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">url_punct_match</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">url_punct_match</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">!=</span> <span class="ruby-value str">&quot;&quot;</span>
505
+ 51: <span class="ruby-identifier">url</span>.<span class="ruby-identifier">chomp!</span>(<span class="ruby-identifier">url_punct_match</span>[<span class="ruby-value">0</span>])
506
+ 52: <span class="ruby-identifier">punct</span> = <span class="ruby-identifier">url_punct_match</span>[<span class="ruby-value">0</span>] <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">url_punct_match</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;=&quot;</span>
507
+ 53: <span class="ruby-keyword kw">end</span>
508
+ 54:
509
+ 55: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
510
+ 56: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">enabled</span>
511
+ 57: <span class="ruby-identifier">ret</span> = <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">t</span>, <span class="ruby-identifier">url</span>, <span class="ruby-identifier">options</span>
512
+ 58: <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-identifier">y</span>, <span class="ruby-identifier">ret</span>)
513
+ 59: <span class="ruby-keyword kw">else</span>
514
+ 60: <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-identifier">y</span>, <span class="ruby-identifier">t</span>.<span class="ruby-identifier">to_s</span>)
515
+ 61: <span class="ruby-keyword kw">end</span>
516
+ 62: <span class="ruby-keyword kw">else</span>
517
+ 63: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">enabled</span>
518
+ 64: <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-identifier">y</span>, <span class="ruby-node">&quot;&lt;a href=\&quot;#{url}\&quot; #{options.join(&quot;%s=\&quot;%s\&quot;&quot;, &quot; &quot;)}&gt;#{t}&lt;/a&gt;#{punct}&quot;</span>)<span class="ruby-comment cmt"># punct places punctuation back into proper place</span>
519
+ 65: <span class="ruby-keyword kw">else</span>
520
+ 66: <span class="ruby-identifier">text</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-identifier">y</span>, <span class="ruby-identifier">t</span>.<span class="ruby-identifier">to_s</span>)
521
+ 67: <span class="ruby-keyword kw">end</span>
522
+ 68: <span class="ruby-keyword kw">end</span>
523
+ 69: <span class="ruby-identifier">m</span> = <span class="ruby-identifier">text</span>.<span class="ruby-identifier">match</span>(<span class="ruby-regexp re">/\&quot;([^&quot;]+)\&quot;\:([^:]+\:\S+)/</span>)
524
+ 70: <span class="ruby-keyword kw">end</span>
525
+ 71: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">text</span>
526
+ 72: <span class="ruby-keyword kw">end</span>
527
+ </pre>
528
+ </div>
529
+ </div>
530
+ </div>
531
+
532
+ <div id="method-M000037" class="method-detail">
533
+ <a name="M000037"></a>
534
+
535
+ <div class="method-heading">
536
+ <a href="#M000037" class="method-signature">
537
+ <span class="method-name">methodize</span><span class="method-args">()</span>
538
+ </a>
539
+ </div>
540
+
541
+ <div class="method-description">
542
+ <p><a class="source-toggle" href="#"
543
+ onclick="toggleCode('M000037-source');return false;">[Source]</a></p>
544
+ <div class="method-source-code" id="M000037-source">
545
+ <pre>
546
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 74</span>
547
+ 74: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">methodize</span>
548
+ 75: <span class="ruby-identifier">x</span> = <span class="ruby-keyword kw">self</span>
549
+ 76:
550
+ 77: <span class="ruby-comment cmt"># if we get down to a nil or an empty string raise an exception! </span>
551
+ 78: <span class="ruby-identifier">raise</span> <span class="ruby-constant">NameError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;#{self} cannot be converted to a valid method name!&quot;</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">x</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span>
552
+ 79:
553
+ 80: <span class="ruby-comment cmt"># get rid of the big stuff in the front/back</span>
554
+ 81: <span class="ruby-identifier">x</span>.<span class="ruby-identifier">strip!</span>
555
+ 82:
556
+ 83: <span class="ruby-comment cmt"># if we get down to a nil or an empty string raise an exception! </span>
557
+ 84: <span class="ruby-identifier">raise</span> <span class="ruby-constant">NameError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;#{self} cannot be converted to a valid method name!&quot;</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">x</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span>
558
+ 85:
559
+ 86: <span class="ruby-identifier">x</span> = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">underscore</span>
560
+ 87:
561
+ 88: <span class="ruby-comment cmt"># get rid of spaces and make the _</span>
562
+ 89: <span class="ruby-identifier">x</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-value str">' '</span>, <span class="ruby-value str">'_'</span>)
563
+ 90: <span class="ruby-comment cmt"># get rid of everything that isn't 'safe' a-z, 0-9, ?, !, =, _</span>
564
+ 91: <span class="ruby-identifier">x</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/([^ a-zA-Z0-9\_\?\!\=]+)/n</span>, <span class="ruby-value str">'_'</span>)
565
+ 92:
566
+ 93: <span class="ruby-comment cmt"># if we get down to a nil or an empty string raise an exception! </span>
567
+ 94: <span class="ruby-identifier">raise</span> <span class="ruby-constant">NameError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;#{self} cannot be converted to a valid method name!&quot;</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">x</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span>
568
+ 95:
569
+ 96: <span class="ruby-comment cmt"># condense multiple 'safe' non a-z chars to just one.</span>
570
+ 97: <span class="ruby-comment cmt"># ie. ___ becomes _ !!!! becomes ! etc...</span>
571
+ 98: [<span class="ruby-value str">' '</span>, <span class="ruby-value str">'_'</span>, <span class="ruby-value str">'?'</span>, <span class="ruby-value str">'!'</span>, <span class="ruby-value str">&quot;=&quot;</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
572
+ 99: <span class="ruby-identifier">x</span>.<span class="ruby-identifier">squeeze!</span>(<span class="ruby-identifier">c</span>)
573
+ 100: <span class="ruby-keyword kw">end</span>
574
+ 101:
575
+ 102: <span class="ruby-comment cmt"># if we get down to a nil or an empty string raise an exception! </span>
576
+ 103: <span class="ruby-identifier">raise</span> <span class="ruby-constant">NameError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;#{self} cannot be converted to a valid method name!&quot;</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">x</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span>
577
+ 104:
578
+ 105: <span class="ruby-comment cmt">#down case the whole thing</span>
579
+ 106: <span class="ruby-identifier">x</span>.<span class="ruby-identifier">downcase!</span>
580
+ 107:
581
+ 108: <span class="ruby-comment cmt"># get rid of any characters at the beginning that aren't a-z</span>
582
+ 109: <span class="ruby-keyword kw">while</span> <span class="ruby-operator">!</span><span class="ruby-identifier">x</span>.<span class="ruby-identifier">match</span>(<span class="ruby-regexp re">/^[a-z]/</span>)
583
+ 110: <span class="ruby-identifier">x</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">0</span>)
584
+ 111:
585
+ 112: <span class="ruby-comment cmt"># if we get down to a nil or an empty string raise an exception! </span>
586
+ 113: <span class="ruby-identifier">raise</span> <span class="ruby-constant">NameError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;#{self} cannot be converted to a valid method name!&quot;</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">x</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span>
587
+ 114: <span class="ruby-keyword kw">end</span>
588
+ 115:
589
+ 116: <span class="ruby-comment cmt"># let's trim this bad boy down a bit now that we've cleaned it up, somewhat.</span>
590
+ 117: <span class="ruby-comment cmt"># we should do this before cleaning up the end character, because it's possible to end up with a </span>
591
+ 118: <span class="ruby-comment cmt"># bad char at the end if you trim too late.</span>
592
+ 119: <span class="ruby-identifier">x</span> = <span class="ruby-identifier">x</span>[<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-value">100</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">100</span>
593
+ 120:
594
+ 121: <span class="ruby-comment cmt"># get rid of any characters at the end that aren't safe</span>
595
+ 122: <span class="ruby-keyword kw">while</span> <span class="ruby-operator">!</span><span class="ruby-identifier">x</span>.<span class="ruby-identifier">match</span>(<span class="ruby-regexp re">/[a-z0-9\?\!\=]$/</span>)
596
+ 123: <span class="ruby-identifier">x</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-identifier">x</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)
597
+ 124: <span class="ruby-comment cmt"># if we get down to a nil or an empty string raise an exception! </span>
598
+ 125: <span class="ruby-identifier">raise</span> <span class="ruby-constant">NameError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;#{self} cannot be converted to a valid method name!&quot;</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">x</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span>
599
+ 126: <span class="ruby-keyword kw">end</span>
600
+ 127:
601
+ 128: <span class="ruby-comment cmt"># if we get down to a nil or an empty string raise an exception! </span>
602
+ 129: <span class="ruby-identifier">raise</span> <span class="ruby-constant">NameError</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;#{self} cannot be converted to a valid method name!&quot;</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">x</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span>
603
+ 130:
604
+ 131: <span class="ruby-comment cmt"># let's get rid of characters that don't belong in the 'middle' of the method.</span>
605
+ 132: <span class="ruby-identifier">orig_middle</span> = <span class="ruby-identifier">x</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span>(<span class="ruby-identifier">x</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>)]
606
+ 133: <span class="ruby-identifier">n_middle</span> = <span class="ruby-identifier">orig_middle</span>.<span class="ruby-identifier">dup</span>
607
+ 134:
608
+ 135: [<span class="ruby-value str">'?'</span>, <span class="ruby-value str">'!'</span>, <span class="ruby-value str">&quot;=&quot;</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
609
+ 136: <span class="ruby-identifier">n_middle</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-identifier">c</span>, <span class="ruby-value str">&quot;_&quot;</span>)
610
+ 137: <span class="ruby-keyword kw">end</span>
611
+ 138:
612
+ 139: <span class="ruby-comment cmt"># the previous gsub can leave us with multiple underscores that need cleaning up.</span>
613
+ 140: <span class="ruby-identifier">n_middle</span>.<span class="ruby-identifier">squeeze!</span>(<span class="ruby-value str">&quot;_&quot;</span>)
614
+ 141:
615
+ 142: <span class="ruby-identifier">x</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-identifier">orig_middle</span>, <span class="ruby-identifier">n_middle</span>)
616
+ 143: <span class="ruby-identifier">x</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-value str">&quot;_=&quot;</span>, <span class="ruby-value str">&quot;=&quot;</span>)
617
+ 144: <span class="ruby-identifier">x</span>
618
+ 145: <span class="ruby-keyword kw">end</span>
619
+ </pre>
620
+ </div>
621
+ </div>
622
+ </div>
623
+
624
+ <div id="method-M000034" class="method-detail">
625
+ <a name="M000034"></a>
626
+
627
+ <div class="method-heading">
628
+ <a href="#M000034" class="method-signature">
629
+ <span class="method-name">plural</span><span class="method-args">()</span>
630
+ </a>
631
+ </div>
632
+
633
+ <div class="method-description">
634
+ <p>
635
+ Maps to Mack::Utils::Inflector.instance.pluralize
636
+ </p>
637
+ <p><a class="source-toggle" href="#"
638
+ onclick="toggleCode('M000034-source');return false;">[Source]</a></p>
639
+ <div class="method-source-code" id="M000034-source">
640
+ <pre>
641
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 30</span>
642
+ 30: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">plural</span>
643
+ 31: <span class="ruby-constant">Mack</span><span class="ruby-operator">::</span><span class="ruby-constant">Utils</span><span class="ruby-operator">::</span><span class="ruby-constant">Inflector</span>.<span class="ruby-identifier">instance</span>.<span class="ruby-identifier">pluralize</span>(<span class="ruby-keyword kw">self</span>)
644
+ 32: <span class="ruby-keyword kw">end</span>
645
+ </pre>
646
+ </div>
647
+ </div>
648
+ </div>
649
+
650
+ <div id="method-M000042" class="method-detail">
651
+ <a name="M000042"></a>
652
+
653
+ <div class="method-heading">
654
+ <a href="#M000042" class="method-signature">
655
+ <span class="method-name">remove</span><span class="method-args">(val)</span>
656
+ </a>
657
+ </div>
658
+
659
+ <div class="method-description">
660
+ <p><a class="source-toggle" href="#"
661
+ onclick="toggleCode('M000042-source');return false;">[Source]</a></p>
662
+ <div class="method-source-code" id="M000042-source">
663
+ <pre>
664
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 170</span>
665
+ 170: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">remove</span>(<span class="ruby-identifier">val</span>)
666
+ 171: <span class="ruby-identifier">gsub</span>(<span class="ruby-identifier">val</span>, <span class="ruby-value str">''</span>)
667
+ 172: <span class="ruby-keyword kw">end</span>
668
+ </pre>
669
+ </div>
670
+ </div>
671
+ </div>
672
+
673
+ <div id="method-M000043" class="method-detail">
674
+ <a name="M000043"></a>
675
+
676
+ <div class="method-heading">
677
+ <a href="#M000043" class="method-signature">
678
+ <span class="method-name">remove!</span><span class="method-args">(val)</span>
679
+ </a>
680
+ </div>
681
+
682
+ <div class="method-description">
683
+ <p><a class="source-toggle" href="#"
684
+ onclick="toggleCode('M000043-source');return false;">[Source]</a></p>
685
+ <div class="method-source-code" id="M000043-source">
686
+ <pre>
687
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 174</span>
688
+ 174: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">remove!</span>(<span class="ruby-identifier">val</span>)
689
+ 175: <span class="ruby-identifier">gsub!</span>(<span class="ruby-identifier">val</span>, <span class="ruby-value str">''</span>)
690
+ 176: <span class="ruby-keyword kw">end</span>
691
+ </pre>
692
+ </div>
693
+ </div>
694
+ </div>
695
+
696
+ <div id="method-M000035" class="method-detail">
697
+ <a name="M000035"></a>
698
+
699
+ <div class="method-heading">
700
+ <a href="#M000035" class="method-signature">
701
+ <span class="method-name">singular</span><span class="method-args">()</span>
702
+ </a>
703
+ </div>
704
+
705
+ <div class="method-description">
706
+ <p>
707
+ Maps to Mack::Utils::Inflector.instance.singularize
708
+ </p>
709
+ <p><a class="source-toggle" href="#"
710
+ onclick="toggleCode('M000035-source');return false;">[Source]</a></p>
711
+ <div class="method-source-code" id="M000035-source">
712
+ <pre>
713
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 35</span>
714
+ 35: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">singular</span>
715
+ 36: <span class="ruby-constant">Mack</span><span class="ruby-operator">::</span><span class="ruby-constant">Utils</span><span class="ruby-operator">::</span><span class="ruby-constant">Inflector</span>.<span class="ruby-identifier">instance</span>.<span class="ruby-identifier">singularize</span>(<span class="ruby-keyword kw">self</span>)
716
+ 37: <span class="ruby-keyword kw">end</span>
717
+ </pre>
718
+ </div>
719
+ </div>
720
+ </div>
721
+
722
+ <div id="method-M000053" class="method-detail">
723
+ <a name="M000053"></a>
724
+
725
+ <div class="method-heading">
726
+ <a href="#M000053" class="method-signature">
727
+ <span class="method-name">sql_safe_str</span><span class="method-args">()</span>
728
+ </a>
729
+ </div>
730
+
731
+ <div class="method-description">
732
+ <p>
733
+ keep adding on to this whenever it becomes apparent that unsafe strings
734
+ could get passed through into the database
735
+ </p>
736
+ <p><a class="source-toggle" href="#"
737
+ onclick="toggleCode('M000053-source');return false;">[Source]</a></p>
738
+ <div class="method-source-code" id="M000053-source">
739
+ <pre>
740
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 251</span>
741
+ 251: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sql_safe_str</span>
742
+ 252: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">nil?</span>
743
+ 253: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/[\']/</span>, <span class="ruby-value str">&quot;\'\'&quot;</span>)
744
+ 254: <span class="ruby-keyword kw">end</span>
745
+ 255: <span class="ruby-keyword kw">end</span>
746
+ </pre>
747
+ </div>
748
+ </div>
749
+ </div>
750
+
751
+ <div id="method-M000054" class="method-detail">
752
+ <a name="M000054"></a>
753
+
754
+ <div class="method-heading">
755
+ <a href="#M000054" class="method-signature">
756
+ <span class="method-name">sql_safe_str!</span><span class="method-args">()</span>
757
+ </a>
758
+ </div>
759
+
760
+ <div class="method-description">
761
+ <p><a class="source-toggle" href="#"
762
+ onclick="toggleCode('M000054-source');return false;">[Source]</a></p>
763
+ <div class="method-source-code" id="M000054-source">
764
+ <pre>
765
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 257</span>
766
+ 257: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sql_safe_str!</span>
767
+ 258: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">replace</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">sql_safe_str</span>)
768
+ 259: <span class="ruby-keyword kw">end</span>
769
+ </pre>
770
+ </div>
771
+ </div>
772
+ </div>
773
+
774
+ <div id="method-M000039" class="method-detail">
775
+ <a name="M000039"></a>
776
+
777
+ <div class="method-heading">
778
+ <a href="#M000039" class="method-signature">
779
+ <span class="method-name">starts_with?</span><span class="method-args">(x)</span>
780
+ </a>
781
+ </div>
782
+
783
+ <div class="method-description">
784
+ <p><a class="source-toggle" href="#"
785
+ onclick="toggleCode('M000039-source');return false;">[Source]</a></p>
786
+ <div class="method-source-code" id="M000039-source">
787
+ <pre>
788
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 156</span>
789
+ 156: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">starts_with?</span>(<span class="ruby-identifier">x</span>)
790
+ 157: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">match</span>(<span class="ruby-node">/^#{x}/</span>) <span class="ruby-operator">?</span> <span class="ruby-keyword kw">true</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">false</span>
791
+ 158: <span class="ruby-keyword kw">end</span>
792
+ </pre>
793
+ </div>
794
+ </div>
795
+ </div>
796
+
797
+ <div id="method-M000049" class="method-detail">
798
+ <a name="M000049"></a>
799
+
800
+ <div class="method-heading">
801
+ <a href="#M000049" class="method-signature">
802
+ <span class="method-name">truncate</span><span class="method-args">(length = 30, truncate_string = &quot;...&quot;)</span>
803
+ </a>
804
+ </div>
805
+
806
+ <div class="method-description">
807
+ <p><a class="source-toggle" href="#"
808
+ onclick="toggleCode('M000049-source');return false;">[Source]</a></p>
809
+ <div class="method-source-code" id="M000049-source">
810
+ <pre>
811
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 226</span>
812
+ 226: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">truncate</span>(<span class="ruby-identifier">length</span> = <span class="ruby-value">30</span>, <span class="ruby-identifier">truncate_string</span> = <span class="ruby-value str">&quot;...&quot;</span>)
813
+ 227: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword kw">then</span> <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">end</span>
814
+ 228: <span class="ruby-identifier">l</span> = <span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">truncate_string</span>.<span class="ruby-identifier">length</span>
815
+ 229: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">$KCODE</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;NONE&quot;</span>
816
+ 230: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">length</span> <span class="ruby-value">? </span><span class="ruby-keyword kw">self</span>[<span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-identifier">l</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">truncate_string</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">self</span>
817
+ 231: <span class="ruby-keyword kw">else</span>
818
+ 232: <span class="ruby-identifier">chars</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp re">//</span>)
819
+ 233: <span class="ruby-identifier">chars</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">length</span> <span class="ruby-value">? </span><span class="ruby-identifier">chars</span>[<span class="ruby-value">0</span><span class="ruby-operator">...</span><span class="ruby-identifier">l</span>].<span class="ruby-identifier">join</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">truncate_string</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">self</span>
820
+ 234: <span class="ruby-keyword kw">end</span>
821
+ 235: <span class="ruby-keyword kw">end</span>
822
+ </pre>
823
+ </div>
824
+ </div>
825
+ </div>
826
+
827
+ <div id="method-M000050" class="method-detail">
828
+ <a name="M000050"></a>
829
+
830
+ <div class="method-heading">
831
+ <a href="#M000050" class="method-signature">
832
+ <span class="method-name">truncate!</span><span class="method-args">(length = 30, truncate_string = &quot;...&quot;)</span>
833
+ </a>
834
+ </div>
835
+
836
+ <div class="method-description">
837
+ <p><a class="source-toggle" href="#"
838
+ onclick="toggleCode('M000050-source');return false;">[Source]</a></p>
839
+ <div class="method-source-code" id="M000050-source">
840
+ <pre>
841
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 237</span>
842
+ 237: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">truncate!</span>(<span class="ruby-identifier">length</span> = <span class="ruby-value">30</span>, <span class="ruby-identifier">truncate_string</span> = <span class="ruby-value str">&quot;...&quot;</span>)
843
+ 238: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">replace</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">truncate</span>(<span class="ruby-identifier">length</span>, <span class="ruby-identifier">truncate_string</span>))
844
+ 239: <span class="ruby-keyword kw">end</span>
845
+ </pre>
846
+ </div>
847
+ </div>
848
+ </div>
849
+
850
+ <div id="method-M000038" class="method-detail">
851
+ <a name="M000038"></a>
852
+
853
+ <div class="method-heading">
854
+ <a href="#M000038" class="method-signature">
855
+ <span class="method-name">underscore</span><span class="method-args">()</span>
856
+ </a>
857
+ </div>
858
+
859
+ <div class="method-description">
860
+ <p><a class="source-toggle" href="#"
861
+ onclick="toggleCode('M000038-source');return false;">[Source]</a></p>
862
+ <div class="method-source-code" id="M000038-source">
863
+ <pre>
864
+ <span class="ruby-comment cmt"># File lib/extensions/string.rb, line 147</span>
865
+ 147: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">underscore</span>
866
+ 148: <span class="ruby-identifier">camel_cased_word</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">dup</span>
867
+ 149: <span class="ruby-identifier">camel_cased_word</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/::/</span>, <span class="ruby-value str">'/'</span>).
868
+ 150: <span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/([A-Z]+)([A-Z][a-z])/</span>,<span class="ruby-value str">'\1_\2'</span>).
869
+ 151: <span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/([a-z\d])([A-Z])/</span>,<span class="ruby-value str">'\1_\2'</span>).
870
+ 152: <span class="ruby-identifier">tr</span>(<span class="ruby-value str">&quot;-&quot;</span>, <span class="ruby-value str">&quot;_&quot;</span>).
871
+ 153: <span class="ruby-identifier">downcase</span>
872
+ 154: <span class="ruby-keyword kw">end</span>
873
+ </pre>
874
+ </div>
875
+ </div>
876
+ </div>
877
+
878
+
879
+ </div>
880
+
881
+
882
+ </div>
883
+
884
+
885
+ <div id="validator-badges">
886
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
887
+ </div>
888
+
889
+ </body>
890
+ </html>