hookapp 2.0.7 → 2.0.8

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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/AUTHORS.md +4 -0
  3. data/CHANGELOG.md +5 -0
  4. data/LICENSE +21 -0
  5. data/README.md +31 -21
  6. data/bin/hook +57 -67
  7. data/hook.rdoc +15 -10
  8. data/html/App.html +107 -0
  9. data/html/GLI/Commands/Doc.html +91 -0
  10. data/html/GLI/Commands/MarkdownDocumentListener.html +521 -0
  11. data/html/GLI/Commands.html +91 -0
  12. data/html/GLI.html +91 -0
  13. data/html/Hook.html +100 -0
  14. data/html/HookApp.html +1002 -0
  15. data/html/Hooker.html +141 -0
  16. data/html/README_rdoc.html +354 -0
  17. data/html/String.html +335 -0
  18. data/html/created.rid +9 -0
  19. data/html/css/fonts.css +167 -0
  20. data/html/css/rdoc.css +639 -0
  21. data/html/fonts/Lato-Light.ttf +0 -0
  22. data/html/fonts/Lato-LightItalic.ttf +0 -0
  23. data/html/fonts/Lato-Regular.ttf +0 -0
  24. data/html/fonts/Lato-RegularItalic.ttf +0 -0
  25. data/html/fonts/SourceCodePro-Bold.ttf +0 -0
  26. data/html/fonts/SourceCodePro-Regular.ttf +0 -0
  27. data/html/images/add.png +0 -0
  28. data/html/images/arrow_up.png +0 -0
  29. data/html/images/brick.png +0 -0
  30. data/html/images/brick_link.png +0 -0
  31. data/html/images/bug.png +0 -0
  32. data/html/images/bullet_black.png +0 -0
  33. data/html/images/bullet_toggle_minus.png +0 -0
  34. data/html/images/bullet_toggle_plus.png +0 -0
  35. data/html/images/date.png +0 -0
  36. data/html/images/delete.png +0 -0
  37. data/html/images/find.png +0 -0
  38. data/html/images/loadingAnimation.gif +0 -0
  39. data/html/images/macFFBgHack.png +0 -0
  40. data/html/images/package.png +0 -0
  41. data/html/images/page_green.png +0 -0
  42. data/html/images/page_white_text.png +0 -0
  43. data/html/images/page_white_width.png +0 -0
  44. data/html/images/plugin.png +0 -0
  45. data/html/images/ruby.png +0 -0
  46. data/html/images/tag_blue.png +0 -0
  47. data/html/images/tag_green.png +0 -0
  48. data/html/images/transparent.png +0 -0
  49. data/html/images/wrench.png +0 -0
  50. data/html/images/wrench_orange.png +0 -0
  51. data/html/images/zoom.png +0 -0
  52. data/html/index.html +317 -0
  53. data/html/js/darkfish.js +84 -0
  54. data/html/js/navigation.js +105 -0
  55. data/html/js/navigation.js.gz +0 -0
  56. data/html/js/search.js +110 -0
  57. data/html/js/search_index.js +1 -0
  58. data/html/js/search_index.js.gz +0 -0
  59. data/html/js/searcher.js +229 -0
  60. data/html/js/searcher.js.gz +0 -0
  61. data/html/table_of_contents.html +365 -0
  62. data/lib/hook/hookapp.rb +9 -10
  63. data/lib/hook/markdown_document_listener.rb +12 -2
  64. data/lib/hook/version.rb +1 -1
  65. data/test/hook_scripts_test.rb +1 -1
  66. metadata +58 -2
