hookapp 2.0.7 → 2.0.10

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