data/html/HookApp.html ADDED
@@ -0,0 +1,1002 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>class HookApp - hookapp</title>
8
+
9
+ <script type="text/javascript">
10
+ var rdoc_rel_prefix = "./";
11
+ var index_rel_prefix = "./";
12
+ </script>
13
+
14
+ <script src="./js/navigation.js" defer></script>
15
+ <script src="./js/search.js" defer></script>
16
+ <script src="./js/search_index.js" defer></script>
17
+ <script src="./js/searcher.js" defer></script>
18
+ <script src="./js/darkfish.js" defer></script>
19
+
20
+ <link href="./css/fonts.css" rel="stylesheet">
21
+ <link href="./css/rdoc.css" rel="stylesheet">
22
+
23
+
24
+ <body id="top" role="document" class="class">
25
+ <nav role="navigation">
26
+ <div id="project-navigation">
27
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
28
+ <h2>
29
+ <a href="./index.html" rel="home">Home</a>
30
+ </h2>
31
+
32
+ <div id="table-of-contents-navigation">
33
+ <a href="./table_of_contents.html#pages">Pages</a>
34
+ <a href="./table_of_contents.html#classes">Classes</a>
35
+ <a href="./table_of_contents.html#methods">Methods</a>
36
+ </div>
37
+ </div>
38
+
39
+ <div id="search-section" role="search" class="project-section initially-hidden">
40
+ <form action="#" method="get" accept-charset="utf-8">
41
+ <div id="search-field-wrapper">
42
+ <input id="search-field" role="combobox" aria-label="Search"
43
+ aria-autocomplete="list" aria-controls="search-results"
44
+ type="text" name="search" placeholder="Search" spellcheck="false"
45
+ title="Type to search, Up and Down to navigate, Enter to load">
46
+ </div>
47
+
48
+ <ul id="search-results" aria-label="Search Results"
49
+ aria-busy="false" aria-expanded="false"
50
+ aria-atomic="false" class="initially-hidden"></ul>
51
+ </form>
52
+ </div>
53
+
54
+ </div>
55
+
56
+
57
+
58
+ <div id="class-metadata">
59
+
60
+
61
+ <div id="parent-class-section" class="nav-section">
62
+ <h3>Parent</h3>
63
+
64
+ <p class="link">Object
65
+ </div>
66
+
67
+
68
+
69
+
70
+ <!-- Method Quickref -->
71
+ <div id="method-list-section" class="nav-section">
72
+ <h3>Methods</h3>
73
+
74
+ <ul class="link-list" role="directory">
75
+ <li ><a href="#method-i-all_bookmarks">#all_bookmarks</a>
76
+ <li ><a href="#method-i-bookmark_for">#bookmark_for</a>
77
+ <li ><a href="#method-i-bookmark_from_app">#bookmark_from_app</a>
78
+ <li ><a href="#method-i-clip_bookmark">#clip_bookmark</a>
79
+ <li ><a href="#method-i-clone_hooks">#clone_hooks</a>
80
+ <li ><a href="#method-i-copy_bookmark">#copy_bookmark</a>
81
+ <li ><a href="#method-i-decode">#decode</a>
82
+ <li ><a href="#method-i-delete_all_hooks">#delete_all_hooks</a>
83
+ <li ><a href="#method-i-delete_hooks">#delete_hooks</a>
84
+ <li ><a href="#method-i-encode">#encode</a>
85
+ <li ><a href="#method-i-format_regex">#format_regex</a>
86
+ <li ><a href="#method-i-get_hooks">#get_hooks</a>
87
+ <li ><a href="#method-i-link_all">#link_all</a>
88
+ <li ><a href="#method-i-link_files">#link_files</a>
89
+ <li ><a href="#method-i-linked_bookmarks">#linked_bookmarks</a>
90
+ <li ><a href="#method-i-open_gui">#open_gui</a>
91
+ <li ><a href="#method-i-open_linked">#open_linked</a>
92
+ <li ><a href="#method-i-output_array">#output_array</a>
93
+ <li ><a href="#method-i-search_bookmarks">#search_bookmarks</a>
94
+ <li ><a href="#method-i-search_name">#search_name</a>
95
+ <li ><a href="#method-i-search_path_or_address">#search_path_or_address</a>
96
+ <li ><a href="#method-i-select_hook">#select_hook</a>
97
+ <li ><a href="#method-i-validate_format">#validate_format</a>
98
+ </ul>
99
+ </div>
100
+
101
+ </div>
102
+ </nav>
103
+
104
+ <main role="main" aria-labelledby="class-HookApp">
105
+ <h1 id="class-HookApp" class="class">
106
+ class HookApp
107
+ </h1>
108
+
109
+ <section class="description">
110
+
111
+ <p>Hook.app functions</p>
112
+
113
+ </section>
114
+
115
+ <section id="5Buntitled-5D" class="documentation-section">
116
+
117
+
118
+
119
+
120
+
121
+ <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
122
+ <header>
123
+ <h3>Public Instance Methods</h3>
124
+ </header>
125
+
126
+ <div id="method-i-all_bookmarks" class="method-detail ">
127
+ <div class="method-heading">
128
+ <span class="method-name">all_bookmarks</span><span
129
+ class="method-args">()</span>
130
+ <span class="method-click-advice">click to toggle source</span>
131
+ </div>
132
+
133
+ <div class="method-description">
134
+ <p>Get all known bookmarks. Return array of bookmark hashes.</p>
135
+
136
+ <div class="method-source-code" id="all_bookmarks-source">
137
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 140</span>
138
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">all_bookmarks</span>
139
+ <span class="ruby-string">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
140
+ tell application &quot;Hook&quot;
141
+ set _marks to every bookmark
142
+ set _out to {}
143
+ repeat with _hook in _marks
144
+ set _out to _out &amp; (name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook)
145
+ end repeat
146
+ set {astid, AppleScript&#39;s text item delimiters} to {AppleScript&#39;s text item delimiters, &quot;^^&quot;}
147
+ set _output to _out as string
148
+ set AppleScript&#39;s text item delimiters to astid
149
+ return _output
150
+ end tell
151
+ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split_hooks</span>
152
+ <span class="ruby-keyword">end</span></pre>
153
+ </div>
154
+ </div>
155
+
156
+
157
+ </div>
158
+
159
+ <div id="method-i-bookmark_for" class="method-detail ">
160
+ <div class="method-heading">
161
+ <span class="method-name">bookmark_for</span><span
162
+ class="method-args">(url)</span>
163
+ <span class="method-click-advice">click to toggle source</span>
164
+ </div>
165
+
166
+ <div class="method-description">
167
+ <p>Get a <a href="Hook.html"><code>Hook</code></a> bookmark for file or URL. Return bookmark hash.</p>
168
+
169
+ <div class="method-source-code" id="bookmark_for-source">
170
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 32</span>
171
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">bookmark_for</span>(<span class="ruby-identifier">url</span>)
172
+ <span class="ruby-identifier">url</span>.<span class="ruby-identifier">valid_hook!</span>
173
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Invalid target: #{url}&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">url</span>
174
+
175
+ <span class="ruby-keyword">begin</span>
176
+ <span class="ruby-identifier">mark</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
177
+ tell application &quot;Hook&quot;
178
+ set _hook to make bookmark with data &quot;#{url}&quot;
179
+ if _hook is missing value
180
+ return &quot;&quot;
181
+ else
182
+ return name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook
183
+ end if
184
+ end tell
185
+ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>
186
+ <span class="ruby-keyword">rescue</span> <span class="ruby-identifier">p</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">e</span>
187
+ <span class="ruby-identifier">raise</span> <span class="ruby-identifier">e</span>
188
+ <span class="ruby-keyword">end</span>
189
+
190
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Error getting bookmark for #{url}&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">mark</span>.<span class="ruby-identifier">empty?</span>
191
+ <span class="ruby-identifier">mark</span>.<span class="ruby-identifier">split_hook</span>
192
+ <span class="ruby-keyword">end</span></pre>
193
+ </div>
194
+ </div>
195
+
196
+
197
+ </div>
198
+
199
+ <div id="method-i-bookmark_from_app" class="method-detail ">
200
+ <div class="method-heading">
201
+ <span class="method-name">bookmark_from_app</span><span
202
+ class="method-args">(app, opts)</span>
203
+ <span class="method-click-advice">click to toggle source</span>
204
+ </div>
205
+
206
+ <div class="method-description">
207
+ <p>Get a bookmark from the foreground document of specified app.</p>
208
+
209
+ <div class="method-source-code" id="bookmark_from_app-source">
210
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 81</span>
211
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">bookmark_from_app</span>(<span class="ruby-identifier">app</span>, <span class="ruby-identifier">opts</span>)
212
+ <span class="ruby-identifier">mark</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
213
+ tell application &quot;System Events&quot; to set front_app to name of first application process whose frontmost is true
214
+ tell application &quot;#{app}&quot; to activate
215
+ delay 2
216
+ tell application &quot;Hook&quot;
217
+ set _hook to (bookmark from active window)
218
+ set _output to (name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook)
219
+ end tell
220
+ tell application front_app to activate
221
+ return _output
222
+ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split_hook</span>
223
+ <span class="ruby-identifier">title</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>].<span class="ruby-identifier">empty?</span> <span class="ruby-operator">?</span> <span class="ruby-node">&quot;#{app.cap} link&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>]
224
+ <span class="ruby-identifier">output</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-value">:markdown</span>] <span class="ruby-operator">?</span> <span class="ruby-node">&quot;[#{title}](#{mark[:url]})&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
225
+
226
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:copy</span>]
227
+ <span class="ruby-node">&quot;Copied Markdown link for &#39;#{title}&#39; to clipboard&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">output</span>.<span class="ruby-identifier">clip</span>
228
+ <span class="ruby-keyword">else</span>
229
+ <span class="ruby-identifier">output</span>
230
+ <span class="ruby-keyword">end</span>
231
+ <span class="ruby-keyword">end</span></pre>
232
+ </div>
233
+ </div>
234
+
235
+
236
+ </div>
237
+
238
+ <div id="method-i-clip_bookmark" class="method-detail ">
239
+ <div class="method-heading">
240
+ <span class="method-name">clip_bookmark</span><span
241
+ class="method-args">(url, opts)</span>
242
+ <span class="method-click-advice">click to toggle source</span>
243
+ </div>
244
+
245
+ <div class="method-description">
246
+ <p>Create a bookmark for specified file/url and copy to the clipboard.</p>
247
+
248
+ <div class="method-source-code" id="clip_bookmark-source">
249
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 181</span>
250
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">clip_bookmark</span>(<span class="ruby-identifier">url</span>, <span class="ruby-identifier">opts</span>)
251
+ <span class="ruby-identifier">mark</span> = <span class="ruby-identifier">bookmark_for</span>(<span class="ruby-identifier">url</span>)
252
+ <span class="ruby-identifier">copy_bookmark</span>(<span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>], <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>], <span class="ruby-identifier">opts</span>)
253
+ <span class="ruby-keyword">end</span></pre>
254
+ </div>
255
+ </div>
256
+
257
+
258
+ </div>
259
+
260
+ <div id="method-i-clone_hooks" class="method-detail ">
261
+ <div class="method-heading">
262
+ <span class="method-name">clone_hooks</span><span
263
+ class="method-args">(args)</span>
264
+ <span class="method-click-advice">click to toggle source</span>
265
+ </div>
266
+
267
+ <div class="method-description">
268
+ <p>Copy all hooks from source file to target file</p>
269
+
270
+ <div class="method-source-code" id="clone_hooks-source">
271
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 313</span>
272
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">clone_hooks</span>(<span class="ruby-identifier">args</span>)
273
+ <span class="ruby-identifier">target</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">pop</span>.<span class="ruby-identifier">valid_hook</span>
274
+ <span class="ruby-identifier">source</span> = <span class="ruby-identifier">args</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">valid_hook</span>
275
+
276
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">target</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">source</span>
277
+ <span class="ruby-identifier">hooks</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">source</span>)
278
+ <span class="ruby-identifier">hooks</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">hook</span><span class="ruby-operator">|</span>
279
+ <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
280
+ tell application &quot;Hook&quot;
281
+ set _mark1 to make bookmark with data &quot;#{hook[:url]}&quot;
282
+ set _mark2 to make bookmark with data &quot;#{target}&quot;
283
+ hook _mark1 and _mark2
284
+ return true
285
+ end tell
286
+ APPLESCRIPT`</span>
287
+ <span class="ruby-keyword">end</span>
288
+ <span class="ruby-node">&quot;Hooks from #{source} cloned to #{target}&quot;</span>
289
+ <span class="ruby-keyword">else</span>
290
+ <span class="ruby-identifier">raise</span> <span class="ruby-string">&#39;Invalid file specified&#39;</span>
291
+ <span class="ruby-keyword">end</span>
292
+ <span class="ruby-keyword">end</span></pre>
293
+ </div>
294
+ </div>
295
+
296
+
297
+ </div>
298
+
299
+ <div id="method-i-copy_bookmark" class="method-detail ">
300
+ <div class="method-heading">
301
+ <span class="method-name">copy_bookmark</span><span
302
+ class="method-args">(title, url, opts)</span>
303
+ <span class="method-click-advice">click to toggle source</span>
304
+ </div>
305
+
306
+ <div class="method-description">
307
+ <p>Create a bookmark from specified title and url and copy to the clipboard.</p>
308
+
309
+ <div class="method-source-code" id="copy_bookmark-source">
310
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 187</span>
311
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">copy_bookmark</span>(<span class="ruby-identifier">title</span>, <span class="ruby-identifier">url</span>, <span class="ruby-identifier">opts</span>)
312
+ <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;No URL found&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">url</span>.<span class="ruby-identifier">empty?</span>
313
+ <span class="ruby-identifier">title</span> = <span class="ruby-identifier">title</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">?</span> <span class="ruby-string">&#39;No title&#39;</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">title</span>
314
+ <span class="ruby-identifier">output</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-value">:markdown</span>] <span class="ruby-operator">?</span> <span class="ruby-node">&quot;[#{title}](#{url})&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">url</span>
315
+ <span class="ruby-identifier">output</span>.<span class="ruby-identifier">clip</span>
316
+ <span class="ruby-node">%(Copied #{opts[:markdown] ? &#39;Markdown link&#39; : &#39;Hook URL&#39;} for &#39;#{title}&#39; to clipboard)</span>
317
+ <span class="ruby-keyword">end</span></pre>
318
+ </div>
319
+ </div>
320
+
321
+
322
+ </div>
323
+
324
+ <div id="method-i-decode" class="method-detail ">
325
+ <div class="method-heading">
326
+ <span class="method-name">decode</span><span
327
+ class="method-args">(string)</span>
328
+ <span class="method-click-advice">click to toggle source</span>
329
+ </div>
330
+
331
+ <div class="method-description">
332
+
333
+
334
+ <div class="method-source-code" id="decode-source">
335
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 499</span>
336
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">decode</span>(<span class="ruby-identifier">string</span>)
337
+ <span class="ruby-identifier">result</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
338
+ tell application &quot;Hook&quot;
339
+ percent decode &quot;#{string.escape_quotes}&quot;
340
+ end tell
341
+ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>
342
+ <span class="ruby-identifier">print</span> <span class="ruby-identifier">result</span>
343
+ <span class="ruby-keyword">end</span></pre>
344
+ </div>
345
+ </div>
346
+
347
+
348
+ </div>
349
+
350
+ <div id="method-i-delete_all_hooks" class="method-detail ">
351
+ <div class="method-heading">
352
+ <span class="method-name">delete_all_hooks</span><span
353
+ class="method-args">(url, force: false)</span>
354
+ <span class="method-click-advice">click to toggle source</span>
355
+ </div>
356
+
357
+ <div class="method-description">
358
+ <p>Delete all hooked files/urls from target file</p>
359
+
360
+ <div class="method-source-code" id="delete_all_hooks-source">
361
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 336</span>
362
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">delete_all_hooks</span>(<span class="ruby-identifier">url</span>, <span class="ruby-value">force:</span> <span class="ruby-keyword">false</span>)
363
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">force</span>
364
+ <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">print</span> <span class="ruby-node">&quot;Are you sure you want to delete ALL hooks from #{url} (y/N)? &quot;</span>
365
+ <span class="ruby-identifier">res</span> = <span class="ruby-constant">STDIN</span>.<span class="ruby-identifier">gets</span>.<span class="ruby-identifier">strip</span>
366
+ <span class="ruby-keyword">end</span>
367
+
368
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">res</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^y/i</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">force</span>
369
+ <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">url</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">hook</span><span class="ruby-operator">|</span>
370
+ <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
371
+ tell application &quot;Hook&quot;
372
+ set _mark1 to make bookmark with data &quot;#{hook[:url]}&quot;
373
+ set _mark2 to make bookmark with data &quot;#{url}&quot;
374
+ unhook _mark1 and _mark2
375
+ return true
376
+ end tell
377
+ APPLESCRIPT`</span>
378
+ <span class="ruby-keyword">end</span>
379
+ <span class="ruby-node">&quot;Removed all hooks from #{url}&quot;</span>
380
+ <span class="ruby-keyword">end</span>
381
+ <span class="ruby-keyword">end</span></pre>
382
+ </div>
383
+ </div>
384
+
385
+
386
+ </div>
387
+
388
+ <div id="method-i-delete_hooks" class="method-detail ">
389
+ <div class="method-heading">
390
+ <span class="method-name">delete_hooks</span><span
391
+ class="method-args">(args, opts)</span>
392
+ <span class="method-click-advice">click to toggle source</span>
393
+ </div>
394
+
395
+ <div class="method-description">
396
+ <p>Delete hooks between two files/urls</p>
397
+
398
+ <div class="method-source-code" id="delete_hooks-source">
399
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 358</span>
400
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">delete_hooks</span>(<span class="ruby-identifier">args</span>, <span class="ruby-identifier">opts</span>)
401
+ <span class="ruby-identifier">urls</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">map</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:valid_hook</span>).<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">url</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">url</span> }
402
+ <span class="ruby-identifier">output</span> = []
403
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:all</span>]
404
+ <span class="ruby-identifier">urls</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">url</span>, <span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
405
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Invalid target: #{args[i]}&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">url</span>
406
+
407
+ <span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">delete_all_hooks</span>(<span class="ruby-identifier">url</span>, <span class="ruby-value">force:</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:force</span>]))
408
+ <span class="ruby-keyword">end</span>
409
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">output</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;\n&quot;</span>)
410
+ <span class="ruby-keyword">end</span>
411
+
412
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">urls</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
413
+ <span class="ruby-identifier">source</span> = <span class="ruby-identifier">urls</span>[<span class="ruby-value">0</span>]
414
+ <span class="ruby-identifier">target</span> = <span class="ruby-identifier">urls</span>[<span class="ruby-value">1</span>]
415
+ <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
416
+ tell application &quot;Hook&quot;
417
+ set _mark1 to make bookmark with data &quot;#{source}&quot;
418
+ set _mark2 to make bookmark with data &quot;#{target}&quot;
419
+ unhook _mark1 and _mark2
420
+ return true
421
+ end tell
422
+ APPLESCRIPT`</span>
423
+ <span class="ruby-node">&quot;Hook removed between #{source} and #{target}&quot;</span>
424
+ <span class="ruby-keyword">else</span>
425
+ <span class="ruby-identifier">raise</span> <span class="ruby-string">&#39;Invalid number of URLs or files specified&#39;</span>
426
+ <span class="ruby-keyword">end</span>
427
+ <span class="ruby-keyword">end</span></pre>
428
+ </div>
429
+ </div>
430
+
431
+
432
+ </div>
433
+
434
+ <div id="method-i-encode" class="method-detail ">
435
+ <div class="method-heading">
436
+ <span class="method-name">encode</span><span
437
+ class="method-args">(string)</span>
438
+ <span class="method-click-advice">click to toggle source</span>
439
+ </div>
440
+
441
+ <div class="method-description">
442
+
443
+
444
+ <div class="method-source-code" id="encode-source">
445
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 490</span>
446
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">encode</span>(<span class="ruby-identifier">string</span>)
447
+ <span class="ruby-identifier">result</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
448
+ tell application &quot;Hook&quot;
449
+ percent encode &quot;#{string.escape_quotes}&quot;
450
+ end tell
451
+ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/&#39;/</span>,<span class="ruby-string">&#39;%27&#39;</span>)
452
+ <span class="ruby-identifier">print</span> <span class="ruby-identifier">result</span>
453
+ <span class="ruby-keyword">end</span></pre>
454
+ </div>
455
+ </div>
456
+
457
+
458
+ </div>
459
+
460
+ <div id="method-i-format_regex" class="method-detail ">
461
+ <div class="method-heading">
462
+ <span class="method-name">format_regex</span><span
463
+ class="method-args">(options)</span>
464
+ <span class="method-click-advice">click to toggle source</span>
465
+ </div>
466
+
467
+ <div class="method-description">
468
+ <p>Create a single regex for validation of an array by first char or full match.</p>
469
+
470
+ <div class="method-source-code" id="format_regex-source">
471
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 9</span>
472
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">format_regex</span>(<span class="ruby-identifier">options</span>)
473
+ <span class="ruby-identifier">fmt_rx_array</span> = []
474
+ <span class="ruby-identifier">options</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">fmt</span><span class="ruby-operator">|</span> <span class="ruby-identifier">fmt_rx_array</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">fmt</span>.<span class="ruby-identifier">sub</span>(<span class="ruby-regexp">/^(.)(.*?)$/</span>, <span class="ruby-string">&#39;\1(\2)?&#39;</span>)) }
475
+ <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;^(#{fmt_rx_array.join(&#39;|&#39;)})$&quot;</span>,<span class="ruby-string">&#39;i&#39;</span>)
476
+ <span class="ruby-keyword">end</span></pre>
477
+ </div>
478
+ </div>
479
+
480
+
481
+ </div>
482
+
483
+ <div id="method-i-get_hooks" class="method-detail ">
484
+ <div class="method-heading">
485
+ <span class="method-name">get_hooks</span><span
486
+ class="method-args">(url)</span>
487
+ <span class="method-click-advice">click to toggle source</span>
488
+ </div>
489
+
490
+ <div class="method-description">
491
+ <p>Get bookmarks hooked to file or URL. Return array of bookmark hashes.</p>
492
+
493
+ <div class="method-source-code" id="get_hooks-source">
494
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 56</span>
495
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">get_hooks</span>(<span class="ruby-identifier">url</span>)
496
+ <span class="ruby-identifier">url</span>.<span class="ruby-identifier">valid_hook!</span>
497
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Invalid target: #{url}&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">url</span>
498
+
499
+ <span class="ruby-identifier">hooks</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
500
+ tell application &quot;Hook&quot;
501
+ set _mark to make bookmark with data &quot;#{url}&quot;
502
+ if _mark is missing value
503
+ return &quot;&quot;
504
+ end if
505
+ set _hooks to hooked bookmarks of _mark
506
+ set _out to {}
507
+ repeat with _hook in _hooks
508
+ set _out to _out &amp; (name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook)
509
+ end repeat
510
+ set {astid, AppleScript&#39;s text item delimiters} to {AppleScript&#39;s text item delimiters, &quot;^^&quot;}
511
+ set _output to _out as string
512
+ set AppleScript&#39;s text item delimiters to astid
513
+ return _output
514
+ end tell
515
+ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>
516
+ <span class="ruby-identifier">hooks</span>.<span class="ruby-identifier">split_hooks</span>
517
+ <span class="ruby-keyword">end</span></pre>
518
+ </div>
519
+ </div>
520
+
521
+
522
+ </div>
523
+
524
+ <div id="method-i-link_all" class="method-detail ">
525
+ <div class="method-heading">
526
+ <span class="method-name">link_all</span><span
527
+ class="method-args">(args)</span>
528
+ <span class="method-click-advice">click to toggle source</span>
529
+ </div>
530
+
531
+ <div class="method-description">
532
+ <p>Create bi-directional links between every file/url in the list of arguments</p>
533
+
534
+ <div class="method-source-code" id="link_all-source">
535
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 388</span>
536
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">link_all</span>(<span class="ruby-identifier">args</span>)
537
+ <span class="ruby-identifier">args</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
538
+ <span class="ruby-identifier">source</span> = <span class="ruby-identifier">file</span>.<span class="ruby-identifier">valid_hook</span>
539
+ <span class="ruby-identifier">link_to</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">dup</span>.<span class="ruby-identifier">map</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:valid_hook</span>).<span class="ruby-identifier">reject</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">url</span><span class="ruby-operator">|</span> <span class="ruby-identifier">url</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">source</span> }
540
+ <span class="ruby-identifier">link_to</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">url</span><span class="ruby-operator">|</span>
541
+ <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
542
+ tell application &quot;Hook&quot;
543
+ set _mark1 to make bookmark with data &quot;#{source}&quot;
544
+ set _mark2 to make bookmark with data &quot;#{url}&quot;
545
+ hook _mark1 and _mark2
546
+ return true
547
+ end tell
548
+ APPLESCRIPT`</span>
549
+ <span class="ruby-keyword">end</span>
550
+ <span class="ruby-keyword">end</span>
551
+ <span class="ruby-node">&quot;Linked #{args.length} files to each other&quot;</span>
552
+ <span class="ruby-keyword">end</span></pre>
553
+ </div>
554
+ </div>
555
+
556
+
557
+ </div>
558
+
559
+ <div id="method-i-link_files" class="method-detail ">
560
+ <div class="method-heading">
561
+ <span class="method-name">link_files</span><span
562
+ class="method-args">(args)</span>
563
+ <span class="method-click-advice">click to toggle source</span>
564
+ </div>
565
+
566
+ <div class="method-description">
567
+ <p>Link 2 or more files/urls with bi-directional hooks.</p>
568
+
569
+ <div class="method-source-code" id="link_files-source">
570
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 290</span>
571
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">link_files</span>(<span class="ruby-identifier">args</span>)
572
+ <span class="ruby-identifier">target</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">pop</span>
573
+ <span class="ruby-identifier">target</span>.<span class="ruby-identifier">valid_hook!</span>
574
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Invalid target: #{target}&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">target</span>
575
+
576
+ <span class="ruby-identifier">args</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">file</span><span class="ruby-operator">|</span>
577
+ <span class="ruby-identifier">file</span>.<span class="ruby-identifier">valid_hook!</span>
578
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Invalid target: #{file}&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">file</span>
579
+
580
+ <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;Linking #{file} and #{target}...&quot;</span>
581
+ <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
582
+ tell application &quot;Hook&quot;
583
+ set _mark1 to make bookmark with data &quot;#{file}&quot;
584
+ set _mark2 to make bookmark with data &quot;#{target}&quot;
585
+ hook _mark1 and _mark2
586
+ return true
587
+ end tell
588
+ APPLESCRIPT`</span>
589
+ <span class="ruby-keyword">end</span>
590
+ <span class="ruby-node">&quot;Linked #{args.length} files to #{target}&quot;</span>
591
+ <span class="ruby-keyword">end</span></pre>
592
+ </div>
593
+ </div>
594
+
595
+
596
+ </div>
597
+
598
+ <div id="method-i-linked_bookmarks" class="method-detail ">
599
+ <div class="method-heading">
600
+ <span class="method-name">linked_bookmarks</span><span
601
+ class="method-args">(args, opts)</span>
602
+ <span class="method-click-advice">click to toggle source</span>
603
+ </div>
604
+
605
+ <div class="method-description">
606
+ <p>Get a list of all hooks on a file/url.</p>
607
+
608
+ <div class="method-source-code" id="linked_bookmarks-source">
609
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 407</span>
610
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">linked_bookmarks</span>(<span class="ruby-identifier">args</span>, <span class="ruby-identifier">opts</span>)
611
+ <span class="ruby-identifier">result</span> = []
612
+
613
+ <span class="ruby-identifier">separator</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;paths&#39;</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:null_separator</span>] <span class="ruby-operator">?</span> <span class="ruby-string">&quot;\0&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-string">&quot;\n&quot;</span>
614
+
615
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">empty?</span>
616
+ <span class="ruby-identifier">result</span> = <span class="ruby-identifier">output_array</span>(<span class="ruby-identifier">all_bookmarks</span>, <span class="ruby-identifier">opts</span>)
617
+ <span class="ruby-keyword">else</span>
618
+ <span class="ruby-identifier">args</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">url</span><span class="ruby-operator">|</span>
619
+ <span class="ruby-identifier">source_mark</span> = <span class="ruby-identifier">bookmark_for</span>(<span class="ruby-identifier">url</span>)
620
+ <span class="ruby-identifier">filename</span> = <span class="ruby-identifier">source_mark</span>[<span class="ruby-value">:name</span>]
621
+
622
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>]
623
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^m/</span>
624
+ <span class="ruby-identifier">filename</span> = <span class="ruby-node">&quot;[#{source_mark[:name]}](#{source_mark[:url]})&quot;</span>
625
+ <span class="ruby-identifier">filename</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; &lt;file://#{CGI.escape(source_mark[:path])}&gt;&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">source_mark</span>[<span class="ruby-value">:path</span>]
626
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^p/</span>
627
+ <span class="ruby-identifier">filename</span> = <span class="ruby-node">&quot;File: #{source_mark[:name]}&quot;</span>
628
+ <span class="ruby-identifier">filename</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; (#{source_mark[:path]})&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">source_mark</span>[<span class="ruby-value">:path</span>]
629
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^h/</span>
630
+ <span class="ruby-identifier">filename</span> = <span class="ruby-node">&quot;File: #{source_mark[:name]}&quot;</span>
631
+ <span class="ruby-identifier">filename</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot; (#{source_mark[:url]})&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">source_mark</span>[<span class="ruby-value">:url</span>]
632
+ <span class="ruby-keyword">else</span>
633
+ <span class="ruby-identifier">filename</span> = <span class="ruby-node">&quot;Bookmarks attached to #{source_mark[:path] || source_mark[:url]}&quot;</span>
634
+ <span class="ruby-keyword">end</span>
635
+
636
+ <span class="ruby-identifier">hooks_arr</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">url</span>)
637
+
638
+ <span class="ruby-identifier">output</span> = <span class="ruby-identifier">output_array</span>(<span class="ruby-identifier">hooks_arr</span>, <span class="ruby-identifier">opts</span>)
639
+ <span class="ruby-identifier">result</span>.<span class="ruby-identifier">push</span>({ <span class="ruby-value">file:</span> <span class="ruby-identifier">filename</span>, <span class="ruby-value">links:</span> <span class="ruby-identifier">output</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">separator</span>) }) <span class="ruby-keyword">if</span> <span class="ruby-identifier">output</span>
640
+ <span class="ruby-keyword">end</span>
641
+
642
+
643
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">1</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;verbose&#39;</span>
644
+ <span class="ruby-identifier">result</span>.<span class="ruby-identifier">map!</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">res</span><span class="ruby-operator">|</span>
645
+ <span class="ruby-node">&quot;#{res[:file]}\n\n#{res[:links]}\n&quot;</span>
646
+ <span class="ruby-keyword">end</span>
647
+ <span class="ruby-keyword">else</span>
648
+ <span class="ruby-identifier">result</span>.<span class="ruby-identifier">map!</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">res</span><span class="ruby-operator">|</span>
649
+ <span class="ruby-identifier">res</span>[<span class="ruby-value">:links</span>]
650
+ <span class="ruby-keyword">end</span>
651
+ <span class="ruby-keyword">end</span>
652
+ <span class="ruby-keyword">end</span>
653
+ <span class="ruby-identifier">result</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">separator</span>)
654
+ <span class="ruby-keyword">end</span></pre>
655
+ </div>
656
+ </div>
657
+
658
+
659
+ </div>
660
+
661
+ <div id="method-i-open_gui" class="method-detail ">
662
+ <div class="method-heading">
663
+ <span class="method-name">open_gui</span><span
664
+ class="method-args">(url)</span>
665
+ <span class="method-click-advice">click to toggle source</span>
666
+ </div>
667
+
668
+ <div class="method-description">
669
+ <p>Open the <a href="Hook.html"><code>Hook</code></a> GUI for browsing/performing actions on a file or url</p>
670
+
671
+ <div class="method-source-code" id="open_gui-source">
672
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 259</span>
673
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">open_gui</span>(<span class="ruby-identifier">url</span>)
674
+ <span class="ruby-identifier">result</span> = <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
675
+ tell application &quot;Hook&quot;
676
+ set _mark to make bookmark with data &quot;#{url.valid_hook}&quot;
677
+ if _mark is missing value
678
+ return &quot;Failed to create bookmark for #{url}&quot;
679
+ else
680
+ invoke on _mark
681
+ return &quot;&quot;
682
+ end if
683
+ end tell
684
+ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>
685
+ <span class="ruby-identifier">raise</span> <span class="ruby-identifier">result</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">empty?</span>
686
+ <span class="ruby-keyword">end</span></pre>
687
+ </div>
688
+ </div>
689
+
690
+
691
+ </div>
692
+
693
+ <div id="method-i-open_linked" class="method-detail ">
694
+ <div class="method-heading">
695
+ <span class="method-name">open_linked</span><span
696
+ class="method-args">(url)</span>
697
+ <span class="method-click-advice">click to toggle source</span>
698
+ </div>
699
+
700
+ <div class="method-description">
701
+ <p>Select from a menu of available hooks and open using macOS `open`.</p>
702
+
703
+ <div class="method-source-code" id="open_linked-source">
704
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 275</span>
705
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">open_linked</span>(<span class="ruby-identifier">url</span>)
706
+ <span class="ruby-identifier">marks</span> = <span class="ruby-identifier">get_hooks</span>(<span class="ruby-identifier">url</span>)
707
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">marks</span>.<span class="ruby-identifier">empty?</span>
708
+ <span class="ruby-identifier">warn</span> <span class="ruby-node">&quot;No hooks found for #{url}&quot;</span>
709
+ <span class="ruby-keyword">else</span>
710
+ <span class="ruby-identifier">res</span> = <span class="ruby-identifier">select_hook</span>(<span class="ruby-identifier">marks</span>)
711
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">res</span>.<span class="ruby-identifier">empty?</span>
712
+ <span class="ruby-identifier">res</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">mark</span><span class="ruby-operator">|</span>
713
+ <span class="ruby-node">`open &#39;#{mark[:url]}&#39;`</span>
714
+ }
715
+ <span class="ruby-keyword">end</span>
716
+ <span class="ruby-keyword">end</span>
717
+ <span class="ruby-keyword">end</span></pre>
718
+ </div>
719
+ </div>
720
+
721
+
722
+ </div>
723
+
724
+ <div id="method-i-output_array" class="method-detail ">
725
+ <div class="method-heading">
726
+ <span class="method-name">output_array</span><span
727
+ class="method-args">(hooks_arr, opts)</span>
728
+ <span class="method-click-advice">click to toggle source</span>
729
+ </div>
730
+
731
+ <div class="method-description">
732
+ <p>Output an array of hooks in the given format.</p>
733
+
734
+ <div class="method-source-code" id="output_array-source">
735
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 454</span>
736
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">output_array</span>(<span class="ruby-identifier">hooks_arr</span>, <span class="ruby-identifier">opts</span>)
737
+ <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">empty?</span>
738
+ <span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">reject!</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span> <span class="ruby-identifier">h</span>[<span class="ruby-value">:path</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">h</span>[<span class="ruby-value">:path</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;&#39;</span> } <span class="ruby-keyword">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:files_only</span>]
739
+
740
+ <span class="ruby-identifier">output</span> = []
741
+
742
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>]
743
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^m/</span>
744
+ <span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
745
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">h</span>[<span class="ruby-value">:name</span>].<span class="ruby-identifier">empty?</span>
746
+ <span class="ruby-identifier">title</span> = <span class="ruby-identifier">h</span>[<span class="ruby-value">:url</span>]
747
+ <span class="ruby-keyword">else</span>
748
+ <span class="ruby-identifier">title</span> = <span class="ruby-identifier">h</span>[<span class="ruby-value">:name</span>]
749
+ <span class="ruby-keyword">end</span>
750
+ <span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-node">&quot;- [#{title}](#{h[:url]})&quot;</span>)
751
+ <span class="ruby-keyword">end</span>
752
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^p/</span>
753
+ <span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
754
+ <span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">h</span>[<span class="ruby-value">:path</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">h</span>[<span class="ruby-value">:url</span>] <span class="ruby-operator">:</span> <span class="ruby-identifier">h</span>[<span class="ruby-value">:path</span>])
755
+ <span class="ruby-keyword">end</span>
756
+ <span class="ruby-keyword">when</span> <span class="ruby-regexp">/^h/</span>
757
+ <span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
758
+ <span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-identifier">h</span>[<span class="ruby-value">:url</span>])
759
+ <span class="ruby-keyword">end</span>
760
+ <span class="ruby-keyword">else</span>
761
+ <span class="ruby-identifier">hooks_arr</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
762
+ <span class="ruby-identifier">output</span>.<span class="ruby-identifier">push</span>(<span class="ruby-node">&quot;Title: #{h[:name]}\nPath: #{h[:path]}\nAddress: #{h[:url]}\n---------------------&quot;</span>)
763
+ <span class="ruby-keyword">end</span>
764
+ <span class="ruby-keyword">end</span>
765
+ <span class="ruby-keyword">else</span>
766
+ <span class="ruby-identifier">warn</span> <span class="ruby-string">&#39;No bookmarks&#39;</span>
767
+ <span class="ruby-keyword">end</span>
768
+
769
+ <span class="ruby-identifier">output</span>
770
+ <span class="ruby-keyword">end</span></pre>
771
+ </div>
772
+ </div>
773
+
774
+
775
+ </div>
776
+
777
+ <div id="method-i-search_bookmarks" class="method-detail ">
778
+ <div class="method-heading">
779
+ <span class="method-name">search_bookmarks</span><span
780
+ class="method-args">(search, opts)</span>
781
+ <span class="method-click-advice">click to toggle source</span>
782
+ </div>
783
+
784
+ <div class="method-description">
785
+ <p>Search bookmarks, using both names and addresses unless options contain “:names_only”. Return results as formatted list.</p>
786
+
787
+ <div class="method-source-code" id="search_bookmarks-source">
788
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 158</span>
789
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">search_bookmarks</span>(<span class="ruby-identifier">search</span>, <span class="ruby-identifier">opts</span>)
790
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">search</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">search</span>.<span class="ruby-identifier">empty?</span>
791
+ <span class="ruby-identifier">result</span> = <span class="ruby-identifier">search_name</span>(<span class="ruby-identifier">search</span>)
792
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:names_only</span>]
793
+ <span class="ruby-identifier">more_results</span> = <span class="ruby-identifier">search_path_or_address</span>(<span class="ruby-identifier">search</span>)
794
+ <span class="ruby-identifier">result</span> = <span class="ruby-identifier">result</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">more_results</span>).<span class="ruby-identifier">uniq</span>
795
+ <span class="ruby-keyword">end</span>
796
+ <span class="ruby-keyword">else</span>
797
+ <span class="ruby-identifier">result</span> = <span class="ruby-identifier">all_bookmarks</span>
798
+ <span class="ruby-keyword">end</span>
799
+
800
+ <span class="ruby-identifier">separator</span> = <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&#39;paths&#39;</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:null_separator</span>] <span class="ruby-operator">?</span> <span class="ruby-string">&quot;\0&quot;</span> <span class="ruby-operator">:</span> <span class="ruby-string">&quot;\n&quot;</span>
801
+
802
+ <span class="ruby-identifier">output</span> = <span class="ruby-identifier">output_array</span>(<span class="ruby-identifier">result</span>, <span class="ruby-identifier">opts</span>)
803
+
804
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">opts</span>[<span class="ruby-value">:format</span>] <span class="ruby-operator">=~</span> <span class="ruby-regexp">/^v/</span>
805
+ <span class="ruby-node">&quot;Search results for: #{search}\n---------\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">output</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;\n&quot;</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">output</span>
806
+ <span class="ruby-keyword">else</span>
807
+ <span class="ruby-identifier">output</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">separator</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">output</span>
808
+ <span class="ruby-keyword">end</span>
809
+ <span class="ruby-keyword">end</span></pre>
810
+ </div>
811
+ </div>
812
+
813
+
814
+ </div>
815
+
816
+ <div id="method-i-search_name" class="method-detail ">
817
+ <div class="method-heading">
818
+ <span class="method-name">search_name</span><span
819
+ class="method-args">(search)</span>
820
+ <span class="method-click-advice">click to toggle source</span>
821
+ </div>
822
+
823
+ <div class="method-description">
824
+ <p>Search boomark names/titles. Return array of bookmark hashes.</p>
825
+
826
+ <div class="method-source-code" id="search_name-source">
827
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 104</span>
828
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">search_name</span>(<span class="ruby-identifier">search</span>)
829
+ <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
830
+ set searchString to &quot;#{search.strip}&quot;
831
+ tell application &quot;Hook&quot;
832
+ set _marks to every bookmark whose name contains searchString
833
+ set _out to {}
834
+ repeat with _hook in _marks
835
+ set _out to _out &amp; (name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook)
836
+ end repeat
837
+ set {astid, AppleScript&#39;s text item delimiters} to {AppleScript&#39;s text item delimiters, &quot;^^&quot;}
838
+ set _output to _out as string
839
+ set AppleScript&#39;s text item delimiters to astid
840
+ return _output
841
+ end tell
842
+ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split_hooks</span>
843
+ <span class="ruby-keyword">end</span></pre>
844
+ </div>
845
+ </div>
846
+
847
+
848
+ </div>
849
+
850
+ <div id="method-i-search_path_or_address" class="method-detail ">
851
+ <div class="method-heading">
852
+ <span class="method-name">search_path_or_address</span><span
853
+ class="method-args">(search)</span>
854
+ <span class="method-click-advice">click to toggle source</span>
855
+ </div>
856
+
857
+ <div class="method-description">
858
+ <p>Search bookmark paths and addresses. Return array of bookmark hashes.</p>
859
+
860
+ <div class="method-source-code" id="search_path_or_address-source">
861
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 122</span>
862
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">search_path_or_address</span>(<span class="ruby-identifier">search</span>)
863
+ <span class="ruby-node">`osascript &lt;&lt;&#39;APPLESCRIPT&#39;
864
+ set searchString to &quot;#{search.strip}&quot;
865
+ tell application &quot;Hook&quot;
866
+ set _marks to every bookmark whose path contains searchString or address contains searchString
867
+ set _out to {}
868
+ repeat with _hook in _marks
869
+ set _out to _out &amp; (name of _hook &amp; &quot;||&quot; &amp; address of _hook &amp; &quot;||&quot; &amp; path of _hook)
870
+ end repeat
871
+ set {astid, AppleScript&#39;s text item delimiters} to {AppleScript&#39;s text item delimiters, &quot;^^&quot;}
872
+ set _output to _out as string
873
+ set AppleScript&#39;s text item delimiters to astid
874
+ return _output
875
+ end tell
876
+ APPLESCRIPT`</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">split_hooks</span>
877
+ <span class="ruby-keyword">end</span></pre>
878
+ </div>
879
+ </div>
880
+
881
+
882
+ </div>
883
+
884
+ <div id="method-i-select_hook" class="method-detail ">
885
+ <div class="method-heading">
886
+ <span class="method-name">select_hook</span><span
887
+ class="method-args">(marks)</span>
888
+ <span class="method-click-advice">click to toggle source</span>
889
+ </div>
890
+
891
+ <div class="method-description">
892
+ <p>Generate a menu of available hooks for selecting one or more hooks to operate on. Revamped to use `fzf`, which is embedded as `lib/helpers/fuzzyfilefinder` to avoid any conflicts. Allows multiple selections with tab key, and type-ahead fuzzy filtering of results.</p>
893
+
894
+ <div class="method-source-code" id="select_hook-source">
895
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 198</span>
896
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">select_hook</span>(<span class="ruby-identifier">marks</span>)
897
+ <span class="ruby-comment"># intpad = marks.length.to_s.length + 1</span>
898
+ <span class="ruby-comment"># marks.each_with_index do |mark, i|</span>
899
+ <span class="ruby-comment"># STDERR.printf &quot;%#{intpad}d) %s\n&quot;, i + 1, mark[:name]</span>
900
+ <span class="ruby-comment"># end</span>
901
+ <span class="ruby-comment"># STDERR.print &#39;Open which bookmark: &#39;</span>
902
+ <span class="ruby-comment"># sel = STDIN.gets.strip.to_i</span>
903
+ <span class="ruby-comment"># raise &#39;Invalid selection&#39; unless sel.positive? &amp;&amp; sel &lt;= marks.length</span>
904
+
905
+ <span class="ruby-comment"># marks[sel - 1]</span>
906
+
907
+ <span class="ruby-identifier">options</span> = <span class="ruby-identifier">marks</span>.<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">mark</span><span class="ruby-operator">|</span>
908
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>]
909
+ <span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:name</span>]
910
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>]
911
+ <span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>]
912
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
913
+ <span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
914
+ <span class="ruby-keyword">else</span>
915
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
916
+ <span class="ruby-keyword">end</span>
917
+
918
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>]
919
+ <span class="ruby-identifier">loc</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">mark</span>[<span class="ruby-value">:path</span>])
920
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
921
+ <span class="ruby-identifier">url</span> = <span class="ruby-constant">URI</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>])
922
+ <span class="ruby-identifier">id</span> = <span class="ruby-identifier">mark</span>[<span class="ruby-value">:url</span>]
923
+ <span class="ruby-identifier">loc</span> = <span class="ruby-identifier">url</span>.<span class="ruby-identifier">scheme</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot; - &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">url</span>.<span class="ruby-identifier">hostname</span>
924
+ <span class="ruby-keyword">else</span>
925
+ <span class="ruby-identifier">loc</span> = <span class="ruby-string">&quot;&quot;</span>
926
+ <span class="ruby-keyword">end</span>
927
+
928
+ <span class="ruby-node">&quot;#{id}\t#{mark[:path]}\t#{mark[:url]}\t#{loc}&quot;</span>
929
+ }.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">mark</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">mark</span> }
930
+
931
+ <span class="ruby-identifier">raise</span> <span class="ruby-string">&quot;Error processing available hooks&quot;</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">empty?</span>
932
+
933
+ <span class="ruby-identifier">args</span> = [<span class="ruby-string">&#39;--layout=reverse-list&#39;</span>,
934
+ <span class="ruby-string">&#39;--header=&quot;esc: cancel, tab: multi-select, ctrl-a: select all, return: open&quot;&#39;</span>,
935
+ <span class="ruby-string">&#39;--bind ctrl-a:select-all&#39;</span>,
936
+ <span class="ruby-string">&#39;--prompt=&quot; Select hooks &gt; &quot;&#39;</span>,
937
+ <span class="ruby-string">&#39;--multi&#39;</span>,
938
+ <span class="ruby-string">&#39;--tabstop=4&#39;</span>,
939
+ <span class="ruby-string">&#39;--delimiter=&quot;\t&quot;&#39;</span>,
940
+ <span class="ruby-string">&#39;--with-nth=1,4&#39;</span>,
941
+ <span class="ruby-string">&#39;--height=60%&#39;</span>,
942
+ <span class="ruby-string">&#39;--min-height=10&#39;</span>
943
+ ]
944
+
945
+ <span class="ruby-identifier">fzf</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-keyword">__FILE__</span>), <span class="ruby-string">&#39;../helpers/fuzzyfilefinder&#39;</span>)
946
+
947
+ <span class="ruby-identifier">sel</span> = <span class="ruby-node">`echo #{Shellwords.escape(options.join(&quot;\n&quot;))} | &#39;#{fzf}&#39; #{args.join(&#39; &#39;)}`</span>.<span class="ruby-identifier">chomp</span>
948
+ <span class="ruby-identifier">res</span> = <span class="ruby-identifier">sel</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp">/\n/</span>).<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
949
+ <span class="ruby-identifier">ps</span> = <span class="ruby-identifier">s</span>.<span class="ruby-identifier">split</span>(<span class="ruby-regexp">/\t/</span>)
950
+ { <span class="ruby-value">name:</span> <span class="ruby-identifier">ps</span>[<span class="ruby-value">0</span>], <span class="ruby-value">path:</span> <span class="ruby-identifier">ps</span>[<span class="ruby-value">1</span>], <span class="ruby-value">url:</span> <span class="ruby-identifier">ps</span>[<span class="ruby-value">2</span>] }
951
+ <span class="ruby-keyword">end</span>
952
+
953
+ <span class="ruby-identifier">res</span> <span class="ruby-operator">||</span> []
954
+ <span class="ruby-keyword">end</span></pre>
955
+ </div>
956
+ </div>
957
+
958
+
959
+ </div>
960
+
961
+ <div id="method-i-validate_format" class="method-detail ">
962
+ <div class="method-heading">
963
+ <span class="method-name">validate_format</span><span
964
+ class="method-args">(fmt, options)</span>
965
+ <span class="method-click-advice">click to toggle source</span>
966
+ </div>
967
+
968
+ <div class="method-description">
969
+ <p>Check if format fully matches or matches the first character of available options. Return full valid format or nil</p>
970
+
971
+ <div class="method-source-code" id="validate_format-source">
972
+ <pre><span class="ruby-comment"># File lib/hook/hookapp.rb, line 18</span>
973
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">validate_format</span>(<span class="ruby-identifier">fmt</span>, <span class="ruby-identifier">options</span>)
974
+ <span class="ruby-identifier">valid_format_rx</span> = <span class="ruby-identifier">options</span>.<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">format</span><span class="ruby-operator">|</span> <span class="ruby-identifier">format</span>.<span class="ruby-identifier">sub</span>(<span class="ruby-regexp">/^(.)(.*)$/</span>, <span class="ruby-string">&#39;^\1(\2)?$&#39;</span>) }
975
+ <span class="ruby-identifier">valid_format</span> = <span class="ruby-keyword">nil</span>
976
+ <span class="ruby-identifier">valid_format_rx</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">rx</span>, <span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
977
+ <span class="ruby-identifier">cmp</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">rx</span>, <span class="ruby-string">&#39;i&#39;</span>)
978
+ <span class="ruby-keyword">next</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">fmt</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">cmp</span>
979
+
980
+ <span class="ruby-identifier">valid_format</span> = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">i</span>]
981
+ <span class="ruby-keyword">break</span>
982
+ <span class="ruby-keyword">end</span>
983
+ <span class="ruby-identifier">valid_format</span>
984
+ <span class="ruby-keyword">end</span></pre>
985
+ </div>
986
+ </div>
987
+
988
+
989
+ </div>
990
+
991
+ </section>
992
+
993
+ </section>
994
+ </main>
995
+
996
+
997
+ <footer id="validator-badges" role="contentinfo">
998
+ <p><a href="https://validator.w3.org/check/referer">Validate</a>
999
+ <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.3.2.
1000
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
1001
+ </footer>
1002
+